flutter - 如何在两个小部件之间共享公共(public)参数?

标签 flutter dart

我有一个以下小部件,如果 animated = true 呈现 AnimatedContainer,如果 animated = false 呈现 Container :

animated
        ? AnimatedContainer(
            duration: duration,
            decoration: decoration,
            child: child,
            margin: margin,
            padding: padding,
          )
        : Container(
            decoration: decoration,
            child: child,
            margin: margin,
            padding: padding,
          );

如您所见,这两个小部件共有四个参数。有没有一种方法可以将参数存储在变量中并作为一个变量在它们之间传递?所以像这样:

var params = (
  decoration: decoration,
  child: child,
  margin: margin,
  padding: padding,
);

animated
        ? AnimatedContainer(
            duration: duration,
            ...params,
          )
        : Container(params);

最佳答案

您可以为此使用 bloc。 创建一个 StreamController 并将两个小部件包装在 StreamBuilder 中。 现在,当您想要更新值时,只需将值添加到 StreamSink。

代码:

class AnimationBloc extends Bloc {
  StreamController _animationController = StreamController<bool>.broadcast();
  Stream get animationStream => _animationController.stream;
  StreamSink get animationStreamSink => _animationController.sink;
  @override
  void dispose() {
    _animationController.close();
  }
}

block 在哪里:

abstract class Bloc {
  void dispose();
}

现在用 StreamBuilder 包装小部件

StreamBuilder<bool>(
   initialData: false,
   stream: AnimationBloc.animationStream,
   builder: (BuildContext context,
             AsyncSnapshot<String> snapshot) {
             return 
              snapshot.data
                ? AnimatedContainer(
                   duration: duration,
                   decoration: decoration,
                   child: child,
                   margin: margin,
                   padding: padding,
                 )
                : Container(
                   decoration: decoration,
                   child: child,
                   margin: margin,
                   padding: padding,
                );
             },
  ),

[对其他小部件做同样的事情] 当您需要将 bool 值 animated 更新为 true 时,只需将其放入 AnimationBloc.animationStreamSink.add(true) 中即可更新两个小部件。

关于flutter - 如何在两个小部件之间共享公共(public)参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59874423/

相关文章:

image - 从图像获取像素的颜色

flutter - 我可以阻止 ExpansionTile 重建其子项吗?

flutter - Flutter/Dart:将getter 'length'调用为null

firebase - 防止 Flutter StreamBuilder 在 ListView 中重复数据

flutter - 如何更改现有 TextStyle 的特定属性?

dart - 弹出第二页后触发FirstPage的setState方法

flutter - 如何转换为未知的通用运行时类型(C# ChangeType 等效项)

dart - 如何在Dart+polymer 1.0中使用dom-repeat进行简单的数据绑定(bind)?

git - 我们可以从一个Repo使用多个flutter插件吗?

flutter - 由于堆叠屏幕 flutter ,Snackbar 显示两次,我该如何避免?