颤动: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 中创建。如果您仍然尝试,每次重建小部件时都会创建主题(具有相同的初始值)。