我在Flutter中使用了HydradBloc。为了使用HydradBloc,我需要转换我的自定义列表(从JSON字符串解析)
List<List<Category>>
到
地图<字符串,动态>
。这是我用来解析json字符串的模型
import 'dart:convert';
List<List<Category>> rpTrendingCategoriesFromJson(String str) => List<List<Category>>.from(json.decode(str).map((x) => List<Category>.from(x.map((x) => Category.fromJson(x)))));
String rpTrendingCategoriesToJson(List<List<Category>> data) => json.encode(List<dynamic>.from(data.map((x) => List<dynamic>.from(x.map((x) => x.toJson())))));
class Category {
Category({
this.title,
this.imageLink,
});
String title;
String imageLink;
factory Category.fromJson(Map<String, dynamic> json) => Category(
title: json["title"] == null ? null : json["title"],
imageLink: json["imageLink"] == null ? null : json["imageLink"],
);
Map<String, dynamic> toJson() => {
"title": title == null ? null : title,
"imageLink": imageLink == null ? null : imageLink,
};
}
在这里,我需要转换它
列表<列表<类别>>
到
Map<String, dynamic>
class TrendingCategoriesCubit extends Cubit<TrendingCategoriesState>
with HydratedMixin {
Repository repository;
TrendingCategoriesCubit({@required this.repository})
: super(TrendingCategoriesLoading());
Future<void> fetchTrendingCategories() async {
emit(TrendingCategoriesLoading());
List<List<Category>> categories =
await repository.fetchTrendingCategories();
if (categories.isEmpty) {
emit(TrendingCategoriesFetchedEmpty());
} else if (categories.isNotEmpty) {
emit(TrendingCategoriesFetched(categories: categories));
}
}
@override
TrendingCategoriesState fromJson(Map<String, dynamic> json) {
try {
final categories = rpTrendingCategoriesFromJson(json.toString());
return TrendingCategoriesFetched(categories: categories);
} catch (_) {
return null;
}
}
@override
Map<String, dynamic> toJson(TrendingCategoriesState state) {
if (state is TrendingCategoriesFetched) {
return state.categories.toJson(); //coudn't do it
} else {
return null;
}
}
}
如果你看看
toJson()
上面的方法,我需要返回
List<List<Categor>>
到
Map<String,dynamic
我该怎么做?