flutter - 如何解决 Flutter 中不可为空的错误?
问题描述
我是 Flutter 开发的新手,我正在尝试实现一个类别页面,数据将从 json 文件加载。但我收到空安全错误“必须初始化不可为空的变量‘类别’。尝试添加初始化表达式。 ”在创建类时。请找到以下代码供您参考并帮助解决。
有两个 dart 文件,一个是 category_models.dart,另一个是 homecategories.dart
提前致谢。
Category_model.dart
import 'dart:convert';
class CategoryModel {
static List<Category> categories;
}
class Category {
final int id;
final String name;
final String image;
Category({
required this.id,
required this.name,
required this.image,
});
Category copyWith({
int? id,
String? name,
String? image,
}) {
return Category(
id: id ?? this.id,
name: name ?? this.name,
image: image ?? this.image,
);
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'image': image,
};
}
factory Category.fromMap(Map<String, dynamic> map) {
return Category(
id: map['id'],
name: map['name'],
image: map['image'],
);
}
String toJson() => json.encode(toMap());
factory Category.fromJson(String source) =>
Category.fromMap(json.decode(source));
@override
String toString() => 'Category(id: $id, name: $name, image: $image)';
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is Category &&
other.id == id &&
other.name == name &&
other.image == image;
}
@override
int get hashCode => id.hashCode ^ name.hashCode ^ image.hashCode;
}
分类.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:convert';
import 'package:citimart/models/category_model.dart';
class HomeCategories extends StatefulWidget {
@override
_HomeCategoriesState createState() => _HomeCategoriesState();
}
class _HomeCategoriesState extends State<HomeCategories> {
void initState() {
super.initState();
loadData();
}
loadData() async {
await Future.delayed(Duration(seconds: 2));
final categoryJson =
await rootBundle.loadString("assets/files/categories.json");
final decodedData = jsonDecode(categoryJson);
var categoriesData = decodedData["categories"];
CategoryModel.categories = List.from(categoriesData)
.map<Category>((category) => Category.fromMap(category))
.toList();
setState(() {});
}
解决方案
您必须初始化CategoryModel.categories
变量,因为此变量已被定义为 anon-nullable
它不能像 this 那样保持未初始化状态null
。
您应该更新模型类并为类别设置初始值,例如
class CategoryModel {
static List<Category> categories = List.empty();
}
推荐阅读
- java - 使用单个流数据实现多种功能的 Java 函数式编程
- javascript - 如果第一个方法在 Javascript 中返回 false,则不要调用第二个方法
- mongodb - 为什么 $lookup 中的“as”正在替换整个集合?
- javascript - 我的函数调用不返回值
- c# - 我可以在unity2d中使用c#只使用一个键吗?
- python - 如何将变量从一个 python 脚本传递到另一个?
- android - 如何在 MotionLayout 中运行特定的过渡?
- plugins - RHEL8 (CentOS8):使用 perl 编译 nagios-plugins 错误
- html - 有没有办法将“测试结果分析器”或“测试结果”Jenkins 插件报告转换为漂亮的 HTML
- apache - 通过 apache config 重定向到不同的网站