Flutter 网络请求get与post的两个库
第一种:http库
https://pub.dev/packages/http
添加依赖
dependencies:http: ^0.12.0
安装http
flutter packages get
引用导入
import 'package:http/http.dart' as http;
常用方法
get(dynamic url, { Map<String, String> headers }) → Future<Response>
post(dynamic url, { Map<String, String> headers, dynamic body, Encoding encoding }) → Future<Response>(必须)url:请求地址
例子
http.post('https://flutter-cn.firebaseio.com/products.json', body: json.encode(param),encoding: Utf8Codec()) .then((http.Response response) { final Map<String, dynamic> responseData = json.decode(response.body); //处理响应数据 }).catchError((error) { print('$error错误'); });返回值都用到Dart Futures, 类似JavaScript中的promise 官方推荐使用async/await来调用网络请求
void addProduct(Product product) async { Map<String, dynamic> param = { 'title': product.title, 'description': product.description, 'price': product.price }; try { final http.Response response = await http.post( 'https://flutter-cn.firebaseio.com/products.json', body: json.encode(param), encoding: Utf8Codec()); final Map<String, dynamic> responseData = json.decode(response.body); print('$responseData 数据'); } catch (error) { print('$error错误'); } }用 try catch来捕获错误 两种写法都可以,个人觉得第二种语法思路更明确.
第二种:dio库
https://github.com/flutterchina/dio
添加依赖
首先我们需要集成dio,在pubspec.yaml文件中添加dio(注意格式):
dependencies:
flutter:
sdk: flutter
dio: ^1.0.6
引入
import 'package:dio/dio.dart';
import 'package:worker_sp/model/Api.dart';// 这个包为自定义Api地址
import 'package:dio/dio.dart'; import 'package:worker_sp/model/Api.dart'; import 'dart:io'; class NetService { static const String Base_URL = Api.Base_Url; static const String GET = 'GET'; static const String POST = 'POST'; //get请求 static void get(String url, Function successCallBack, {Map<String, String> params, Function errorCallBack}) { _request(url, successCallBack, method: GET, params: params, errorCallBack: errorCallBack); } //post请求 static void post(String url, Function successCallBack, {Map<String, String> params, Function errorCallBack}) { _request(url, successCallBack, method: POST, params: params, errorCallBack: errorCallBack); } // 请求部分 static void _request(String url, Function callBack, {String method, Map<String, String> params, Function errorCallBack}) async { String errorMsg = ""; int statusCode; try { Response response; Options options= new Options( // 15s 超时时间 connectTimeout:15000, receiveTimeout:15000, baseUrl: Base_URL, // dio库中默认将请求数据序列化为json,此处可根据后台情况自行修改 contentType: new ContentType('application', 'x-www-form-urlencoded',charset: 'utf-8') ); Dio dio = new Dio(options); if (method == GET) { response = await dio.get(url,data: params); } else { response = await dio.post(url,data: params); } statusCode = response.statusCode; //处理错误部分 if (statusCode < 0) { errorMsg = "网络请求错误,状态码:" + statusCode.toString(); _handError(errorCallBack, errorMsg); return; } if (callBack != null) { callBack(response); print(response.statusCode); } } catch (exception) { _handError(errorCallBack, exception.toString()); } } //处理异常 static void _handError(Function errorCallback, String errorMsg) { if (errorCallback != null) { errorCallback(errorMsg); } } }
网友评论0