颤动:BehaviorSubject 不重建小部件
flutter: BehaviorSubject not rebuild widget
我正在尝试在我的无状态小部件上使用 Rxdart:
class SimplePrioritySelectWidget extends StatelessWidget {
BehaviorSubject<List<String>> _valueNotifier =
BehaviorSubject<List<String>>.seeded([]);
我用 StreamBuilder 包装我的小部件:
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: _valueNotifier.stream,
initialData: options,
builder: (context, snapshot) {
print("rebuild");
return Padding(
padding: const EdgeInsets.only(top: 25),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 16.h,
),
我有一个自定义下拉小部件,我不知道为什么,当我在 _valueNotifier
中添加一个字符串时,构建器方法没有被调用?我的小部件没有重建?怎么了?
CustomDropdown(
dropdownMenuItemList: options,
enableBorderColor: Color(PRIMARY_COLOR_2),
onChanged: (value) {
_valueNotifier.value.add(value);
},
),
我完全同意
你需要在 _valueNotifier
中使用 sink
CustomDropdown(
dropdownMenuItemList: options,
enableBorderColor: Color(PRIMARY_COLOR_2),
onChanged: (value) {
_valueNotifier.sink.add([value]);
},
),
更改值不会通知 BehaviorSubject
任何事情。为了让 BehaviorSubject
通知它的监听器,你需要提供一个不同的状态对象。
CustomDropdown(
dropdownMenuItemList: options,
enableBorderColor: Color(PRIMARY_COLOR_2),
onChanged: (value) {
Sta
_valueNotifier.value = [..._valueNotifier.value, value];
// or _valueNotifier.add([..._valueNotifier.value, value]);
},
),
此外,BehaviorSubject
是状态,不应在 StatelessWidget
中创建。如果您仍然尝试,每次重建小部件时都会创建主题(具有相同的初始值)。
我正在尝试在我的无状态小部件上使用 Rxdart:
class SimplePrioritySelectWidget extends StatelessWidget {
BehaviorSubject<List<String>> _valueNotifier =
BehaviorSubject<List<String>>.seeded([]);
我用 StreamBuilder 包装我的小部件:
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: _valueNotifier.stream,
initialData: options,
builder: (context, snapshot) {
print("rebuild");
return Padding(
padding: const EdgeInsets.only(top: 25),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 16.h,
),
我有一个自定义下拉小部件,我不知道为什么,当我在 _valueNotifier
中添加一个字符串时,构建器方法没有被调用?我的小部件没有重建?怎么了?
CustomDropdown(
dropdownMenuItemList: options,
enableBorderColor: Color(PRIMARY_COLOR_2),
onChanged: (value) {
_valueNotifier.value.add(value);
},
),
我完全同意
你需要在 _valueNotifier
sink
CustomDropdown(
dropdownMenuItemList: options,
enableBorderColor: Color(PRIMARY_COLOR_2),
onChanged: (value) {
_valueNotifier.sink.add([value]);
},
),
更改值不会通知 BehaviorSubject
任何事情。为了让 BehaviorSubject
通知它的监听器,你需要提供一个不同的状态对象。
CustomDropdown(
dropdownMenuItemList: options,
enableBorderColor: Color(PRIMARY_COLOR_2),
onChanged: (value) {
Sta
_valueNotifier.value = [..._valueNotifier.value, value];
// or _valueNotifier.add([..._valueNotifier.value, value]);
},
),
此外,BehaviorSubject
是状态,不应在 StatelessWidget
中创建。如果您仍然尝试,每次重建小部件时都会创建主题(具有相同的初始值)。