#flutter-appbar
#трепетание -панель приложений
Вопрос:
Я сталкиваюсь с проблемой с тенью панели приложений, когда я перехожу на страницу, а затем возвращаюсь на главную страницу. Структура :
- Домашняя страница: каркас с пользовательской скользящей панелью приложений и просмотром страницы в качестве тела: — скользящая панель приложений состоит из стека с некоторыми виджетами панели приложений в качестве дочерних элементов, которые отображаются с анимацией — Просмотр страницы показывает содержимое страниц, а его контроллер связан с анимацией панели приложений
- Страница поиска ==> доступ с помощью крана в навигаторе по вызовам FAB.push(контекст, MaterialPageRoute(builder: (контекст) => Страница поиска ()))
Вот ошибка AppBar: если я перехожу на страницу поиска, а затем возвращаюсь обратно, тень с каждым разом становится глубже, как если бы высота AppBar увеличивалась… Смотрите GIF ниже :
Это не отображается, если я использую стандартную панель приложений вместо моей пользовательской скользящей панели приложений. Его код здесь :
class MenuAppBar extends StatefulWidget implements PreferredSizeWidget
{
final PageController pageController;
final List<Widget> children;
MenuAppBar({@required this.pageController, @required this.children});
@override
Size get preferredSize => Size.fromHeight(56.0);
@override
State<StatefulWidget> createState() => _MenuAppBarState();
}
class _MenuAppBarState extends State<MenuAppBar> with SingleTickerProviderStateMixin
{
final List<Widget> sliders = new List<Widget>();
AnimationController _animationController;
@override
void initState()
{
super.initState();
this._animationController = new AnimationController(upperBound: widget.children.length.toDouble() - 1, vsync: this);
widget.pageController.addListener(_onPageSwitch);
}
void _onPageSwitch()
{
this._animationController.value = widget.pageController.page;
}
@override
Widget build(BuildContext context)
{
for(int i = 0; i < widget.children.length; i )
{
this.sliders.add(this._buildSlider(index: i.toDouble(), child: widget.children[i]));
}
return Stack(children: this.sliders);
}
Widget _buildSlider({double index, Widget child})
{
return SlideTransition(
position: Tween<Offset>(
begin: Offset(index, 0),
end: Offset(index - 1, 0)
).animate(this._animationController),
child: child
);
}
}
Есть какие-нибудь идеи о том, что может пойти не так? 🙁
Спасибо!
Ответ №1:
Ну, это кажется не очень вдохновляющим… Тем не менее, кто-то дал мне несколько советов, и это решило проблемы, которые могут появиться как ошибка в фреймворке.
Что решило проблему, так это определить SlideTransitionWidget, который управляет своей собственной анимацией и получает дочерний виджет и AnimationController. Я думаю, что это может изменить способ построения панели приложений с учетом анимации / перехода во время навигации, я действительно не знаю.