大佬教程收集整理的这篇文章主要介绍了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,请注明来意。