在前面的文章中我们在Flutter中的本地存储,我们可以将用户的数据存储在移动设备上,但是当用户清空设备或者更换设置这些用户存储的信息就会面临丢失的问题。那么,我们就不得不考虑将用户的信息存储一个第三方的地方,没错就是服务器。
那么,今天我们就来看下Flutter中的网络操作。
跟前面讲到的本地存储操作一样,Flutter给我们提供了第三发库的支持,同样的下面三个操作
然后我们可以在我们代码中执行如如操作就可以完成http的请求
当然它同样支持,get、delete、head、path、put、read等请求。
在上面的请求中我们直接使用http.post()方法便直接给我们返回了一个泛型为Response的Future对象。很好,这个库已经帮我们做好了网络请求的异步操作和异常捕获,所以说我们直接使用就可以了。
如果您向同一服务器发出多个请求,则可以通过使用客户端而不是发出一次性请求来保持打开持久连接。如果您这样做,请务必在完成后关闭客户端:
同样的这个库同样支持你自定义自己的HTTPClient
好吧,接下来,我们来看个例子看看用起来在怎么样
我们以github获取用户信息为例来看下http库的用法
上面的代码很简单,页面上只有一个很简单的RaisedButton,当用户点击时便会触发上,上面的httpGet方法。
httpGet方法里面会调用http的get请求,请求github api,使用then来接收正常的返回信息,使用catchError来接受异常的信息,当请求完成时会触发whenComplete
下面还是来看下效果吧:
点击按钮后控制台输出:
I/flutter (13613): 请求开始 I/flutter (13613): 请求结果:{“login”:”flyou”,”id”:6630762,”avatar_url”:”https://avatars1.githubusercontent.com/u/6630762?v=4","gravatar_id":"","url":"https://api.github.com/users/flyou"………} I/flutter (13613): 请求完成
上面请求的返回结果比较长,就不全部贴出来了哈
现在我们断开手机的网络来重新试一下:
I/flutter (13613): 请求开始 I/flutter (13613): 请求出错:SocketException: Failed host lookup: ‘api.github.com’ (OS Error: No address associated with hostname, errno = 7) I/flutter (13613): 请求完成
嗯,和我们的预期一样,现在它走了catchError的回调。
现在我们使用的接口后台返回的一半都是Json的形式,所以我们也仅仅对json数据的处理做下介绍。
在Flutter中默认已经为我们提供了convert库来处理json字符串的转换
我们可以使用json.encode()或者json.decode()方法来序列化或者反序列化json字符。
好吧,还是来举个例子,还是跟上面的一样请求github api获取用户信息,但是这次我们根据用户输入的用户名来获取用户信息,并且把返回的用户信息合理的显示在屏幕上。
初始化的界面是这样样子的。
界面很简单,最上面一个image,下面是几个ListTitle,在下面就是一个TextField,最下面就是就是一个RaisedButton了。
当我们点击RaisedButton时就会获取TextField输入的内容并且去请求服务器并返回。
对了,在上面的代码中还用到了一个User对象,这是需要自己定义的用来存储接口返回信息的。
User.dart
可以发现User类里面很简单,只是定义了几个我们需要的属性,然后通过 定义fromJson方法把值赋值给相应的属性(对Json数据格式不熟悉的童鞋自己去google看下哈)
那么我们来试一下效果吧
当然在使用服务端反悔的数据的时候需要执行判空操作哦
当然,大家也可以在用户点击按钮时弹出dialog提示再请求完成时去除dialog显示,这个例子比较丑大家明白怎么使用就ok啦。
大家在下面可以按照上面的提示做一下Post请求,或者给请求增加header
点击左下角阅读原文,体验更佳阅读效果
我怀疑这个是个坏掉的二维码,分享到朋友圈试试?
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有