#flutter
#флаттер
Вопрос:
У меня есть это изображение, которое я хотел бы отобразить на весь экран и повернуть в фоновом режиме:
Здесь он правильно заполняет экран:
Проблема в том, что при его вращении обрезаются стороны:
Я перепробовал все типы подгонки по размеру. Я попытался увеличить ширину контейнера до double.infinity. Я попытался обернуть изображение в SingleChildScrollView. Я попытался поместить overflow: Overflow.visible в стек. Весь день пробовал, но, похоже, ничего не работает.
Изображение должно непрерывно заполнять экран при вращении. Как я могу закодировать его так, чтобы края не обрезались?
Вот мой код:
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Stack(
children: <Widget>[
SpinPerfect(
infinite: true,
duration: Duration(seconds: 10),
child: Image.asset(
'assets/images/star-burst.png',
fit: BoxFit.none,
),
),
Container(
child: Center(
child: Text('This is Screen 1'),
),
),
],
),
),
);
}
}
Примечание: в настоящее время я поворачиваю его с помощью SpinPerfect из пакета animate_do, но та же проблема с обрезкой возникает при использовании Transform.rotate.
Заранее спасибо за любое направление!
Комментарии:
1.
Overflow.visible
работает просто отлично — это вашSpinPerfect
, который обрезает дочерний элемент2. Хммм — я заменил SpinPerfect на AnimatedBuilder, но он также обрезается. Спасибо за ответ. Знаете ли вы что-нибудь, что я могу использовать для вращения фонового изображения, которое не будет его обрезать?
3.
child: Stack( alignment: Alignment.center, children: [ Container(color: Colors.grey), Transform.rotate( angle: math.pi / 4, child: Image.asset('images/bg.jpg'), ), ], ),
— у вас это не работает?4. Да, к сожалению, он по-прежнему обрезает края. imgur.com/a/6fVhJDi
Ответ №1:
Вот решение, которое работает очень хорошо:
Используйте SpinPerfect из пакета animate_do (https://pub.dev/packages/animate_do ) в сочетании с пакетом photo_view (https://pub.dev/packages/photo_view ).
SpinPerfect(
infinite: true,
spins: 1,
duration: Duration(seconds: 60),
child: PhotoView(
disableGestures: true,
backgroundDecoration: BoxDecoration(color: Colors.transparent),
initialScale: PhotoViewComputedScale.covered * 2.7,
imageProvider: AssetImage('assets/images/background.jpg'),
),
)
Спасибо создателю пакета animate_do за идею. (Очень крутой чувак!)