【问题标题】:LateInitializationError: Field 'error' has not been initialized for a class modelLateInitializationError:尚未为类模型初始化字段“错误”
【发布时间】:2021-04-14 12:47:59
【问题描述】:

我正在编写我的第一个 Flutter 项目,但出现此错误

Warning: Operand of null-aware operation '?.' has type 'APIResponse<bool>' which excludes null.
 - 'APIResponse' is from 'package:notesapp/APIResponse/APIResponse.dart' ('lib/APIResponse/APIResponse.dart').
                 message = deleteResult?.errorMessage ?? 'An error occured';

这是模型类

class APIResponse <T> {
 late T data;
 late bool error;
 late String errorMessage;

 APIResponse({ data, error, errorMessage});

}

这就是我称这个模型的地方

noteListService.getSingleNote(widget.noteId).then((response) {
        setState(() {
          _isLoading = false;
        });
        if( response.error ){
          errorMessage = response.errorMessage ?? 'An error occured';
        }
        singleNoteModel = response.data;
        _titleController.text = singleNoteModel.noteTitle;
        _contentController.text = singleNoteModel.noteContent;
      });

它在这个特定的地方抛出错误 - errorMessage = response.errorMessage ?? 'An error occured';

【问题讨论】:

    标签: flutter if-statement


    【解决方案1】:

    顶部复制/粘贴的代码实际上不是错误,而是警告,不会停止您的应用程序的功能。

    这也不是您在问题底部或标题中提到的与response.errorMessage 相关的同一段代码。最上面的警告是关于deleteResult?.errorMessage。

    无论如何,当您的应用到达↓**This line**↓ 标记的行时,似乎还没有设置APIResponse 对象,它的error 布尔字段:

    noteListService.getSingleNote(widget.noteId).then((response) {
            setState(() {
              _isLoading = false;
            });
            // ↓**This line**↓ will throw if 'error' has not yet been set.
            if( response.error ){
              errorMessage = response.errorMessage ?? 'An error occured';
            }
            singleNoteModel = response.data;
            _titleController.text = singleNoteModel.noteTitle;
            _contentController.text = singleNoteModel.noteContent;
          });
    

    一种解决方法是不将error 布尔值定义为late,而只是将常规bool 定义为false。这会破坏你的应用程序的逻辑吗?我会假设应用程序一开始并没有处于错误状态,所以从逻辑上讲这应该没问题?

    我相信这将防止if ( response.error ) 在到达时投掷。

    class APIResponse <T> {
     late T data;
     bool error = false; // Give it a default value of false
     late String errorMessage;
    
     APIResponse({ data, error, errorMessage});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 2021-10-27
      • 2021-12-29
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多