当前位置: 首页 > news >正文

Flutter 使用http库获取网络数据的方法(一)

前言

        对于大部分应用来说,获取网络数据都是必不可少的一个功能。幸运的是,Dart 和 Flutter 就为我们提供了这样的工具。

1.使用 http库请求网络数据

        我们看看如何使用http获取网络数据。

1. 添加 http package

        http 包是 Flutter 官方推荐的网络请求库,简单易用。需要在 pubspec.yaml 中添加依赖:

dependencies:http: ^1.4.0

        然后我们在需要的地方导入http包。

import 'package:http/http.dart' as http;

        如果你想部署到Android上,需要添加下网络请求权限:

<!-- Required to fetch data from the internet. -->
<uses-permission android:name="android.permission.INTERNET" />

2.进行网络请求

        我这里找了一个开源的图片列表接口,使用方法如下:

  void sendRequest() async {var url = Uri.parse('https://picsum.photos/v2/list?page=1&limit=5');var response = await http.get(url);if (response.statusCode == 200) {final List<dynamic> data = List.from(jsonDecode(response.body));debugPrint("服务器返回结果:$data");setState(() {imageUrls = data.map((e) => e['download_url'] as String).toList();});}}

3.处理Http网络请求返回的数据

        这里仅展示Http网络库的用法,就不做复杂的数据模型转换了。仅用一个图片展示下网络图片:

Image.network(url)

4.完整的代码

        完整的代码如下:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;@overrideState<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {List<String> imageUrls = [];void sendRequest() async {var url = Uri.parse('https://picsum.photos/v2/list?page=1&limit=5');var response = await http.get(url);if (response.statusCode == 200) {final List<dynamic> data = List.from(jsonDecode(response.body));debugPrint("服务器返回结果:$data");setState(() {imageUrls = data.map((e) => e['download_url'] as String).toList();});}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(backgroundColor: Theme.of(context).colorScheme.inversePrimary,title: Center(child: Text(widget.title,style: TextStyle(),),),),body: RefreshIndicator(onRefresh: () async {sendRequest();},child: ListView(children: [if (imageUrls.isEmpty)Padding(padding: const EdgeInsets.all(16.0),child: Center(child: Text('下拉获取图片')),)else...imageUrls.map((url) => Padding(padding: const EdgeInsets.all(8.0),child: Image.network(url),))],),),);}
}

2.注意事项

        这里的网络请求接口API返回数据比较慢,稍微等待下。

        最终的效果图如下:

http://www.dtcms.com/a/267116.html

相关文章:

  • Excel 数据透视表不够用时,如何处理来自多个数据源的数据?
  • MAX3485在MCU芯片AS32S601-485通信外设中的应用
  • 线程的礼让和加入
  • 1004、最大连续1的个数 III
  • SpringBatch使用介绍
  • 任务调度器(Scheduler)实现逻辑
  • Java 创建对象过程 JVM 内存分配并发安全笔记
  • JVM与JMM
  • Mysql底层专题(四)索引优化实战一
  • DeepSeek与诡秘之主
  • 在SoC数据加解密验证中使用 Python 的 gmssl 库
  • 03_性能优化:让软件呼吸更顺畅
  • 计算机网络(网页显示过程,TCP三次握手,HTTP1.0,1.1,2.0,3.0,JWT cookie)
  • 【网络协议安全】任务12:二层物理和单臂路由及三层vlanif配置方法
  • HarmonyOS:创建ArkTS卡片
  • 从零开始开发纯血鸿蒙应用之探析仓颉语言与ArkTS的差异
  • Vuex身份认证
  • 《C++初阶之类和对象》【经典案例:日期类】
  • Java创建型模式---单例模式
  • WSL命令
  • C#每日学习日记
  • 3dmax烘焙插件3dmax法线贴图烘焙教程glb和gltf元宇宙灯光效果图烘焙烘焙光影贴图支持VR渲染器
  • AWS WebRTC:通过shell分析viewer端日志文件
  • 深入解析享元模式:通过共享技术高效支持大量细粒度对象
  • 【力扣 简单 C】70. 爬楼梯
  • 【鸿蒙】鸿蒙操作系统发展综述
  • 递归与循环
  • 深入理解Reactor调试模式:Hooks.onOperatorDebug() vs ReactorDebugAgent.init()
  • 软件工程经济与伦理
  • 流水线(Jenkins)打包拉取依赖的时候提示无法拉取,需要登录私仓的解决办法