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

Posted

技术标签:

【中文标题】Flutter GetX 和获取存储错误类型:\'List<dynamic>\' 不是匿名关闭后类型\'Map<String, dynamic> 的子类型【英文标题】:Flutter GetX and Get Storage Error type: 'List<dynamic>' is not a subtype of type 'Map<String, dynamic> after anonymous closureFlutter GetX 和获取存储错误类型:'List<dynamic>' 不是匿名关闭后类型'Map<String, dynamic> 的子类型 【发布时间】:2021-07-06 04:01:41 【问题描述】:

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

这是控制台消息:

在构建 Builder(dirty) 时引发了以下 _TypeError: 'ShoppingList' 类型不是 'Map' 类型的子类型

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

#0 ShoppingListController.onInit.

包装: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 新的 _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;

【问题讨论】:

可能有助于显示您存储它的方式以及发生错误时返回的页面。当您重新启动时,onInit 中的所有内容都可以正常运行吗? 感谢您的评论,但最后我自己解决了问题,请参阅下面的答案.. 【参考方案1】:

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

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

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

【讨论】:

以上是关于Flutter GetX 和获取存储错误类型:'List<dynamic>' 不是匿名关闭后类型'Map<String, dynamic> 的子类型的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中,我如何使用 API 和 GetX 在 JSON 中获取数据

使用 Getx 小部件-Flutter 运行时显示错误

无法在 Getx Flutter 中获取布尔值

我在 Getx Flutter 中的 null 值错误中使用了 Null 检查运算符

Flutter状态管理终极方案GetX第二篇——状态管理

Flutter -- GetX准备篇