如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?

Posted

技术标签:

【中文标题】如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?【英文标题】:How to fix "Unhandled Exception: Null check operator used on a null value" error in flutter? 【发布时间】:2021-11-21 15:16:44 【问题描述】:

我是 Flutter 新手。

我想通过 REST API(使用 post 方法)将数据从前端传递到 node.js 后端。但是在执行应用程序时会显示以下错误。

这是我目前写的代码。我试图找出错误是什么,但不幸的是我找不到它。有人可以帮我解决这个问题吗?

    模型文件

    DataModel dataModelFromJSON(String str) => DataModel.fromJson(jsonDecode(str));
    String dataModelToJson(DataModel data) => json.encode(data.toJson());
    
    class DataModel 
       DataModel(required this.title, required this.id);
    
       String title;
       String id;
    
       factory DataModel.fromJson(Map<String, dynamic> json) =>
           DataModel(title: json['title'], id: json['id']);
    
       Map<String, dynamic> toJson() => "name": title, "id": id;
     
    

    页面出现错误

    class PurchaseOrder extends StatefulWidget 
      @override
      _PurchaseOrderState createState() => _PurchaseOrderState();
    
    
    Future<DataModel?> submitData(String title) async 
      var response = await http.post(
        Uri.http('176.12.10.0:8020', 'order/create'),
        body: "title": title,
      );
      print(title);
      var data = response.body;
      print(data);
    
      if (response.statusCode == 201) 
        String responseString = response.body;
        return dataModelFromJSON(responseString);
       else
        return null;
    
    
    class _PurchaseOrderState extends State<PurchaseOrder> 
      String today = DateFormat('yMd').format(DateTime.now());
      late DataModel _dataModel;
      TextEditingController titleController = TextEditingController();
    
      @override
      Widget build(BuildContext context) 
        final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
        return Container(
          child: Column(
            children: [
              TextFormField(
                decoration: const InputDecoration(
                  hintText: 'Enter your email',
                ),
                controller: titleController,
              ),
               Expanded(
                 child: Padding(
                   padding: const EdgeInsets.all(8.0),
                   child: OutlinedButton(
                     onPressed: () async 
                       String title = titleController.text;
                       DataModel? data = await submitData(title);
                       setState(() 
                         _dataModel = data!;
                       );
                     ,
                     child: Text("Submit"),
                   ),
                 ),
               ),
           ],
         ),
       );
     
    
    

希望您能帮助解决此问题。 谢谢

已编辑: 我对代码进行了以下更改。错误消失了。但是数据还没有传递到后端。我该怎么办。

我变了,

_dataModel = data!;

if (data != null) 
   _dataModel = data;

【问题讨论】:

请避免将代码作为图片上传。 meta.***.com/questions/285551/… 。祝你好运??? @novonimo 感谢您提供的信息。 ???? 【参考方案1】:

我也可以解决“数据不通过问题”。

我做了什么?

我更改了发布请求,

var response = await http.post(
Uri.http('176.12.10.0:8020', 'order/create'),
body: "title": title,
);

var response = await http.post(
Uri.parse('http://176.12.10.0:8020/order/create'),
    headers: 'Content-Type': 'application/json',
    body: jsonEncode("title": title),
);

【讨论】:

【参考方案2】:

该错误意味着您在代码中的某处使用不可为空的类型执行操作,但该值实际上为空。 例如,当您使用data! 时,您是在告诉编译器data 不会为空,但实际上是。

您可以使用data ?? someValue 进行回退,以防data 为空。

【讨论】:

感谢@alexn62 的帮助。我更改了代码并用我最近所做的更新了问题。错误消失了,但数据没有传递到后端。我该如何解决这个问题?【参考方案3】:

您的代码中唯一的空检查运算符是_dataModel = data!; 这意味着您的 submitData 方法返回了一个传递给数据的空值。或者当您放置一个空检查运算符时,您必须确保变量不为空。

为避免此错误,您可以检查数据是否为空,如果为真,则传递另一个值:

_dataModel = data ?? otherValue

【讨论】:

感谢@Tanguy 的帮助。我更改了代码并用我最近所做的更新了问题。错误消失了,但数据没有传递到后端。我该如何解决这个问题? @New Guy 你的意思是你的 submitData 方法没有按预期工作。这是另一个问题。你应该用这个函数的代码问另一个问题。 好的@Tanguy,我会将此标记为已解决,并使用代码提出另一个问题。

以上是关于如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复颤振中的“终止原因:命名空间代码设计,代码 0x2”错误?

如何修复颤振中的“SocketException:os错误:连接超时错误号110,地址= 000.000.0.00,端口= 44935”

如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?

如何修复颤振中的“SocketException:OS错误:连接超时,errno = 110,地址= 192.168.5.10,端口= 49590”错误

尝试归档没有剩余磁盘空间的颤振项目,无法修复错误

如何修复颤振医生不识别安卓手机