firebase - 引发了另一个异常:type '_MapStream>' 不是类型“列表”的子类型'
问题描述
这是firestore的服务
Stream<List<AccountSummary>> get accountsStream {
CollectionReference _accountReference = FirebaseFirestore.instance
.collection('borrowers')
.doc(uid)
.collection('accounts');
return _accountReference.snapshots().map((snapshot) => snapshot.docs
.map((document) => AccountSummary.fromMap(document.data()))
.toList());
}
这是小部件代码
Widget build(BuildContext context) {
final borrowerService =
Provider.of<BorrowerService>(context, listen: false);
final List<AccountSummary> accountlist =
borrowerService.accountsStream ?? [];
print(accountlist.length);
return StreamBuilder<List<AccountSummary>>(
stream: borrowerService.accountsStream,
builder: (context, AsyncSnapshot<List<AccountSummary>> snapshot) {
final List<AccountSummary> summary = snapshot.data;
if (summary != null) {
return ListView.builder(
itemCount: summary.length,
itemBuilder: (context, int index) {
return AccountTile(summary[index]);
},
);
}
return Center(
child: Text('Loading'),
);
},
);
}
我在 UI 上收到此错误消息
引发了另一个异常:类型 '_MapStream<QuerySnapshot, List>' 不是类型 'List' 的子类型 如何修复代码?
这是我在调试控制台中遇到的错误,我在面向对象编程方面工作不多我认为这与没有获得所需的类有关,或者请帮助
═╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _TypeError was thrown building AccountList(dirty):
type '_MapStream<QuerySnapshot, List<AccountSummary>>' is not a subtype of type
'List<AccountSummary>'
The relevant error-causing widget was:
AccountList
lib\…\Borrowings\borrow_profile_screen.dart:66
When the exception was thrown, this was the stack:
#0 AccountList.build
package:paisa/widgets/account_list.dart:12
#1 StatelessElement.build
package:flutter/…/widgets/framework.dart:4620
#2 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4546
#564 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4525
#565 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4520
... Normal element mounting (7 frames)
#572 SingleChildWidgetElementMixin.mount
package:nested/nested.dart:223
... Normal element mounting (7 frames)
#579 _NestedHookElement.mount
package:nested/nested.dart:188
... Normal element mounting (7 frames)
#586 SingleChildWidgetElementMixin.mount
package:nested/nested.dart:223
#587 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3490
#588 Element.updateChild
package:flutter/…/widgets/framework.dart:3255
#589 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4571
#590 StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4719
#591 Element.rebuild
package:flutter/…/widgets/framework.dart:4262
#592 BuildOwner.buildScope
package:flutter/…/widgets/framework.dart:2667
#593 WidgetsBinding.drawFrame
package:flutter/…/widgets/binding.dart:866
#594 RendererBinding._handlePersistentFrameCallback
package:flutter/…/rendering/binding.dart:286
#595 SchedulerBinding._invokeFrameCallback
#596 SchedulerBinding.handleDrawFrame
package:flutter/…/scheduler/binding.dart:1056
#597 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
package:flutter/…/scheduler/binding.dart:865
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
The following _TypeError was thrown building AccountList(dirty):
type '_MapStream<QuerySnapshot, List<AccountSummary>>' is not a subtype of type 'List<AccountSummary>'
The relevant error-causing widget was
AccountList
lib\…\Borrowings\borrow_profile_screen.dart:66
When the exception was thrown, this was the stack
#0 AccountList.build
package:paisa/widgets/account_list.dart:12
#1 StatelessElement.build
package:flutter/…/widgets/framework.dart:4620
#2 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4546
#3 Element.rebuild
package:flutter/…/widgets/framework.dart:4262
#4 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4525
...
═══════ Exception caught by widgets library ═══════════════════════════════════
type '_MapStream<QuerySnapshot, List<AccountSummary>>' is not a subtype of type 'List<AccountSummary>'
The relevant error-causing widget was
AccountList
lib\…\Borrowings\borrow_profile_screen.dart:66
════════════════════════════════════════════════════════════════════════════════
解决方案
我发现了代码的问题
final List<AccountSummary> accountlist =
borrowerService.accountsStream ?? [];
print(accountlist.length);
这段代码就是问题所在。当我删除它时。它开始工作了。
以前我尝试在没有 StreamBuild 的情况下构建小部件,我忘记了清理代码。
推荐阅读
- javascript - JavaScript - 仅显示从美国价格转换而来的加元价格
- async-await - HTMLButtonElement EventListener 中的 Kotlin/JS 挂起函数
- javascript - 如何将 js 对象转换为 js 文字?
- vue.js - Vue v2.6 性能不佳
- typescript - 让 TypeScript 泛型函数访问类型变量
- r - R 使用相对位置从其他列计算新列值。为什么结果列的类= data.frame?
- reactjs - 用 Jest 测试 React DOM
- regex - 如何从 URL 中提取字符串并将 % 替换为空格?
- javascript - Nest js - 在 ToJSON 方法中更改破折号的大写字母
- ruby-on-rails - 这是什么 Rails 服务器日志错误?(随附的)