【发布时间】:2021-09-16 10:42:50
【问题描述】:
我是 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;
}
Categoroes.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(() {});
}
【问题讨论】:
-
您遇到的错误是什么?请在您的问题中添加确切的错误。
-
我已经添加了确切的错误
标签: flutter dart flutter-layout