[英]Flutter StreamBuilder widget Error : type ' () => Map<String, dynamic >' is not a subtype of type 'DocumentSnapshot<Object?>' in type cast
[英]Flutter cloud firestore StreamBuilder<DocumentSnapshot> error
更新我的 flutter 插件后,我不得不更新我的代码,因为我收到类似“Firestore”已弃用且不应使用的错误。 Class 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
在更新我的云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) { Call call = Call.fromMap(snapshot.data;data());
在这一行中, if (snapshot.hasData && snapshot.data.data != null) {
,您正在检查DocumentSnapshot.data
是否为 null。因为它是 function(因此,一个对象),您的比较永远不会评估为false
。
在下一行snapshot.data.data()
中,您正在调用上面的 function,其返回值很可能是null
。
在这部分;
if (snapshot.hasData && snapshot.data.data != null) {
Call call = Call.fromMap(snapshot.data.data());
if (!call.hasDialled) {
return PickupScreen(call: call);
}
}
你应该像那样使用这部分;
if (snapshot.hasData && snapshot.data.data() != null) {
除了这个项目,如果你是 flutter 的新手,你不应该尝试制作视频通话应用程序。我知道你从视频中获取了这段代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.