微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

颤振:BehaviorSubject 未重建小部件

如何解决颤振:BehaviorSubject 未重建小部件

我正在尝试在我的无状态小部件上使用 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);
    
    },

解决方法

我完全同意 您需要在 sink

中使用 _valueNotifier
  CustomDropdown(
    dropdownMenuItemList: options,enableBorderColor: Color(PRIMARY_COLOR_2),onChanged: (value) {
      _valueNotifier.sink.add([value]);
    },),
,

改变值不会通知 BehaviorSubject 任何事情。为了让 BehaviorSubject 通知其侦听器,您需要提供不同的状态对象。

  CustomDropdown(
    dropdownMenuItemList: options,onChanged: (value) {
Sta
      _valueNotifier.value = [..._valueNotifier.value,value];
      // or _valueNotifier.add([..._valueNotifier.value,value]);
    },

此外,BehaviorSubject 是状态,不应在 StatelessWidget 中创建。如果您仍然尝试,则每次重新构建小部件时都会创建主题(具有相同的初始值)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。