【问题标题】:Weird issue with AppBar shadow while navigating导航时 AppBar 阴影的奇怪问题
【发布时间】:2020-12-10 23:42:43
【问题描述】:

当我导航到某个页面然后弹回主页时,我的 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
        );
    }
}

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

谢谢!

【问题讨论】:

    标签: flutter-appbar


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-02-19
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2021-02-19
      相关资源
      最近更新 更多