本文共 5385 字,大约阅读时间需要 17 分钟。
先在pubspec.yaml中引入Dio包如图所示
pubspec.yaml
的结构和编写注意事项。Get请求和POST请求都是在工作中最重要的两种请求。一般GET请求用于获取数据,POST请求用于提交数据。
在dart文件中写入代码:
import 'package:flutter/material.dart';import 'package:dio/dio.dart';class TabsPage extends StatelessWidget { @override Widget build(BuildContext context) { getHttp(); return Scaffold( body: Center( child: Text('首页'), ), ); } void getHttp() async { try{ Response response = await Dio().get( 'https://jsonplaceholder.typicode.com/photos' ); return print(response); }catch(e){ return print(e); } }}
运行后输出结果如图所示
示例的具体业务逻辑是这样的:
可以使用stful
的快捷方式,在VSCode
里快速生成StatefulWidget
的基本结构,我们只需要改一下类的名字就可以了,就会得到如下代码
class HomePage extends StatefulWidget { _HomePageState createState() => _HomePageState();}class _HomePageState extends State{ @override Widget build(BuildContext context) { return Container( child: child, ); }}
有了动态组件,咱们先把界面布局作一下。
@overrideWidget build(BuildContext context) { return Container( child: Scaffold( appBar: AppBar(title: Text('美好人间'),), body:Container( child: Column( children:[ TextField( //文本框 controller:typeController, decoration:InputDecoration ( contentPadding: EdgeInsets.all(10.0), labelText: '美女类型', helperText: '请输入你喜欢的类型' ), autofocus: false, //自动对焦关闭 ), RaisedButton( onPressed:_choiceAction, child: Text('选择完毕'), ), Text( showText, overflow:TextOverflow.ellipsis, maxLines: 1, ), ], ), ) ), );}
布局完成后,可以先编写一下远程接口的调用方法,跟上面的内容类似,不过这里返回值为一个Future
,这个对象支持一个等待回掉方法then
。具体代码如下:
Future getHttp(String TypeText)async{ try{ Response response; var data={'name':TypeText}; response = await Dio().get( "https://www.easy-mock.com/mock/5c60131a4bed3a6342711498/baixing/dabaojian", queryParameters:data ); return response.data; }catch(e){ return print(e); }}
当我们写完内容后,要点击按钮,按钮会调用方法,并进行一定的判断。比如判断文本框是不是为空。然后当后端返回数据时,我们用setState方法更新了数据。具体代码如下:
void _choiceAction(){ print('开始选择你喜欢的类型:'); if(typeController.text.toString()==''){ showDialog( context: context, builder: (context) => AlertDialog(title:Text('美女类型不能为空')) ); }else{ getHttp(typeController.text.toString()).then((val){ setState(() { showText=val['data']['name'].toString(); }); }); }}
完整代码:
import 'package:flutter/material.dart';import 'package:dio/dio.dart';class HomePage extends StatefulWidget { _HomePageState createState() => _HomePageState();}class _HomePageState extends State{ TextEditingController typeController = TextEditingController(); String showText = '欢迎你来到美好人间'; @override Widget build(BuildContext context) { return Container( child: Scaffold( appBar: AppBar(title: Text('美好人间'),), body:Container( height: 1000, child: Column( children: [ TextField( //文本框 controller:typeController, decoration:InputDecoration ( contentPadding: EdgeInsets.all(10.0), labelText: '美女类型', helperText: '请输入你喜欢的类型' ), autofocus: false, //自动对焦关闭 ), RaisedButton( onPressed:_choiceAction, child: Text('选择完毕'), ), Text( showText, overflow:TextOverflow.ellipsis, maxLines: 1, ), ], ), ) ), ); } void _choiceAction(){ print('开始选择你喜欢的类型............'); if(typeController.text.toString()==''){ showDialog( context: context, builder: (context)=>AlertDialog(title:Text('美女类型不能为空')) ); }else{ getHttp(typeController.text.toString()).then((val){ setState(() { showText=val['data']['name'].toString(); }); }); } } //返回值为一个Future,这个对象支持一个等待回掉方法then Future getHttp(String TypeText) async{ try{ Response response; var data={'name':TypeText}; response = await Dio().get( "https://www.easy-mock.com/mock/5c60131a4bed3a6342711498/baixing/dabaojian", queryParameters:data ); return response.data; }catch(e){ return print(e); } }}
其实Post的使用非常简单,主题代码并没有什么改动,只是把原来的get
换成Post
就可以了。代码如下:
Future getHttp(String TypeText) async{ try{ Response response; var data={'name':TypeText}; response = await Dio().post( "https://www.easy-mock.com/mock/5c60131a4bed3a6342711498/baixing/post_dabaojian", queryParameters:data ); return response.data; }catch(e){ return print(e); } }
转载地址:http://vonci.baihongyu.com/