我有一个这样的 2 列表:
var listStringRaw = ['a', 'b', 'c'];
var listIntRaw = [1, 2, 3];
然后将它们写入 GetStorage:
await GetStorage().write('listString', listStringRaw);
await GetStorage().write('listInt', listIntRaw);
那么如何将它们分配给 GetxController 中的 RxList?
RxList<String> get listString => GetStorage().read('listString') ?? [];
RxList<int> get listInt => GetStorage().read('listInt') ?? [];
当我尝试时出现错误:
Unhandled Exception: type 'List<String>' is not a subtype of type 'RxList<String>?' in type cast
请帮帮我,这是完整的代码:
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
void main() async {
await GetStorage.init();
var listStringRaw = ['a', 'b', 'c'];
var listIntRaw = [1, 2, 3];
await GetStorage().write('listString', listStringRaw);
await GetStorage().write('listInt', listIntRaw);
Get.put(Controller());
}
class Controller extends GetxController {
RxList<String> get listString => GetStorage().read('listString') ?? [];
RxList<int> get listInt => GetStorage().read('listInt') ?? [];
@override
void onInit() {
print(listString);
print(listInt);
super.onInit();
}
}
答案 0 :(得分:1)
如果您阅读了 get package 的文档,它会说您需要使用 .obs 方法将任何内容转换为 Rx 对象。
RxList<String> get listString => (GetStorage().read<List<String>?>('listString') ?? []).obs;
RxList<int> get listInt => (GetStorage().read<List<int>?>('listInt') ?? []).obs;
此外,必须使用返回类型声明对 GetStorage() 的 read() 的调用,以便编译器知道您将使用的对象。