【问题标题】:How to fix 'Unhandled Exception: Null check operator used on a null value' in flutter post method如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”
【发布时间】:2021-11-21 12:10:40
【问题描述】:

我是新来的颤振。我正在尝试了解flutter rest api。 当我尝试使用 fullter api(使用 http dart 包)发布数据时,它显示了这个错误。

我试图通过对我的代码进行一些更改来修复它,但我仍然无法修复它。这是我尝试执行的代码。

  1. 型号

     import 'dart:convert';
    
    DataModel dataModelFromJSON(String str) => DataModel.fromJson(jsonDecode(str));
    String dataModelToJson(DataModel data) => json.encode(data.toJson());
    
    class DataModel {
     DataModel(
       {required this.name,
       required this.job,
       required this.id,
       required this.createdAt});
    
       String name;
       String job;
       String id;
       String createdAt;
    
    factory DataModel.fromJson(Map<String, dynamic> json) => DataModel(
       name: json['name'],
       job: json['job'],
       id: json['id'],
       createdAt: json['createdAt']);
    
      Map<String, dynamic> toJson() =>
         {"name": name, "job": job, "id": id, "createdAt": createdAt};
    }
    
  2. main.dart

     import 'package:flutter/material.dart';
     import 'package:http/http.dart' as http;
    
     import 'DataModel.dart';
    
      void main() {
       runApp(
       MaterialApp(
       home: MyHomePage(),
     ),
     );
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    Future<DataModel?> submitData(String name, String job) async {
       var response = await http.post(
       Uri.https('reqres.in', 'api/users'),
       body: {"name": name, "job": job},
       );
       var data = response.body;
       print(data);
    
       if (response.statusCode == 201) {
        String responseString = response.body;
        dataModelFromJSON(responseString);
       } else
        return null;
       }
    
       class _MyHomePageState extends State<MyHomePage> {
          late DataModel _dataModel;
          TextEditingController nameController = TextEditingController();
          TextEditingController jobController = TextEditingController();
    
       @override
       Widget build(BuildContext context) {
         return Scaffold(
          appBar: AppBar(
          title: Center(
           child: Text('HTTP Post'),
           ),
         ),
         body: Container(
           padding: EdgeInsets.all(20.0),
           child: Column(
             children: [
               TextField(
                 decoration: InputDecoration(
                     border: OutlineInputBorder(), hintText: 'Name'),
                 controller: nameController,
               ),
               SizedBox(height: 20.0),
               TextField(
                 decoration: InputDecoration(
                     border: OutlineInputBorder(), hintText: 'Job'),
                 controller: jobController,
               ),
               ElevatedButton(
                 onPressed: () async {
                   String name = nameController.text;
                   String job = jobController.text;
                   DataModel? data = await submitData(name, job);
                   setState(() {
                     _dataModel = data!;
                   });
                 },
                 child: Text("Submit"),
               )
             ],
           ),
         ),
       );
     }
    }
    

如果有人可以帮助我解决此问题,我将不胜感激。

【问题讨论】:

    标签: flutter rest mobile flutter-dependencies


    【解决方案1】:

    您没有在函数中返回数据 在此处添加返回

     return dataModelFromJSON(responseString);
    

    现在你的函数会是这样的

      Future<DataModel?> submitData(String name, String job) async {
           var response = await http.post(
           Uri.https('reqres.in', 'api/users'),
           body: {"name": name, "job": job},
           );
           var data = response.body;
           print(data);
        
           if (response.statusCode == 201) {
            String responseString = response.body;
           return dataModelFromJSON(responseString);
           } else
            return null;
           }
    

    【讨论】:

    • 谢谢@Musab。这是错误。我将此标记为已解决。 :)
    • 欢迎并感谢您将其标记为已解决
    【解决方案2】:

    删除!从这条线_dataModel = data!; 在您的数据模型中,您有这个

        String responseString = response.body;
        dataModelFromJSON(responseString);
       } else
        return null;
       }
    

    如果请求的状态码不是 201,它将返回 null,它正在使用 !做空检查是导致错误的原因。

    【讨论】:

    • 嗨@Aikins,感谢您的回复。我照你说的做了。但“数据”下划线为红色。
    • 我可以打一针吗?
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2021-08-12
    • 2022-01-19
    • 2021-08-19
    • 1970-01-01
    • 2021-07-22
    • 2021-07-08
    相关资源
    最近更新 更多