0

当我导航到页面然后弹回主页时,我的 AppBar 阴影出现问题。结构是:

  1. HomePage:以自定义滑动 AppBar 和 PageView 作为主体的脚手架: - 滑动 AppBar 由一个 Stack 组成,其中一些 AppBar 小部件作为子项,它们以动画形式出现 - PageView 显示页面内容,其控制器链接到 AppBar 的动画
  2. SearchPage ==> 通过点击 FAB 调用 Navigator.push(context, MaterialPageRoute(builder: (context) => SearchPage())) 访问

这是 AppBar 的错误:如果我转到 SearchPage 然后弹回来,阴影每次都会变深,就像 AppBar 的高度在增长一样......见下面的 GIF:

在此处输入图像描述

如果我使用标准 AppBar 而不是我的自定义滑动 AppBar,这不会出现。它的代码在这里:

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
        );
    }
}

知道会出什么问题吗?:(

谢谢 !

4

1 回答 1

0

好吧,似乎不是很鼓舞人心......但是有人给了我一些建议,它解决了问题,这可能表现为框架中的一个错误。

解决这个问题的方法是定义一个 SlideTransitionWidget,它管理自己的 Tween 并接收一个子 Widget 和一个 AnimationController。我认为它可能会改变 AppBar 在导航时考虑动画/过渡的构建方式,我真的不知道。

于 2020-12-16T23:50:47.663 回答