大佬教程收集整理的这篇文章主要介绍了Flutter学习之旅(五)----网络请求获取数据、解析数据和显示等待动画,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
http: '>=0.11.3+12'
@H_675_5@将main.dart里面的代码全部删除,然后重新写我们的代码,先导包:
import 'package:Flutter/material.dart';//导入系统基础包
import 'package:Flutter/services.dart';//导入网络请求相关的包
@H_675_5@然后获取http对象
var httpclient=createhttpClient();//获取http对象
@H_675_5@用async…await..发送网络请求并读取结果:
_postData() async{
response=await httpclient.read(url);//发送网络请求,read()表示读取返回的结果,get()表示不读取返回的结果
print('Response=$response');
}
@H_675_5@上面就是一次完整的网络请求的核心代码,好像并不复杂吧?完整的代码如下,直接复制到main.dart,替换掉原来的代码即可运行:
import 'package:Flutter/material.dart';//导入系统基础包
import 'package:Flutter/services.dart';//导入网络请求相关的包
void main(){
runApp(new MaterialApp(home: new ClickEvent(),));
}
class ClickEvent extends StatefulWidget{
@override
_ClickEventState createState() {
return new _ClickEventState();
}
}
class _ClickEventState extends State<ClickEvent>{
var httpclient=createhttpClient();//获取http对象
var url='https://api.github.com/';
var response;
_postData() async{
response=await httpclient.read(url);//发送网络请求,read()表示读取返回的结果,get()表示不读取返回的结果
print('Response=$response');
}
@override
Widget build(BuildContext context) {
return new Scaffold(appBar: new AppBar(title: new Text('网络请求'),),floaTingActionButton: new FloaTingActionButton(child: new Text('获取数据'),onPressed: _postData),);//点击后调用网络请求方法
}
}
@H_675_5@运行结果为:
@H_675_5@
@H_675_5@上面就是https://api.github.com/这个接口返回的json串,至此我们已经能够从服务器获取网络数据了,怎么样,比想象中简单吧。
@H_675_5@二、解析服务器返回的json数据
@H_675_5@先导入json相关的包
import 'dart:convert';
@H_675_5@如果返回的数据结果类似于:
['foo',{ 'bar': 499 }]
@H_675_5@可以这样解析
@H_613_16@map data= JSON.decode(responsE);
data[1]['bar'];
@H_675_5@如果返回的数据结构类似于:
{"current_user_url":"https://api.github.com/user"}
@H_675_5@可以这样解析:
@H_195_194@map data= JSON.decode(response);
var url1= data['current_user_url'];
@H_675_5@解析结果为:
current_user_url:https://api.github.com/user
@H_675_5@三、等待动画的显示与关闭
@H_675_5@先新建一个对话框(圆圈)控件,用来显示,核心代码是
new CircularProgressInDicator()//这是圆圈对话框,还有条形对话框的。
@H_675_5@然后用定时器不断去回调结果,代码如下:
class ShowProgress extends StatefulWidget {
ShowProgress(this.requestCallBACk);
final Future<Null> requestCallBACk;//这里Null表示回调的时候不指定类型
@override
_ShowProgressState createState() => new _ShowProgressState();
}
class _ShowProgressState extends State<ShowProgress> {
@override
initState() {
super.initState();
new Timer(new Duration(milliseconds: 10),() {//每隔10ms回调一次
widget.requestCallBACk.then((Null) {//这里Null表示回调的时候不指定类型
Navigator.of(context).pop();//所以pop()里面不需要传参,这里关闭对话框并获取回调的值
});
});
}
@override
Widget build(BuildContext context) {
return new Center(
child: new CircularProgressInDicator(),//获取控件实例
);
}
}
@H_675_5@点击“获取数据”按钮,将网络请求的方法_postData作为参数传递给ShowProgress显示对话框,下面代码功能主要是展示对话框,核心代码如下:
Future<Null> _myClick() {
return showDialog<Null>(
context: context,barrierDismissible: true,// false表示必须点击按钮才能关闭
child:new ShowProgress(_postData())//将网络请求的方法_postData作为参数传递给ShowProgress显示对话框
);
@H_675_5@完整代码如下,直接复制到main.dart即可运行:
import 'dart:async';
import 'package:Flutter/material.dart';//导入系统基础包
import 'package:Flutter/services.dart';//导入网络请求相关的包
import 'dart:convert';
void main(){
runApp(new MaterialApp(home: new ClickEvent(),));
}
class ShowProgress extends StatefulWidget {
ShowProgress(this.requestCallBACk);
final Future<Null> requestCallBACk;//这里Null表示回调的时候不指定类型
@override
_ShowProgressState createState() => new _ShowProgressState();
}
class _ShowProgressState extends State<ShowProgress> {
@override
initState() {
super.initState();
new Timer(new Duration(milliseconds: 10),这里关闭对话框并获取回调的值
});
});
}
@override
Widget build(BuildContext context) {
return new Center(
child: new CircularProgressInDicator(),);
}
}
////////////上面是对话框控件,下面是按钮控件/////////////////
class ClickEvent extends StatefulWidget{
@override
_ClickEventState createState() {
return new _ClickEventState();
}
}
class _ClickEventState extends State<ClickEvent>{
Future<Null> _myClick() {
return showDialog<Null>(
context: context,// false表示必须点击按钮才能关闭
child:new ShowProgress(_postData())//将网络请求的方法_postData作为参数传递给ShowProgress显示对话框
);
}
var httpclient=createhttpClient();//获取http对象
var url='https://api.github.com/';
var response;
//核心的网络请求方法
_postData() async{
response=await httpclient.read(url);//发送网络请求,read()表示读取返回的结果,get()表示不读取返回的结果
print('Response=$response');
Map data= JSON.decode(responsE);
var url1= data['current_user_url'];
print('current_user_url:$url1');
}
@override
Widget build(BuildContext context) {
return new Scaffold(appBar: new AppBar(title: new Text('网络请求'),onPressed: _myClick),);
}
}
@H_675_5@运行结果为:
@H_675_5@
@H_675_5@从图中可以看到,收到服务器响应后就关闭了对话框,达到了我们的目的。 以上是大佬教程为你收集整理的Flutter学习之旅(五)----网络请求获取数据、解析数据和显示等待动画全部内容,希望文章能够帮你解决Flutter学习之旅(五)----网络请求获取数据、解析数据和显示等待动画所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。