Flutter error: The argument type 'DocumentSnapshot<Object?>? can't be assigned to parameter 'DocumentSnapshot<Object?>
Flutter error: The argument type 'DocumentSnapshot<Object?>? can't be assigned to parameter 'DocumentSnapshot<Object?>
当我尝试 运行 我的 flutter 应用程序时收到此错误代码,我不知道如何解决它,请帮助:
Error: The argument type 'DocumentSnapshot<Object?>?' can't be
assigned to the parameter type 'DocumentSnapshot<Object?>' because
'DocumentSnapshot<Object?>?' is nullable and
'DocumentSnapshot<Object?>' isn't.
'DocumentSnapshot' is from 'package:cloud_firestore/cloud_firestore.dart'
('/C:/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-3.1.0/lib/cloud_firestore.dart').
'Object' is from 'dart:core'.
MyUser user = MyUser.fromDocument(snapshot.data);
^
这是我的用户参考:
final CollectionReference usersRef = FirebaseFirestore.instance.collection('users');
这是我要构建的小部件:
Widget buildProfileHeader(context) {
final myuser = Provider.of<MyUser>(context);
return FutureBuilder<DocumentSnapshot>(
future: usersRef.doc(myuser.id).get(),
builder: (context, snapshot) {
if(!snapshot.hasData){
return circularProgress();
}
MyUser user = MyUser.fromDocument(snapshot.data);
return Row(...)
这是我的用户工厂:
import 'package:cloud_firestore/cloud_firestore.dart';
class MyUser{
final String id;
final String email;
final String photoUrl;
final String displayName;
final String username;
MyUser({
required this.id,
required this.email,
required this.photoUrl,
required this.displayName,
required this.username,
});
factory MyUser.fromDocument(DocumentSnapshot doc){
return MyUser(
id: doc['id'].toString(),
username: doc['username'].toString(),
email: doc['email'].toString(),
photoUrl: doc['photoUrl'].toString(),
displayName: doc['displayName'].toString(),
);
}
我不明白我该如何解决这个问题。我尝试使用 snapshot.data.data(),但是虽然它修复了我当前的错误,但它给了我新的错误消息:
error: The method 'data' can't be unconditionally invoked because the
receiver can be 'null'. (unchecked_use_of_nullable_value at
[flutter_app] lib\pages\profile_screen.dart:58)
Yuu 只需要使用 :
MyUser user = MyUser.fromDocument(snapshot.data!);
因为此时在您的代码中,即使您测试了 snapshot.hasData
,dart 也会告诉您数据可能为空...但是您已经处理了这种情况,所以可以添加一个 !
当我尝试 运行 我的 flutter 应用程序时收到此错误代码,我不知道如何解决它,请帮助:
Error: The argument type 'DocumentSnapshot<Object?>?' can't be assigned to the parameter type 'DocumentSnapshot<Object?>' because 'DocumentSnapshot<Object?>?' is nullable and 'DocumentSnapshot<Object?>' isn't.
'DocumentSnapshot' is from 'package:cloud_firestore/cloud_firestore.dart' ('/C:/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-3.1.0/lib/cloud_firestore.dart').
'Object' is from 'dart:core'.
MyUser user = MyUser.fromDocument(snapshot.data); ^
这是我的用户参考:
final CollectionReference usersRef = FirebaseFirestore.instance.collection('users');
这是我要构建的小部件:
Widget buildProfileHeader(context) {
final myuser = Provider.of<MyUser>(context);
return FutureBuilder<DocumentSnapshot>(
future: usersRef.doc(myuser.id).get(),
builder: (context, snapshot) {
if(!snapshot.hasData){
return circularProgress();
}
MyUser user = MyUser.fromDocument(snapshot.data);
return Row(...)
这是我的用户工厂:
import 'package:cloud_firestore/cloud_firestore.dart';
class MyUser{
final String id;
final String email;
final String photoUrl;
final String displayName;
final String username;
MyUser({
required this.id,
required this.email,
required this.photoUrl,
required this.displayName,
required this.username,
});
factory MyUser.fromDocument(DocumentSnapshot doc){
return MyUser(
id: doc['id'].toString(),
username: doc['username'].toString(),
email: doc['email'].toString(),
photoUrl: doc['photoUrl'].toString(),
displayName: doc['displayName'].toString(),
);
}
我不明白我该如何解决这个问题。我尝试使用 snapshot.data.data(),但是虽然它修复了我当前的错误,但它给了我新的错误消息:
error: The method 'data' can't be unconditionally invoked because the receiver can be 'null'. (unchecked_use_of_nullable_value at [flutter_app] lib\pages\profile_screen.dart:58)
Yuu 只需要使用 :
MyUser user = MyUser.fromDocument(snapshot.data!);
因为此时在您的代码中,即使您测试了 snapshot.hasData
,dart 也会告诉您数据可能为空...但是您已经处理了这种情况,所以可以添加一个 !