我们是否应该对模型使用 "late" 来修复安全无效错误

Should we use "late" for Model to fix safety-null error

class ItemModel {

late int _page;
  late int _total_results;
  late int _total_pages;
  late List<_Result> _results = [];

  ItemModel.fromJson(Map<String, dynamic> parsedJson) {
    // debugPrint(parsedJson['results'].length);
    _page = parsedJson['page'];
    _total_results = parsedJson['total_results'];
    _total_pages = parsedJson['total_pages'];
    List<_Result> temp = [];
    for (int i = 0; i < parsedJson['results'].length; i++) {
      _Result result = _Result(parsedJson['results'][i]);
      temp.add(result);
    }
    _results = temp;
  }

  List<_Result> get results => _results;

  int get total_pages => _total_pages;

  int get total_results => _total_results;

  int get page => _page;
}

我可以使用 late 来修复 不可为 null 的实例字段 '_page' 必须初始化。 尝试添加初始化表达式,或在此构造函数中添加字段初始化器,或将其标记为“延迟”? 错误。

或者我可以使用 ?

int? _page;

为了? : 我得到这个错误 A value of type 'int?' can't be returned from the function 'page' because it has a return 类型 'int'

哪个更好?

感谢您的回复!

我个人会为您的对象创建一个构造函数,并让您的 JSON 解析一个返回 class 实例的工厂构造函数。通过这样做,我们可以跳过 late 变量的使用:

class ItemModel {
  final int page;
  final int total_results;
  final int total_pages;
  final List<_Result> results;

  const ItemModel({
    required this.page,
    required this.total_results,
    required this.total_pages,
    required this.results,
  });

  factory ItemModel.fromJson(Map<String, dynamic> parsedJson) => ItemModel(
        page: parsedJson['page'] as int,
        total_results: parsedJson['total_results'] as int,
        total_pages: parsedJson['total_pages'] as int,
        results: [
          for (var i = 0; i < parsedJson['results'].length; i++)
            _Result(parsedJson['results'][i])
        ],
      );
}

如果你还想要吸气剂:

class ItemModel {
  final int _page;
  final int _total_results;
  final int _total_pages;
  final List<_Result> _results;

  const ItemModel({
    required int page,
    required int total_results,
    required int total_pages,
    required List<_Result> results,
  })  : _page = page,
        _total_results = total_results,
        _total_pages = total_pages,
        _results = results;

  factory ItemModel.fromJson(Map<String, dynamic> parsedJson) => ItemModel(
        page: parsedJson['page'] as int,
        total_results: parsedJson['total_results'] as int,
        total_pages: parsedJson['total_pages'] as int,
        results: [
          for (var i = 0; i < parsedJson['results'].length; i++)
            _Result(parsedJson['results'][i])
        ],
      );

  List<_Result> get results => _results;
  int get total_pages => _total_pages;
  int get total_results => _total_results;
  int get page => _page;
}