当尝试从null值上使用的null检查运算符获取数据时-Flutter



我正在尝试从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 : "",
);

最新更新