当我在 flutter 中使用 null safety 定义了一个特定列表的模型时,在 null 值上使用了 null 检查运算符
Null check operator used on null value when I have defined a model the particular list using null safety in flutter
我想检查列表是否为空然后显示一些图像,如果不是我想显示列表的内容但是在检查列表是否为 empty.This 是我的时出现错误型号 class
import 'dart:convert';
class ProductModel {
ProductModel({
this.name,
this.description,
this.sellerId,
this.published,
this.origin,
this.weight,
this.material,
this.photoUrl,
this.discount,
this.price,
this.quantity,
this.sizes
});
String? name;
String? description;
String? sellerId;
String? published;
String? origin;
String? weight;
String? material;
List<String>? photoUrl=[];
int? discount;
List<String>? sizes=[];
List<String>? quantity=[];
List<String>? price=[];
factory ProductModel.fromRawJson(String str) => ProductModel.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ProductModel.fromJson(Map<String, dynamic> json) => ProductModel(
name: json["name"] == null ? null : json["name"],
description: json["description"] == null ? null : json["description"],
sellerId: json["sellerId"] == null ? null : json["sellerId"],
published: json["published"] == null ? null : json["published"],
origin: json["origin"] == null ? null : json["origin"],
weight: json["weight"] == null ? null : json["weight"],
material: json["material"] == null ? null : json["material"],
photoUrl: json["photoUrl"] == null ? null : List<String>.from(json["photoUrl"].map((x) => x)),
discount: json["discount"] == null ? null : json["discount"],
sizes: json["sizes"] == null ? null : List<String>.from(json["sizes"].map((x) => x)),
price: json["price"] == null ? null : List<String>.from(json["price"].map((x) => x)),
quantity: json["quantity"] == null ? null : List<String>.from(json["quantity"].map((x) => x)),
);
Map<String, dynamic> toJson() => {
"name": name == null ? null : name,
"description": description == null ? null : description,
"sellerId": sellerId == null ? null : sellerId,
"published": published == null ? null : published,
"origin": origin == null ? null : origin,
"weight": weight == null ? null : weight,
"material": material == null ? null : material,
"photoUrl": photoUrl == null ? null : List<String>.from(photoUrl!.map((x) => x)),
"discount": discount == null ? null : discount,
"sizes": sizes == null ? null : List<dynamic>.from(sizes!.map((x) => x)),
"price": price == null ? null : List<dynamic>.from(price!.map((x) => x)),
"quantity": quantity == null ? null : List<dynamic>.from(quantity!.map((x) => x)),
};
}
但我正在对空值使用空检查运算符。有人可以指出这里出了什么问题吗?谢谢
这是我的代码用法:
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.orange,
),
borderRadius: BorderRadius.circular(20)),
height: MediaQuery.of(context).size.height / 2.5,
width: MediaQuery.of(context).size.width - 100,
child: addProductCtrl.product.sizes!.length > 0
? Padding(
padding: const EdgeInsets.all(8.0),
child: GetBuilder<AddProductCtrl>(
id: editDetails,
builder: (_) {
return new ListView.builder(
scrollDirection: Axis.vertical,
itemCount: addProductCtrl.product.sizes!.length,
itemBuilder: (_, index) => Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
addProductCtrl.product.sizes![index],
style: TextStyle(
fontSize: 25)),
),
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
"Rs.${addProductCtrl.product.price![index]}",
style: TextStyle(
fontSize: 25)),
),
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
addProductCtrl.product.quantity![index],
style: TextStyle(
fontSize: 25)),
),
],
));
}),
)
: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Text("Add Details ",
style: TextStyle(fontSize: 25))),
),
),
),
错误图片
基于 JSON 示例,我已将您的 JSON 解析器重写为以下内容,它也是空安全的:
class ProductModel {
ProductModel({
required this.name,
required this.description,
required this.sellerId,
required this.published,
required this.origin,
required this.weight,
required this.material,
required this.photoUrl,
required this.discount,
required this.price,
required this.quantity,
required this.sizes,
});
String name;
String description;
String sellerId;
String published;
String origin;
String? weight;
String? material;
List<String> photoUrl;
int? discount;
List<String> sizes;
List<String> price;
List<String> quantity;
factory ProductModel.fromRawJson(String str) =>
ProductModel.fromJson(json.decode(str) as Map<String, dynamic>);
String toRawJson() => json.encode(toJson());
factory ProductModel.fromJson(Map<String, dynamic> json) => ProductModel(
name: json["name"] as String,
description: json["description"] as String,
sellerId: json["sellerId"] as String,
published: json["published"] as String,
origin: json["origin"] as String,
weight: json["weight"] as String?,
material: json["material"] as String?,
photoUrl: (json["photoUrl"] as List?)?.cast<String>().toList() ?? [],
discount: json["discount"] as int?,
sizes: (json["sizes"] as List?)?.cast<String>().toList() ?? [],
price: (json["price"] as List?)?.cast<String>().toList() ?? [],
quantity: (json["qty"] as List?)?.cast<String>().toList() ?? [],
);
Map<String, dynamic> toJson() => <String, dynamic>{
"name": name,
"description": description,
"sellerId": sellerId,
"published": published,
"origin": origin,
if (weight != null) "weight": weight,
if (material != null) "material": material,
if (photoUrl.isNotEmpty) "photoUrl": photoUrl,
if (discount != null) "discount": discount,
if (sizes.isNotEmpty) "sizes": sizes,
if (price.isNotEmpty) "price": price,
if (quantity.isNotEmpty) "qty": quantity,
};
}
const jsonInput = '''{
"name": "test",
"description": "",
"sellerId": "",
"published": "",
"origin": "",
"weight": "",
"material": "",
"photoUrl": [],
"discount": 10,
"size": [],
"price": [],
"qty": []
}
''';
void main() {
print(ProductModel.fromRawJson(jsonInput).toJson());
// {name: test, description: , sellerId: , published: , origin: , weight: , material: , discount: 10}
}
我不确定您希望 toJson
方法如何工作,但我添加了一些示例来说明如何进行输出,因此它不包含字段,例如空列表。
我想检查列表是否为空然后显示一些图像,如果不是我想显示列表的内容但是在检查列表是否为 empty.This 是我的时出现错误型号 class
import 'dart:convert';
class ProductModel {
ProductModel({
this.name,
this.description,
this.sellerId,
this.published,
this.origin,
this.weight,
this.material,
this.photoUrl,
this.discount,
this.price,
this.quantity,
this.sizes
});
String? name;
String? description;
String? sellerId;
String? published;
String? origin;
String? weight;
String? material;
List<String>? photoUrl=[];
int? discount;
List<String>? sizes=[];
List<String>? quantity=[];
List<String>? price=[];
factory ProductModel.fromRawJson(String str) => ProductModel.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ProductModel.fromJson(Map<String, dynamic> json) => ProductModel(
name: json["name"] == null ? null : json["name"],
description: json["description"] == null ? null : json["description"],
sellerId: json["sellerId"] == null ? null : json["sellerId"],
published: json["published"] == null ? null : json["published"],
origin: json["origin"] == null ? null : json["origin"],
weight: json["weight"] == null ? null : json["weight"],
material: json["material"] == null ? null : json["material"],
photoUrl: json["photoUrl"] == null ? null : List<String>.from(json["photoUrl"].map((x) => x)),
discount: json["discount"] == null ? null : json["discount"],
sizes: json["sizes"] == null ? null : List<String>.from(json["sizes"].map((x) => x)),
price: json["price"] == null ? null : List<String>.from(json["price"].map((x) => x)),
quantity: json["quantity"] == null ? null : List<String>.from(json["quantity"].map((x) => x)),
);
Map<String, dynamic> toJson() => {
"name": name == null ? null : name,
"description": description == null ? null : description,
"sellerId": sellerId == null ? null : sellerId,
"published": published == null ? null : published,
"origin": origin == null ? null : origin,
"weight": weight == null ? null : weight,
"material": material == null ? null : material,
"photoUrl": photoUrl == null ? null : List<String>.from(photoUrl!.map((x) => x)),
"discount": discount == null ? null : discount,
"sizes": sizes == null ? null : List<dynamic>.from(sizes!.map((x) => x)),
"price": price == null ? null : List<dynamic>.from(price!.map((x) => x)),
"quantity": quantity == null ? null : List<dynamic>.from(quantity!.map((x) => x)),
};
}
但我正在对空值使用空检查运算符。有人可以指出这里出了什么问题吗?谢谢
这是我的代码用法:
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.orange,
),
borderRadius: BorderRadius.circular(20)),
height: MediaQuery.of(context).size.height / 2.5,
width: MediaQuery.of(context).size.width - 100,
child: addProductCtrl.product.sizes!.length > 0
? Padding(
padding: const EdgeInsets.all(8.0),
child: GetBuilder<AddProductCtrl>(
id: editDetails,
builder: (_) {
return new ListView.builder(
scrollDirection: Axis.vertical,
itemCount: addProductCtrl.product.sizes!.length,
itemBuilder: (_, index) => Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
addProductCtrl.product.sizes![index],
style: TextStyle(
fontSize: 25)),
),
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
"Rs.${addProductCtrl.product.price![index]}",
style: TextStyle(
fontSize: 25)),
),
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
addProductCtrl.product.quantity![index],
style: TextStyle(
fontSize: 25)),
),
],
));
}),
)
: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Text("Add Details ",
style: TextStyle(fontSize: 25))),
),
),
),
错误图片
基于 JSON 示例,我已将您的 JSON 解析器重写为以下内容,它也是空安全的:
class ProductModel {
ProductModel({
required this.name,
required this.description,
required this.sellerId,
required this.published,
required this.origin,
required this.weight,
required this.material,
required this.photoUrl,
required this.discount,
required this.price,
required this.quantity,
required this.sizes,
});
String name;
String description;
String sellerId;
String published;
String origin;
String? weight;
String? material;
List<String> photoUrl;
int? discount;
List<String> sizes;
List<String> price;
List<String> quantity;
factory ProductModel.fromRawJson(String str) =>
ProductModel.fromJson(json.decode(str) as Map<String, dynamic>);
String toRawJson() => json.encode(toJson());
factory ProductModel.fromJson(Map<String, dynamic> json) => ProductModel(
name: json["name"] as String,
description: json["description"] as String,
sellerId: json["sellerId"] as String,
published: json["published"] as String,
origin: json["origin"] as String,
weight: json["weight"] as String?,
material: json["material"] as String?,
photoUrl: (json["photoUrl"] as List?)?.cast<String>().toList() ?? [],
discount: json["discount"] as int?,
sizes: (json["sizes"] as List?)?.cast<String>().toList() ?? [],
price: (json["price"] as List?)?.cast<String>().toList() ?? [],
quantity: (json["qty"] as List?)?.cast<String>().toList() ?? [],
);
Map<String, dynamic> toJson() => <String, dynamic>{
"name": name,
"description": description,
"sellerId": sellerId,
"published": published,
"origin": origin,
if (weight != null) "weight": weight,
if (material != null) "material": material,
if (photoUrl.isNotEmpty) "photoUrl": photoUrl,
if (discount != null) "discount": discount,
if (sizes.isNotEmpty) "sizes": sizes,
if (price.isNotEmpty) "price": price,
if (quantity.isNotEmpty) "qty": quantity,
};
}
const jsonInput = '''{
"name": "test",
"description": "",
"sellerId": "",
"published": "",
"origin": "",
"weight": "",
"material": "",
"photoUrl": [],
"discount": 10,
"size": [],
"price": [],
"qty": []
}
''';
void main() {
print(ProductModel.fromRawJson(jsonInput).toJson());
// {name: test, description: , sellerId: , published: , origin: , weight: , material: , discount: 10}
}
我不确定您希望 toJson
方法如何工作,但我添加了一些示例来说明如何进行输出,因此它不包含字段,例如空列表。