App几乎都离不开与服务器的交互,介绍Flutter中的网络请求以及解析。
Flutter原生网络请求
var httpClient = new HttpClient();
  var url = Constant.baseUrl + 'Android/1/1';
  _loadData() async {
    try {
      var request = await httpClient.getUrl(Uri.parse(url));
      var response = await request.close();
      if (response.statusCode == HttpStatus.OK) {
        _result = await response.transform(UTF8.decoder).join();
        _decodeJson(_result, false);
      } else {
        _result = 'error code : ${response.statusCode}';
      }
    } catch (exception) {
      _result = '网络异常';
    }
    // If the widget was removed from the tree while the message was in flight,
    // we want to discard the reply rather than calling setState to update our
    // non-existent appearance.
    if (!mounted) return;
    setState(() {});
  }
使用第三方库http
  var client = new http.Client();
  _loadDataByHttp() async {
    try {
      http.Response response = await client.get(url);
      if (response.statusCode == HttpStatus.OK) {
        if (response.statusCode == HttpStatus.OK) {
          _result = response.body.toString();
          _decodeJson(_result, false);
        } else {
          _result = 'error code : ${response.statusCode}';
        }
      } else {
        _result = 'error code : ${response.statusCode}';
      }
    } catch (exception) {
      _result = '网络异常';
    }
    setState(() {});
  }
使用第三方库dio
 Dio dio = new Dio();
  _loadDataByDio() async {
    try {
      Response response = await dio.get(url);
      if (response.statusCode == HttpStatus.OK) {
        _result = response.data.toString();
        _decodeJson(response.data, true);
      } else {
        _result = 'error code : ${response.statusCode}';
      }
    } catch (exception) {
      print('exc:$exception');
      _result = '网络异常';
    }
    setState(() {});
  }
数据解析
  _decodeJson(var body, bool isDio) {
    var json;
    if (isDio) {
      //如果是Dio则不需要jsonDecode
      json = body;
    } else {
      json = jsonDecode(body);
    }
    List flModels = json['results'];
    List<AIModel> list = flModels.map((model) {
      return new AIModel.fromJson(model);
    }).toList();
    for (AIModel model in list) {
      _decodeResult =
          '作者:${model.who}\n描述:${model.desc}\n地址:${model.url}\n时间:${DateTime.parse(
          model.publishedAt)}';
    }
    setState(() {});
  }
效果展示












