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

(Flutter) StreamBuilder 只返回 null

如何解决(Flutter) StreamBuilder 只返回 null

我正在尝试创建一个“CategoryStream”来根据用户的选择更新 UI。

这是我的直播:

import 'dart:async';

class CategoryStream {
  StreamController<String> _categoryStreamController =
  StreamController<String>();

closeStream() {
  _categoryStreamController.close();
}

updateCategory(String category) {
  print("Update category in stream was called");
  print("the new category is: " + category);
  _categoryStreamController.sink.add(category);
}

Stream<String> get stream => _categoryStreamController.stream;
}

我的 StreamBuilder 看起来像这样:

 return StreamBuilder<String>(
  stream: CategoryStream().stream,builder: (context,snapshot) {
    return Container(
      color: Colors.white,child: Center(
        child: Text(snapshot.data.toString()),),);
  },);

所以当用户选择一个新类别时,我尝试像这样更新流:

  CategoryStream().updateCategory(currentChosenCategory);

无论我做什么,结果总是null。虽然在 print() 函数显示了正确的类别...... 我错过了什么?

也许我需要使用 StreamProvider?不是 StreamBuilder?因为我将父小部件中的数据添加到子小部件的子小部件中..

解决方法

默认情况下,StreamController 的值为空。在 initialData 中调用 snapshot.data 之前,您需要设置为 StreamBuilder 或将数据添加到流中:

 final CategoryStream _categoryStream = CategoryStream();
 return StreamBuilder<String>(
  stream: _categoryStream.stream,initialData: "",builder: (context,snapshot) {
    return Container(
      color: Colors.white,child: Center(
        child: Text(snapshot.data),//toString() is unnecessary,your data is already a string
      ),);
  },);

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