【问题标题】:How to get textfield value from widget to bloc如何从小部件获取文本字段值到块
【发布时间】:2020-10-05 13:09:22
【问题描述】:

我有这个设置。我有一个包含我的搜索文本字段的小部件。 现在我要做的是在我的 bloc 类中侦听并获取文本字段值,并能够与不同的构造函数一起使用。

这是文本字段:

TextField(
     controller: _searchinput,
     onChanged: chatBloc.onChatTextChanged.add
);

这是我想要获取值的 bloc 类。

  class ChatBloc extends ChatService {
      ChatBloc.empty();
      ChatBloc(chatroomid) {
        _subject.addStream(fetchFirstListStream(chatroomid));
      }
      ChatBloc.forSearchScroll(chatroomid, [items]) {
        _controller.listen(
            (notification) => loadmoreSearchChats(chatroomid, notification));
       });
     
      loadmoreSearchChats(chatroomid, notification){
         // So I can use the search term here.
      }
    }

我想在 ChatBloc.forSearchScroll 中有 searchterm 值。构造函数,如果可能,该值应该作为 bloc 类中的全局值可用,我可以在该类的其他方法中使用。例如,我应该能够在 loadmoreSearchChats 方法中使用文本字段值执行更多搜索过滤器。

我尝试了 RxDart BehaviorSubject

BehaviorSubject<String> searchtext;
 Sink<String> get searchtextsetter => searchtext.sink;

并且在小部件中尝试添加值:

chatBloc.searchtextsetter.sink.add(value)

没有用。 显然没有以正确的方式做这件事。那么正确的方法是什么?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你必须替换

    BehaviorSubject<String> searchtext;
    Sink<String> get searchtextsetter => searchtext.sink;
    

    BehaviorSubject<String> searchtext;
    Sink<String> get searchtextsetter => searchtext.sink.add;
    

    onChanged: chatBloc.onChatTextChanged.add
    

    onChanged: chatBloc.searchtextsetter
    

    【讨论】:

      【解决方案2】:

      你可以这样使用,

      final searchtext = BehaviorSubject<String>();
      Function(String) get searchtextsetter => searchtext.sink.add;
      
      TextField(
       controller: _searchinput,
       onChanged: chatBloc.searchtextsetter,
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 2019-05-25
        相关资源
        最近更新 更多