flutter dio网络请求与json数据解析

详解flutter之网络请求dio,请求,拦截器简单示例 主要介绍了详解flutter之网络请求dio,请求,拦截器简单示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

在Flutter中,Dio 是一个功能强大且易于使用的网络请求库,用于处理HTTP请求和响应。与 http 包相比,Dio 提供了更多高级功能,例如拦截器、文件上传/下载、请求取消等。结合 json_serializable 或手动解析 JSON 数据,可以轻松实现网络数据的获取与解析。

以下是一个完整的示例,展示如何使用 Dio 进行网络请求并解析 JSON 数据:


1. 添加依赖

在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  dio: ^5.0.0 # 确保使用最新版本
  json_annotation: ^4.8.0

dev_dependencies:
  build_runner: ^2.3.0
  json_serializable: ^6.7.0

然后运行以下命令以安装依赖:

flutter pub get

2. 创建数据模型

为了更方便地解析 JSON 数据,我们可以创建一个数据模型类,并使用 json_serializable 自动生成序列化和反序列化代码。

定义模型类

创建一个文件 user_model.dart:

import 'package:json_annotation/json_annotation.dart';

part 'user_model.g.dart'; // 自动生成的部分

()
class User {
  final int id;
  final String name;
  final String email;

  User({required this.id, required this.name, required this.email});

  // 工厂方法用于从 JSON 转换为对象
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  // 方法用于将对象转换为 JSON
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
生成代码

运行以下命令以生成 user_model.g.dart 文件:

flutter pub run build_runner build

这会自动生成 _$UserFromJson 和 _$UserToJson 方法。


3. 使用 Dio 发起网络请求

接下来,我们使用 Dio 发起一个 GET 请求,并将返回的 JSON 数据解析为 User 对象。

示例代码

创建一个文件 dio_example.dart:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'user_model.dart'; // 导入模型类

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Dio 网络请求示例')),
        body: const Center(child: UserList()),
      ),
    );
  }
}

class UserList extends StatefulWidget {
  const UserList({Key? key}) : super(key: key);

  
  _UserListState createState() => _UserListState();
}

class _UserListState extends State<UserList> {
  final Dio dio = Dio();
  List<User> users = [];

  Future<void> fetchUsers() async {
    try {
      // 示例 API 地址(假设返回 JSON 数据)
      const url = 'https://jsonplaceholder.typicode.com/users';

      // 发起 GET 请求
      final response = await dio.get(url);

      // 检查状态码是否成功
      if (response.statusCode == 200) {
        // 解析 JSON 数据
        final jsonData = response.data as List<dynamic>;

        // 将 JSON 数据转换为 User 对象列表
        setState(() {
          users = jsonData.map((json) => User.fromJson(json)).toList();
        });
      } else {
        throw Exception('Failed to load users');
      }
    } catch (e) {
      // 处理错误
      print('Error: $e');
    }
  }

  
  void initState() {
    super.initState();
    fetchUsers(); // 页面加载时自动发起请求
  }

  
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: users.length,
      itemBuilder: (context, index) {
        final user = users[index];
        return ListTile(
          title: Text(user.name),
          subtitle: Text(user.email),
        );
      },
    );
  }
}

4. 代码说明

  1. Dio 初始化:

    • Dio 是一个强大的 HTTP 客户端,默认支持 GET、POST、PUT、DELETE 等 HTTP 方法。
    • 在示例中,我们通过 dio.get(url) 发起了一个 GET 请求。
  2. JSON 数据解析:

    • 假设 API 返回的 JSON 数据是数组形式(如 [{...}, {...}]),我们将其解析为 List<dynamic>。
    • 使用 map 方法将每个 JSON 对象转换为 User 对象。
  3. 错误处理:

    • 使用 try-catch 捕获网络请求中的异常。
    • 如果状态码不是 200,抛出自定义异常。
  4. UI 更新:

    • 使用 setState 更新 users 列表,触发 UI 重新渲染。

5. 测试与运行

运行项目后,应用会从 https://jsonplaceholder.typicode.com/users 获取用户数据,并将其显示在一个列表中。


6. 可选优化

  • 拦截器:可以使用 Dio 的拦截器来统一处理请求头、日志记录等。
  • 分页加载:如果数据量较大,可以实现分页加载功能。
  • 缓存机制:结合本地数据库或内存缓存,减少重复请求。

stm32教程之三重ADC交错采样 ps:本文基于stm32F407ZGT6单片机 stm32F4单片机单通道采集的最大采样率为2.4M,所以有时会难以满足较高频率的采样,于是查阅芯片手册,发现stm32F4支持多重ADC采集,利用每个通道的转换时间,错位采样,从而提高采样率,最大把采样率开到2.4*3=7.2M. (去年初学ADC时研究的,基于cube和HAL库的三重ADC交错采样参考资料不多,我也是研究了一段时间,写下这篇博客希望可以帮助到更多人。) 示意图如下: 以下是官方例子的说明, In this ex... 阅读详情

相关推荐

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7009

Flutter基础(十一)网络请求(Dio)与JSON数据解析

本文首发于公众号「刘望舒」 ReactNative入门系列 React Native组件 Flutter基础系列 前言 在Android开发中如果我们想要请求网络,可以使用HttpClent、HttpURLConnection,但在项目中一般都会使用OkHttp和Retrofit。在Flutter也是如此,系统提供了HttpClient,但在项目中一般会使用第三方库,比如http和Dio,如...

weixin_30471065的博客 2039

红外热成像仪原理及应用

目录什么是红外热成像背景介绍热成像技术原理热成像分类红外热成像和夜视仪之间的区别红外热像仪夜视仪红外照明相机对比红外热像仪都能看透什么如何选择制冷型和非制冷型红外热像仪制冷型红外热像仪非制冷型红外热像仪实例对比成像速度空间分辨率灵敏度光谱滤波同步何如选择合适的红外热像仪像素测温范围和被测物温度分辨率空间分辨率温度稳定性热像仪的距离系数比常见热成像仪关键参数量程视场角 (FOV)红外分辨率热灵敏度(NETD)焦距光谱范围精度内置优化分析NTED(热灵敏度)什么是NETD如何测量NETD?NETD如何影响测量?

zhy295006359的博客 2万+

flutter dio解析Json的两种方式类型转换

void getHttp() async { var url = 'https://**********************/AppAccess/GetRestaurantCategoryList'; try { var response = await Dio().get(url); if (response.statusCode == HttpStatus.ok) { var json = jsonDecode(response.data);

华山论码 2193

嵌入式开发:用状态机实现STM32按键消抖,告别阻塞延时

在嵌入式系统开发中,处理异步事件和实时响应是核心挑战。状态机作为一种强大的编程模型,通过定义有限的状态、事件和状态转换规则,将复杂的、非线性的控制逻辑转化为清晰、确定且易于维护的代码结构。其技术价值在于实现逻辑的模块化、异步化和非阻塞化,能显著提升代码的可读性、可扩展性和系统实时性。这一思想广泛应用于协议解析、用户界面交互、传感器数据处理等场景。本文以嵌入式开发中基础的按键处理为例,针对传统“延时消抖”方法会阻塞主循环、影响实时性的痛点,深入讲解如何运用状态机思维重构按键消抖逻辑。通过分析状态机的核心三要素

weixin_33377602的博客 339

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 998

Flutter 中使用 Dio 进行网络请求与 JSON 数据解析实战

Dio 是一个强大的 Dart HTTP 请求库,它支持拦截器、全局配置、FormData 等功能,在 Flutter 开发中广泛用于网络请求。在项目中使用 Dio,首先要在dio: ^[具体版本号]添加完成后,点击下载安装。通过上述步骤,我们成功在 Flutter 项目中使用 Dio 库进行网络请求,并借助插件解析 JSON 数据,实现了获取玩安卓首页 banner 数据并展示在页面上的功能。

m0_57836225的博客 4876

知识图谱构建中的数据清洗:AI原生应用高质量图谱的前提

数据清洗是知识图谱构建的核心前置环节,直接决定AI原生应用(如智能问答、个性化推荐、决策支持系统)的图谱质量与应用效能。本文以第一性原理为起点,系统解析数据清洗的理论框架、技术架构与工程实践,覆盖从多源异构数据的噪声检测到高质量知识三元组(实体-关系-实体)生成的全流程。通过层次化概念映射(专家→中级→入门)、数学形式化建模及工业级案例分析,揭示数据清洗在解决实体歧义、关系冲突、结构不一致等关键问题中的技术逻辑,并展望基于大模型的智能清洗范式演化。Completeness(完整性)

移动开发前沿的博客 404

Flutter 基于Dio封装网络请求+泛型解析返回数据

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 最近想用flutter写个商城项目,下载一些demo后发现dio都不封装下就使用,像使用flutter的大多数都是Android开发转过来的,习惯性封装okhttp,将 Response里返回的数据在工具类里处理好再返回业务层处理,从而大大减少代码量,使之更加清晰简洁,接下来代码走起... 目录 一、示例使用 二..

zhayunbiao的博客 8352

【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

「汽车电子助手」的博客 4724

复现Fastjson反序列化漏洞(从dnslog回显到rce再到反弹shell)

Fastjson是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。......

记录并分享学习安全的知识点.. 2697

flutter解析多层嵌套的Json数据(Dio)

flutter解析多层嵌套的Json数据建立数据模型使用 flutter解析简单的Json数据在前面flutter网络请求(Dio)中已经讲过,这里解析的是多层嵌套的Json数据 这里我们要解析的数据接口来自玩安卓网站https://www.wanandroid.com/article/list/0/json 由图可以看出,这里的数据是Map嵌套Map再嵌套List 建立数据模型 数据模型类的建立我们可以利用网上的一些工具进行实现,这里给出两个 https://autocode.icu/jsontodar

m0_46527751的博客 5688

【机器学习-18】特征筛选:提升模型性能的关键步骤

我们将介绍不同类型的特征筛选方法,包括基于统计的方法、基于模型的方法和嵌入式方法等,并详细解释每种方法的原理和适用场景。通过特征筛选,我们可以减少数据集的维度,降低模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。通过选择适当的特征筛选方法,我们可以减少模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。然而,并非所有的特征都对模型的性能提升有所贡献,有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关的。我们的目标是通过特征筛选选择出对欺诈检测最有用的特征,以提高模型的预测精度。

qq_38614074的博客 1万+

Flutter 网络请求与数据解析全指南:从 http 到 Dio + json_serializable 实战

3// 自动生成文件5111316}网络请求是 Flutter 应用与世界对话的窗口。掌握Dio 的拦截器机制自动化 JSON 解析和优雅的错误处理,是你迈向专业 Flutter 开发者的必经之路。替换为真实 API(如新闻、天气)增加分页、搜索功能集成状态管理(如 Provider)实现刷新💬互动提问:你在 Flutter 网络请求中遇到过哪些坑?欢迎评论区交流!

2501_93773401的博客 1434

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

dio java,Flutter基础(十一)网络请求(Dio)与JSON数据解析

本文首发于微信公众号「后厂技术官」前言在Android开发中如果我们想要请求网络,可以使用HttpClent、HttpURLConnection,但在项目中一般都会使用OkHttp和Retrofit。在Flutter也是如此,系统提供了HttpClient,但在项目中一般会使用第三方库,比如http和Dio,如果你想找到更多的第三库,可以在pub.dartlang.org/ 上查找想要的库。本篇文...

weixin_39946364的博客 770

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

flutter网络请求dio的get、post、上传文件、下载文件总结

> 本文章将讲述 > 1.使用dio发送基本的get请求 > 2.使用dio发送get请求的传参方式 > 3.解析响应json数据 > 4.使用dio发送post请求并提交FormData参数 > 5.使用dio发送post请求并提交json参数 > 6.使用dio上传文件并实现进度监听 > 7.使用dio下载文件并实现进度监听 > 8.配制dio的拦截器 > 9.配制dio网络代理抓包 > 10.配制dio请求header以及公共请求参数 > 11.dio 取消网络请求

代码小疯子 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Flutter dio 库封装并实现网络请求及 Json 数据解析示例

文章目录Dio基本使用封装使用 Dio 基本使用 封装使用

龙衣 3451

flutter网络dio框架get请求使用总结

本文章将讲述 1.使用dio发送基本的get请求 2.使用dio发送get请求的传参方式 3.解析响应json数据

代码小疯子 5263

Flutter学习-网络请求

Flutter学习-网络请求1. 网络请求的方式1.1 HttpClient的示例1.2 Http库1.3 dio三方库1.4 dio库的简单封装2. JSON的读取和解析2.1 本地JSON资源配置2.2 JSON数据的读取解析2.3 JSON解析代码 前言:项目中展示的大部分数据都是来自服务器,我们需要向服务器请求数据,并且对他们进行解析展示。 向服务器发出请求就需要用到网络请求相关的知识。 1. 网络请求的方式 在Flutter中常见的网络请求方式有三种:HttpClient、http库、dio

yong_19930826的博客 751

Flutter后台网络请求终极指南:Dio与Compute的完美结合

在Flutter开发中,高效处理网络请求和数据解析是提升应用性能的关键。Dio作为一款功能强大的HTTP客户端,支持全局配置、拦截器、FormData、请求取消等特性,而Compute则能帮助我们在后台线程处理复杂计算,避免阻塞UI。本文将详细介绍如何将这两者完美结合,打造流畅的网络请求体验。 ## Dio:Flutter网络请求的瑞士军刀 Dio是一个基于Dart的强大HTTP客户端,为Fl

gitblog_00222的博客 414

post 请求 argument type mismatch_flutter网络请求框架dio基本使用

题记 —— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。重要消息 flutter中网络请求dio使用分析 视频教程在这里 Flutter 从入门实践到开发一个APP之UI基础篇 视频 Flutter 从入门实践到开发一个APP之开发实战基础篇 flutter跨平台开发一点一滴分析系列文章系列文章 在这里了 本文章将讲述 1.使用dio发送基本的get请求 2.使...

weixin_39806413的博客 245

Flutter 异步加载数据并渲染列表

这里踩了一脚坑,写flutter的时候还是与js有差异的,这里主要涉及到几个知识点,看官需要对几部分内容先理解才容易处理,PS:其实现在我也还有点懵~ 1.网络请求,这里我分别使用了dio和http两个库 2.dart的json解析,不得不说,这个真神奇~ 3listView渲染及嵌套listView 4 FutureBuilder使用 吐槽: 坑1: dart对json的处理其...

Coco_chun的博客 5606

dio+json_serializable从网络请求到数据解析

首发于我的公众号 Flutter中消息传递 前言 网络请求到数据解析是一个app必不可少的流程之一,在flutter官网中目前主要是介绍 自带的Http请求+Json解析 但是也推荐了更好的网路请求到组合的方式 dio 和 json_serializable,本篇文章主要介绍这两个方式的使用,源码在结尾 本文同步更新于我的gitpage xsfelvis.github.io/2018/12/...

weixin_34262482的博客 846

《Flutter全栈开发实战指南:从零到高级》- 14 -网络请求与数据解析

详细介绍Flutter中网络请求和数据解析的核心知识,对比了官方http库和第三方dio库的特性与适用场景。推荐新手使用http库入门,而中大型项目更适合选择功能更强大的dio库。

技术探索者之路 - 一个专注于软件开发技术的实践型博客,涵盖移动应用开发、后端架构、Python编程和算法数据结构等核心技术领域。欢迎各位道友光临,喜欢本博主的别忘了一键三连哦。 1165

Flutter网络请求与JSON数据解析:从入门到精通的完整指南 [特殊字符]

想要在Flutter应用中实现网络请求和数据解析?这篇**Flutter网络请求与JSON数据解析**的终极指南将带你从基础概念到实际应用,掌握构建数据驱动应用的核心技能。无论你是初学者还是有一定经验的开发者,都能在这里找到实用的解决方案。 ## 🔥 为什么Flutter网络请求如此重要? 在现代移动应用开发中,**网络请求**是连接应用与服务器数据的桥梁。Flutter提供了多种强大的网络

gitblog_00786的博客 529

《Flutter 从0到1构建大前端应用》读后感—第6章【使用网络技术与异步编程】

一丶 网络协议简介 1.HTTP协议简介 2.HTTP2.0 能给我们带来什么 3.HTTPS 二丶 网络编程 1.HttpClient 2.http库 三丶 JSON解析 1.JSON 转成 Dart 对象 2.一个完整的例子 3.根据JSON用工具生成实体类 四丶 dio库 1.基本用法 2.dio单例 3.dio拦截器 4.dio拦截器链 5.dio适配器 6.dio库总结 五丶 异步编程 ...

qq_27494201的博客 448
上一篇: 在蓝牙信号扫描中,dBm 的负值是正常现象,表示信号强度
下一篇: flutter provider状态管理使用
getapi
博客等级 码龄2年 618粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值