动画切换器和 Bloc Builder

Posted

技术标签:

【中文标题】动画切换器和 Bloc Builder【英文标题】:Animated Switcher and Bloc Builder 【发布时间】:2020-03-04 02:14:01 【问题描述】:

我是 Flutter 中的 bloc 模式的新手。

我的一个状态类有一个小部件列表和一个索引作为字段。我的目标是使用此状态的小部件更新 Animated Switcher 的子级。

return AnimatedSwitcher(
  duration: Duration(milliseconds: 500),
  child: BlocBuilder<WelcomeBloc, WelcomeBlocState>(
    builder: (context, state) 

      if(state is MyState)
        return state.widgetList[state.index];

      else return Container();

    ,
  ),
);

我也尝试过相反的方法,在 bloc builder 中返回动画切换器,结果是一样的

当调用 yield 时,小部件发生了变化,但没有任何动画。

我错过了什么?

【问题讨论】:

【参考方案1】:

AnimatedSwitcher 的子部件必须改变:

return BlocBuilder<WelcomeBloc, WelcomeBlocState>(
  builder: (context, state) 
    return AnimatedSwitcher(
      duration: Duration(milliseconds: 500),
      child: state is MyState ? state.widgetList[state.index] : Container(key: Key('key2')),
    );
  ,
);

并且不要忘记为子小部件设置不同的键。

【讨论】:

调用BlocBuilder的builder函数时,会不会重建完整的AnimatedSwitcher,而不仅仅是它的child?与为每个子小部件(每个状态)创建多个 AnimatedSwitcher 小部件有何不同?

以上是关于动画切换器和 Bloc Builder的主要内容,如果未能解决你的问题,请参考以下文章

使用 Interface Builder 进行切换

听 Bloc 时如何更改 appbar,我不想在脚手架上使用 bloc builder,而是希望在 AppBar 上使用 BlocBuilder?

同时滑动切换和动画(jQuery)

在 Nuxt 中切换导航动画

HTML5 3D 波浪效果图片切换动画

为啥当我切换工作区时 Flash Builder Premium 会作为标准版启动?