Flutter GetX 和 Get Storage 错误类型:'List<dynamic>' 不是匿名关闭后类型 'Map<String, dynamic> 的子类型

问题描述

我遇到了一个错误,在谷歌搜索之后很常见,但我没有找到与我类似的代码,因为我使用的是 GetX 和 Get Storage。 所以,我正在构建一个简单的(不适合我,因为我是 Flutter 的新手)购物清单应用程序(基本上是一个待办事项应用程序),当我向列表中添加一个项目时,它会完美地添加到内存中,但是如果我回到堆栈中使用 Get.back() 然后我再次打开 ShoppingScreen 我再次遇到错误

这是控制台消息:

以下 _TypeError 在构建 Builder(dirty) 时被抛出: 'ShoppingList' 类型不是类型 'Map'

的子类型

相关的导致错误的小部件是 获取材料应用程序 lib\main.dart:21 抛出异常时,这是堆栈

#0 ShoppingListController.onInit.

package:one_place_all_notes/controllers/shopping_list_controller.dart:19

#1 MappedListIterable.elementAt (dart:_internal/iterable.dart:411:31)

#2 ListIterator.moveNext (dart:_internal/iterable.dart:340:26)

#3 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:188:27)

#4 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)

这是课程:

class ShoppingList {
String text;
bool done;

ShoppingList({this.text,this.done = false});

factory ShoppingList.fromjson(Map<String,dynamic> json) => ShoppingList(
text: json['text'],done: json['done'],);

Map<String,dynamic> toJson() {
final Map<String,dynamic> data = Map<String,dynamic>();
data['text'] = this.text;
return data;
}
}

这是发生错误的控制器:

class ShoppingListController extends GetxController {
var shoppings = <ShoppingList>[].obs;

@override
void onInit() {
List storedShoppings = GetStorage().read<List>('shoppings');

if (storedShoppings != null) {
shoppings = storedShoppings
.map((e) => ShoppingList.fromjson(e))
.toList().obs;
}

解决方法

经过几个小时的挣扎,我解决了这个问题。我不知道这是否是正确的方法,但它奏效了。

在使用 Get.back() 弹出屏幕的 onPressed 函数中;我还添加了另一个 GetX 方法,Get.appUpdate();

因为我注意到在热重载后我没有问题,迫使应用程序更新 为我解决了这个问题。但如果有更好的解决方案,我很高兴听到它们。