程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Flutter 发布 HTTP 请求大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Flutter 发布 http 请求?

开发过程中遇到Flutter 发布 http 请求的问题如何解决?下面主要结合日常开发的经验,给出你关于Flutter 发布 http 请求的解决方法建议,希望对你解决Flutter 发布 http 请求有所启发或帮助;

我正在尝试发送一个发布请求,然后得到一些响应。这是网站:www.reqres.in 和用户数据 https://reqres.in/api/users。

当我按下按钮时,我看不到任何文字。将名称和作业发布到 API 并接收名称、ID、日期时间和作业。如果我不使用 Widget _showData 并在文本字段下方的构建中显示文本,那么我会看到数据,但出现 lateInitialization 错误,但我想使用 Widget _showData 显示它。

import 'package:Flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:http_req_advanced/usermodel.dart';

voID main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @overrIDe
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'http request 2',home: MyHomePage(),);
  }
}

class MyHomePage extends StatefulWidget {
  @overrIDe
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var users;
  Future<usermodel> createuser(String name,String job) async {
    final APIUrl = "https://reqres.in/API/users";
    final response =
        await http.post(Uri.parse(APIUrl),body: {"name": name,"job": job});

    if (response.statusCode == 201) {
      users = usermodelFromJson(response.body);
    } else
      throw Exception('Failed to load');
    return users;
  }

  late usermodel user;

  final nameController = TextEdiTingController();
  final jobController = TextEdiTingController();
  @overrIDe
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appbar: Appbar(
          title: Text('http request'),),body: Container(
          padding: EdgeInsets.all(16),child: column(
            mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
              TextFIEld(
                controller: nameController,TextFIEld(
                controller: jobController,//Text(
                 // "The user ${user.namE} ${user.ID} is created at ${user.createdAt} with job${user.job}"),Elevatedbutton(
                onpressed: () async {
                  final String name = nameController.text;
                  final String job = jobController.text;

                  final usermodel userr = await createuser(name,job);

                  setState(() {
                    user = userr;
                     _showData(user.name,user.job,user.ID,user.createdAt);
                  });
                },child: Text('Make a request'),],);
  }

  Widget _showData(String name,String job,String ID,datetiR_589_11845@e createdat) {
    return Container(
      alignment: Alignment.bottomcatenter,child: SizedBox(
        height: 32,child:
            Text('The user $name [$ID] is created at $createdat with job $job'),);
  }
}

解决方法

而不是使用后期初始化:

late UserModel user;

使用:

UserModel? user;

您使用 late 时,您是在声明一个稍后将被初始化的非空变量,在这种情况下,您不需要使用 late,因为 user 可以为空。

,
    import 'package:flutter/material.dart';
    import 'package:http/http.dart' as http;
    import 'package:http_req_advanced/usermodel.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'http request 2',home: MyHomePage(),);
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      var users;
      Future<UserModel> createUser(String name,String job) async {
        final apiUrl = "https://reqres.in/api/users";
        final response =
            await http.post(Uri.parse(apiUrl),body: {"name": name,"job": job});
    
        if (response.statusCode == 201) {
          users = userModelFromJson(response.body);
        } else
          throw Exception('Failed to load');
        return users;
      }
    
      late UserModel user;
    
      final nameController = TextEdiTingController();
      final jobController = TextEdiTingController();
      @override
      Widget build(BuildContext context) {
        return SafeArea(
          child: Scaffold(
            appBar: AppBar(
              title: Text('http request'),),body: Container(
              padding: EdgeInsets.all(16),child: column(
                mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
                  TextField(
                    controller: nameController,TextField(
                    controller: jobController,user != null
                      ? _showData(user.name,user.job,user.id,user.createdAt)
                      : Container(),//Text(
                      // "The user ${user.namE} ${user.iD} is created at ${user.createdAt} with job${user.job}"),ElevatedButton(
                          onPressed: () async {
                            final String name = nameController.text;
                            final String job = jobController.text;
    
                            final UserModel userr = await createUser(name,job);
    
                            setState(() {
                              user = userr;
                            });
                          },child: Text('Make a request'),],);
      }
    
      Widget _showData(String name,String job,String id,datetiR_589_11845@e createdat) {
        return Container(
          alignment: Alignment.bottomcatenter,child: SizedBox(
            height: 32,child:
                Text('The user $name [$id] is created at $createdat with job $job'),);
      }
    }

大佬总结

以上是大佬教程为你收集整理的Flutter 发布 HTTP 请求全部内容,希望文章能够帮你解决Flutter 发布 HTTP 请求所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。