动画切换器和 Bloc Builder

jus*_*ser 3 flutter bloc

我是颤振中块模式的新手。

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

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

    },
  ),
);
Run Code Online (Sandbox Code Playgroud)

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

当yield 被调用时,widget 被改变但没有任何动画。

我错过了什么?

Igo*_*din 8

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')),
    );
  },
);
Run Code Online (Sandbox Code Playgroud)

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

  • 当调用 BlocBuilder 的构建器函数时,是否会重建整个 AnimatedSwitcher 而不仅仅是其子级?它与为每个子小部件(针对每个状态)创建多个 AnimatedSwitcher 小部件有何不同? (2认同)