如何从RealmResults获取Flutter Stream?StreamProvider报错求助
解决StreamProvider与RealmResults.changes的类型不匹配问题
问题核心是类型不兼容:RealmResults.changes返回的是Stream<RealmResultsChanges<MyObject>>,它每次发出的是包含变更详情的RealmResultsChanges对象;而你声明的StreamProvider<MyObject>需要的是直接输出MyObject实例的流,两者类型不匹配才会报错。
解决方案:转换流的输出类型
根据你的业务需求,有两种处理方式:
1. 若需单个MyObject实例(比如查询单条数据)
用map操作将RealmResultsChanges转换为MyObject,从变更对象的results属性中提取目标实例,同时注意处理空结果避免崩溃:
StreamProvider<MyObject>( initialData: MyObject(), create: (context) => RealmResults.changes .map((changes) => changes.results.isNotEmpty ? changes.results.first : MyObject()), child: Scaffold(), )
2. 若需列表形式的MyObject(比如查询多条数据)
将StreamProvider的泛型改为List<MyObject>,再转换流的输出内容:
StreamProvider<List<MyObject>>( initialData: [], create: (context) => RealmResults.changes .map((changes) => changes.results.toList()), child: Scaffold(), )
补充说明
你之前用StreamBuilder能运行,本质是StreamBuilder的泛型实际应为RealmResultsChanges<MyObject>(只是你写了MyObject但在builder里自行处理了快照数据);但StreamProvider对泛型和流的输出类型要求严格一致,因此必须显式转换流的输出类型。
内容的提问来源于stack exchange,提问作者Ant D
相关产品推荐
相关产品推荐

