Странная проблема с тенью панели приложений при навигации

#flutter-appbar

#трепетание -панель приложений

Вопрос:

Я сталкиваюсь с проблемой с тенью панели приложений, когда я перехожу на страницу, а затем возвращаюсь на главную страницу. Структура :

  1. Домашняя страница: каркас с пользовательской скользящей панелью приложений и просмотром страницы в качестве тела: — скользящая панель приложений состоит из стека с некоторыми виджетами панели приложений в качестве дочерних элементов, которые отображаются с анимацией — Просмотр страницы показывает содержимое страниц, а его контроллер связан с анимацией панели приложений
  2. Страница поиска ==> доступ с помощью крана в навигаторе по вызовам 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. Я думаю, что это может изменить способ построения панели приложений с учетом анимации / перехода во время навигации, я действительно не знаю.