GETX:如何从 GetStorage.read 创建 RxList(错误:'List<String>' 不是类型转换中的 'RxList<String>?' 类型的子类型)

时间:2021-07-17 01:47:17

标签: flutter

我有一个这样的 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();
  }
}

1 个答案:

答案 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() 的调用,以便编译器知道您将使用的对象。