我正在尝试从firestore获取数据并显示它们。
当我呼叫VendorModel vendor = VendorModel.fromJson(snapshot.data!() as Map<String, dynamic>);
时它让我破例说
用于空值的空校验运算符
这是我的文件
vander_home.dart
class VendorHome extends StatelessWidget {
const VendorHome({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final FirebaseService _service = FirebaseService();
return StreamBuilder<DocumentSnapshot>(
stream: _service.vendor.doc(_service.user!.uid).snapshots(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator(
color: Colors.red,
);
}
VendorModel vendor =
VendorModel.fromJson(snapshot.data!() as Map<String, dynamic>);
return Text(
vendor.businessName!,
);
},
);
}
}
vander_model.dart
class VendorModel {
VendorModel({
this.businessName,
});
VendorModel.fromJson(Map<String, Object?> json)
: this(
businessName: json['businessName']! as String,
);
final String? businessName;
Map<String, Object?> toJson() {
return {
'businessName': businessName,
};
}
}
firebase_service.dart
导入'package:firebase_storage/firebase_sttorage.dart'作为firebase_storage;
class FirebaseService {
User? user = FirebaseAuth.instance.currentUser;
final CollectionReference vendor =
FirebaseFirestore.instance.collection('vendor');
firebase_storage.FirebaseStorage storage =
firebase_storage.FirebaseStorage.instance;
Future<void> addVendor({Map<String, dynamic>? data}) {
return vendor.doc(user!.uid).set(data);
}
}
如何解决这个问题?
我找到了一种方法。但是任何人都可以帮助我如何解决我的上述问题,请帮助我。
class VendorHome extends StatelessWidget {
const VendorHome({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final FirebaseService _service = FirebaseService();
return StreamBuilder<DocumentSnapshot>(
stream: _service.vendor.doc(_service.user!.uid).snapshots(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator(
color: Colors.red,
);
}
if (!snapshot.data!.exists) {
return const BusinessRegisterScreen();
}
var docc = snapshot.data;
return Text(
docc!['businessName'],
);
},
);
}
}
不使用VendorModel。。。
谢谢。
您在null值上使用!
,因此更改此项:
VendorModel vendor = VendorModel.fromJson(snapshot.data!() as Map<String, dynamic>);
到此:
VendorModel vendor = VendorModel.fromJson( snapshot.data == null ? {}: snapshot.data as Map<String, dynamic>);
也在您的VendorModel
模型类中更改此:
VendorModel.fromJson(Map<String, Object?> json)
: this(
businessName: json['businessName']! as String,
);
至
VendorModel.fromJson(Map<String, Object?> json)
: this(
businessName: json['businessName'] != null ? json['businessName'] as String : "",
);