Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Flutter进阶—网络和HTTP大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

使用Http包

Flutter支持Http包,版本0.11.3+12或更高版本,首先在pubspec.yaml中声明对http的依赖,注意添加声明后按顶部的“Packages get”:

dependencies:
  Flutter:
    sdk: Flutter
  http: '>=0.11.3+12'

发出http请求

接下来,创建一个http客户端(Client),我们建议使用createhttpClient来启用测试以提供http.mockClient

import 'package:Flutter/services.dart';

var httpClient = createhttpClient();

客户端支持常见的http操作,比如:

  • http GET:使用get获取一般的请求,read返回字符串的请求或返回字节的请求的readbytes

  • http POST:使用post作为一般的的post。

演示代码

postData() async {
  ...
  var response = await httpClient.post(url,body: {'name': 'doodle','color': 'blue'});
  print('Response status: ${response.statusCodE}');
}

需要注意的是,http API在返回值中使用Dart Futures,我们建议您使用具有async/await语法的API调用,比如上面的演示代码

解码和编码JSON

支持解码和编码JSON的功能dart:convert库提供,解码JSON字符串并将响应解析为Map:

@H_969_10@map data = JSON.decode(response.body); /* 假设响应内容是这样的:['foo',{ 'bar': 499 }] barValue设置为499 */ int barValue = data[1]['bar'];

要对JSON进行编码,要将一个简单的值(字符串,布尔值或数字文字)或Map、List或包含简单值的Map列表传递给encode方法

String encodedString = JSON.encode([1,2,{ 'a': null }]);

演示实例

这个实例演示了如何在Flutter应用程序中从httpS GET调用中解码JSON,它调用httpbin.com的Web服务测试API,然后响应您的本地IP地址。请注意,使用安全网络(httpS)。

首先添加http依赖关系,然后再将lib/main.dart的内容替换为以下内容

import 'dart:convert';
import 'package:Flutter/material.dart';
import 'package:Flutter/services.dart';

void main() {
  runApp(new MyApp());
}

@H_772_123@class @H_868_126@myApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',home: new MyHomePage(),);
  }
}

@H_772_123@class @H_868_126@myHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

@H_772_123@class _MyHomePageState extends State<@H_868_126@myHomePage> {
  String _ipaddress = "未知";

  _getIpaddress() async {
    String url = 'https://httpbin.org/ip';
    var httpClient = createhttpClient();
    var response = await httpClient.read(url);
    Map data = JSON.decode(responsE);
    String ip = data['origin'];

    /* bool mounted 这个状态对象当前是否在树中。 用于此处,如果控件在数据正在请求时从树中删除,则我们要丢弃该数据,而不是调用setState来更新实际不存在的内容。 */
    if(!mounted) return;

    setState((){
      _ipaddress = ip;
    });
  }

  @override
  Widget build(BuildContext context) {
    var spacer = new SizedBox(height: 32.0);

    return new Scaffold(
      body: new Center(
        child: new column(
          children: <Widget> [
            spacer,new Text('您当前的IP地址是:'),new Text('$_ipaddress'),spacer,new RaisedButton(
              onPressed: _getIpaddress,child: new Text('获取IP地址'),)
          ]
        )
      )
    );
  }
}

大佬总结

以上是大佬教程为你收集整理的Flutter进阶—网络和HTTP全部内容,希望文章能够帮你解决Flutter进阶—网络和HTTP所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。