【问题标题】:The default 'List' constructor isn't available when null safety is enabled. - Flutter [duplicate]启用空安全性时,默认的“列表”构造函数不可用。 -颤振[重复]
【发布时间】:2021-06-04 12:28:32
【问题描述】:

我只是在初始化列表,一切都很好,直到我升级了颤振,因为现在我收到一个错误,声明为 The default 'List' constructor isn't available when null safety is enabled. 。我正在使用 getget_storage 依赖项。

这是我遇到错误的控制器类

class TodoController extends GetxController {
  var todos = List<Todo>().obs;

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

    if (!storedTodos.isNull) {
      todos = storedTodos.map((e) => Todo.fromJson(e)).toList().obs;
    }
    ever(todos, (_) {
      GetStorage().write('todos', todos.toList());
    });
    super.onInit();
  }
}

这是我正在使用的模型类

class Todo {
  String text;
  bool done;

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

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

  Map<String, dynamic> toJson() => {'text': text, 'done': done};
}```

While initializing the constructor I did get an error stating as ```The parameter 'text' can't have a value of 'null' because of its type, but the implicit default value is 'null'.```

Can i get to know a bit more about this?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我认为你可以去掉构造函数括号并像这样重新排列:

    List&lt;Todo&gt; todos = [].obs;

    get docs 中也有一个列表示例。

    【讨论】:

    • 现在无效。
    【解决方案2】:

    该用法已被弃用,请参阅docs

    您应该改用 var todos = &lt;Todo&gt;[].obs;,并且仍然保留类型信息

    【讨论】:

    • 这应该是被接受的答案。
    猜你喜欢
    • 2021-09-21
    • 2021-11-27
    • 2020-12-06
    • 2021-06-30
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多