flutter - Flutter Cloud Firestore StreamBuilder错误
问题描述
更新我的颤振插件后,我不得不更新我的代码,因为我收到了像这样的错误“Firestore”已被弃用,不应该被使用。类 Firestore 已弃用,请改用“FirebaseFirestore”。
我遵循警告并更新了我的代码,但现在我的 streamBuilders 无法正常工作,我不知道为什么。
这是我的代码
class PickupLayout extends StatelessWidget {
final Widget scaffold;
final CallMethods callMethods = CallMethods();
PickupLayout({
@required this.scaffold,
});
@override
Widget build(BuildContext context) {
final UserProvider userProvider = Provider.of<UserProvider>(context);
return (userProvider != null && userProvider.getUser != null)
? StreamBuilder<DocumentSnapshot>(
stream: callMethods.callStream(uid: userProvider.getUser.uid),
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data.data != null) {
Call call = Call.fromMap(snapshot.data.data());
if (!call.hasDialled) {
return PickupScreen(call: call);
}
}
return scaffold;
},
)
: Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
}
这是错误
════════ Exception caught by widgets library ═══════════════════════════════════
The following NoSuchMethodError was thrown building StreamBuilder<DocumentSnapshot>(dirty, state: _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot<DocumentSnapshot>>#a2802):
The method '[]' was called on null.
Receiver: null
Tried calling: []("caller_id")
The relevant error-causing widget was
StreamBuilder<DocumentSnapshot>
package:vdb_tinus_app/…/pickup/pickup_layout.dart:22
When the exception was thrown, this was the stack
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 new Call.fromMap
package:vdb_tinus_app/…/models/call.dart:37
#2 PickupLayout.build.<anonymous closure>
package:vdb_tinus_app/…/pickup/pickup_layout.dart:26
#3 StreamBuilder.build
package:flutter/…/widgets/async.dart:525
#4 _StreamBuilderBaseState.build
根据日志,在更新我的云 Firestore 之前插入的错误行在更新 if (snapshot.hasData && snapshot.data.data != null) { Call call = Call.fromMap(snapshot.data.data);
后看起来像这样,我不得不将其更改为 if (snapshot.hasData && snapshot.data.data != null) { Call call = Call.fromMap(snapshot.data.data());
解决方案
在这一行中if (snapshot.hasData && snapshot.data.data != null) {
,您正在检查是否DocumentSnapshot.data
为空。由于它是一个函数(因此是一个对象),因此您的比较永远不会评估为false
.
在下一行,snapshot.data.data()
你正在调用上面的函数,它的返回值很可能是null
。
推荐阅读
- mysql - XAMP:Mysql 连接卡住
- linux-kernel - 从 linux 内核的源代码构建内核调试 rpm 失败,找不到 debugfiles.list,没有这样的文件或目录
- sql-server - T-SQL 查询得到以下结果
- r - 在R中并行运行合并列表
- raspberry-pi3 - 树莓派 3 代码不工作
- sql - 正确存档数据而不会“丢失更新”
- mysql - 表达模型文件与迁移文件相比实际上在做什么?
- c++ - 我想知道一些 boost::asio 的机制
- fullscreen - Flutter如何进入全屏模式
- ios - 作为一种常用方法,如何将图像作为背景放置在我的应用程序中的所有 XIB 上?