Flutter 网络编程即是 Dart 的网络编程。
基本使用
下面是一个 get 请求的示例。
import 'dart:convert'; // 用于 json 解析
import 'dart:io'; // 用于 http
getAsyncData() async {
const url = 'https://app-api.yirimao.com/v1/activity/activity/newest';
var httpClient = new HttpClient();
try {
var request = await httpClient.getUrl(Uri.parse(url));
var response = await request.close(); // 得到是 buffer 数据
var jsonstr = await response.transform(utf8.decoder).join(); // 转换为 json
Map<String, dynamic> data = json.decode(jsonstr);
print(data['data']['activity']); // 像对象一个调用
} catch (err) {
print('error' + err.toString());
}
}
json 解析完后返回一个 Map,单独使用会比较麻烦,建议是封装一个类结构。
class ActivityNewest {
Map<String, dynamic> _data;
User(Map<String, dynamic> _data);
static get data() {
return this._data['data'];
}
}
使用 http
库
http
是一个第三方的网络请求库,并不是 Dart 自带的。因为封装的比较好,也是推荐使用它的。
安装依赖:
dependencies:
http: ^0.11.3+16
开始使用:
import 'package:http/http.dart' as http;
getAsyncDate() async {
const url = 'https://app-api.yirimao.com/v1/activity/activity/newest';
String jsonstr = (await http.post(url)).body;
Map<String, dynamic> data = json.decode(jsonstr);
print(data['data']['activity']);
}
下面是一个 post 请求的示例。
import 'package:http/http.dart' as http;
getAsyncDate() async {
const url = 'https://app-api.yirimao.com/v1/activity/activity/newest';
// post 请求 body 数据
const data = {
'name': 'abc',
'id': 'abcasdhakdkdsadda',
};
String jsonstr = (await http.post(url, body: data)).body;
Map<String, dynamic> data = json.decode(jsonstr);
print(data['data']['activity']);
}