我已经创建为领域对象,并将其连接到MongoDB Atlas.

在Ffltter StreamBuilder小部件中,stream参数将RealmResults.Changes作为流,并且它可以工作.

StreamBuilder<MyObject>(
        stream: RealmResults.changes, //works
        builder: (context, snapshot) => ()
),

但如果使用StreamProvider,则需要流的Create参数不会将RealmResults.Changes作为流接受.

StreamProvider<MyObject>(
        initialData: MyObject(),
        create: (context) => RealmResults.changes, //error
        child: Scaffold()
)

此处以红色显示的错误为: 根据闭包上下文的要求,返回类型‘Stream&lt;RealmResultsChanges&lt;MyObject&gt;&gt;’不是‘Stream&lt;MyObject&>?’. 我糊涂了,有谁能帮我吗?谢谢

推荐答案

该错误表明流的预期返回类型与CREATE参数中的闭包所需的类型不匹配.

出现错误的原因是RealmResults.changes返回Stream<RealmResultsChanges<MyObject>>,而StreamProvider中的CREATE参数需要Stream<MyObject>.

要解决这个问题,您需要将从RealmResults.changes获得的流转换为MyObject的流.您可以使用map方法从更改流中提取必要的数据来实现这一点.

下面是一个如何做到这一点的例子:

StreamProvider<MyObject>(
  initialData: MyObject(),
  create: (context) {
    // Replace MyObject with your actual object type
    final Realm realm = Realm(); // Assuming you have the realm instance
    final results = realm.objects<MyObject>(); // Replace with your MyObject type

    // Transform the changes stream to a stream of MyObject
    return results.changes.map((changes) {
      // Extract the latest MyObject from changes
      // For example, if you're interested in the first change:
      if (changes.inserted.isNotEmpty) {
        return results[changes.inserted.first];
      } else if (changes.modified.isNotEmpty) {
        return results[changes.modified.first];
      } else {
        // Handle other change types (deletions, etc.) or return a default value
        return MyObject(); // Return a default object if needed
      }
    });
  },
  child: Scaffold(),
)

用您的实际对象类型替换MyObject,并调整map中的逻辑以适应您从更改流中检索更新对象的特定需求.

这样,您可以将更改流从Realm转换为所需对象类型(MyObject)的流,使其与StreamProvider‘S的期望兼容.

Flutter相关问答推荐

Flutter -设计具有奇怪边界的容器的方法Radius

CMakeLists.txt处的CMake错误:3(项目)找不到指定的Visual Studio实例

ReCAPTCHA Enterprise中的严重安全漏洞

设置Flutter 中的ListView.Builder()的最小高度

分页控制器在到达页面末尾之前或在初始化页面时对每个索引调用API

在VSCode中运行应用程序而不进行调试时,控制台仍显示为调试模式

在Flutter 小部件测试中找不到框中的AssetImage装饰

Flutter 数独网格

应为标识符,并应为查找)错误

如何修改来自合并 list 的 Android list 权限?

尽管设置了对齐方式,如何对齐列中的行?

当键盘隐藏表单时该怎么办?

如何在Flutter中的textField中在可编辑文本和前缀图标之间添加空格?

如何使 flutter 2 手指zoom ?

Freezed+BLoc 如何从 BLoc Listener 查看当前状态和特定状态的变量

通过一个具体的例子理解Flutter约束的本质

如何对齐卡片小部件中的图标按钮?

我想在一个屏幕上有两个相同区域的列表视图,我该如何设置?

如何从 showModalBottomSheet 中的 topRight 和 topLeft 移除平边

如何从圆角go 除背景 colored颜色