我有一个以下小部件,如果 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/