Flutter 颤振-在复杂的用户界面中,集团通信应该如何进行?

Flutter 颤振-在复杂的用户界面中,集团通信应该如何进行?,flutter,dart,mobile,bloc,Flutter,Dart,Mobile,Bloc,我想就一个我感兴趣的话题提出一些建议。最佳方式和最佳实践是什么?我试图画一个关于这个主题的UI。我正在使用这个软件包 场景:我有一个如图所示的列表,底部有得分按钮。如果不在列表中进行选择,按钮将不处于活动状态。当我从列表中选择项目时,按钮处于活动状态。当我按下“分数”按钮时,分数将写入列表中的选定元素,并且分数按钮再次变为非活动状态 这个UI看起来很简单,但我的问题是UI更复杂因此我肯定会在屏幕上使用多个区块。 我想知道如何以最好的方式实现集团之间的沟通?我应该在顶层创建父块吗 您应该有一个控制

我想就一个我感兴趣的话题提出一些建议。最佳方式和最佳实践是什么?我试图画一个关于这个主题的UI。我正在使用这个软件包

场景:我有一个如图所示的列表,底部有得分按钮。如果不在列表中进行选择,按钮将不处于活动状态。当我从列表中选择项目时,按钮处于活动状态。当我按下“分数”按钮时,分数将写入列表中的选定元素,并且分数按钮再次变为非活动状态

这个UI看起来很简单,但我的问题是UI更复杂因此我肯定会在屏幕上使用多个区块。

我想知道如何以最好的方式实现集团之间的沟通?我应该在顶层创建父块吗


您应该有一个控制整个屏幕的单块。 在您的bloc状态下,您可以拥有一个属性来保存所选的项(或其索引-这里由您决定)。您的点按钮将基于此道具通过
BlocBuilder
启用/禁用。
点击点按钮,您只需添加一个事件,如
PointsAssigned(amount:50)
FiftyPointsAssigned()
——再次由您决定。此事件将映射到一个状态,在该状态下,点将附加到所选项目,并将通过
BlocBuilder
重建UI,以便反映您的更改。

多个bloc可以在同一上下文中使用。您可以从
flatter\u bloc
然后,您可以访问bloc数据并通信您在bloc中定义的任何内容

Widget build(BuildContext context) {
   return MultiBlocProvider(
            providers: [
              BlocProvider<TodoBloc>(create: (BuildContext context) => TodoBloc()),
              BlocProvider<PointBloc>(
                  create: (BuildContext context) => PointBloc()),
            ],
            child: Scaffold(
                        ......
                   ),
          );
}
小部件构建(构建上下文){
返回多BlocProvider(
供应商:[
BlocProvider(创建:(BuildContext上下文)=>TodoBloc()),
BlocProvider(
create:(BuildContext上下文)=>PointBloc()),
],
孩子:脚手架(
......
),
);
}

如果不知道当前代码的样子,很难解释。你真的不需要额外的集团。您的Todo实例可能具有某种bool属性
onSelected

Todo(
  final String name;
  final int point;
  final bool onSelected;

  Todo(this.name, this.point, this.onSelected);
)