Flutter:使用Future发送网络请求

pubspec.yaml配置http的SDK

cupertino_icons: ^1.0.8
http: ^1.2.2

请求数据的格式转换

// Map 转 json
final chat = {'name': '张三','message': '吃饭了吗',
};
final chatJson = json.encode(chat);
print(chatJson);// json转Map
final newChat = json.decode(chatJson);
print(newChat);

发送请求

import 'dart:convert'; // json依赖
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http; // http请求依赖class Chat {final String? name;final String? message;final String? imageUrl;Chat({this.name, this.message, this.imageUrl});//factory Chat.formMap(Map map) {return Chat(name: map['name'],message: map['message'],imageUrl: map['imageUrl'],);}
}class ChatPage extends StatefulWidget {@overrideState<ChatPage> createState() => _ChatPageState();
}
class _ChatPageState extends State<ChatPage> {@overridevoid initState() {super.initState();getDatas().then((value) {}).catchError((onError) {}).whenComplete(() {print('数据加载完毕');}).timeout(Duration(seconds: 1)).catchError((err) {print('超时时长1秒,提示请求超时');});}
}// async:异步的请求,不用卡在这等待
Future<List> getDatas() async {final url =Uri.parse('http://rap2api.taobao.org/app/mock/321326/api/chat/list');final res = await http.get(url);if (res.statusCode == 200) {// 获取相应数据,转成Map类型final resBody = json.decode(res.body);// map遍历chat_list,把每一项item转成模型数据,最后转成ListList chatList =resBody['chat_list'].map((item) => Chat.formMap(item)).toList();return chatList;} else {throw Exception('statusCode:${res.statusCode}');}
}

FutureBuilder 发送的请求

return Scaffold(body: Container(child: FutureBuilder(future: getDatas(),builder: (BuildContext context, AsyncSnapshot snapshot) {print('data:${snapshot.data}');if (snapshot.connectionState == ConnectionState.waiting) {return const Center(child: Text('Loading...'),);}return ListView(children: snapshot.data.map<Widget>((item) {return ListTile(title: Text(item.name),subtitle: Container(alignment: Alignment.bottomCenter,height: 25,child: Text(item.message,overflow: TextOverflow.ellipsis,),),leading: Container(width: 44,height: 44,decoration: BoxDecoration(borderRadius: BorderRadius.circular(6.0),image: DecorationImage(image: NetworkImage(item.imageUrl))),));}).toList(),);}),)
);

在这里插入图片描述

声明变量接收接口数据,在页面中使用该变量去渲染页面的方式

class _ChatPageState extends State<ChatPage> {List _datas = [];@overridevoid initState() {super.initState();getDatas().then((value) {setState(() {_datas = value;});}).catchError((onError) {});}
}body: Container(child: Container(child: _datas.length == 0 ? Center(child: Text('Loading...')) : ListView.builder(itemCount: _datas.length,itemBuilder: (BuildContext context, int index) {return ListTile(title: Text(_datas[index].name),subtitle: Container(alignment: Alignment.bottomCenter,height: 25,child: Text(_datas[index].message,overflow: TextOverflow.ellipsis,),),leading: Container(width: 44,height: 44,decoration: BoxDecoration(borderRadius: BorderRadius.circular(6.0),image: DecorationImage(image: NetworkImage(_datas[index].imageUrl))),));},))
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14541.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

llama-cpp模型轻量化部署与量化

一、定义 定义配置环境遇到的问题&#xff0c;交互模式下模型一直输出&#xff0c;不会停止模型量化Qwen1.5-7B 案例demo 二、实现 定义 主要应用与cpu 上的部署框架。由c完成。配置环境 https://github.com/ggerganov/llama.cpp https://github.com/echonoshy/cgft-llm/blo…

阅读《当代反无人机系统技术综述》笔记

目录 文献基本信息 序言 一、关键技术 1.1射频(RF)分析仪 1.2雷达 1.3视觉传感器和图像处理 1.4声学传感器 二、发展趋势 文献基本信息 题名&#xff1a;当代反无人机系统技术综述 作者&#xff1a;蒋罗婷 来源&#xff1a;电子质量 发表时间&#xff1a;2023-02-2…

【Lucene】倒排表和词典:提升搜索效率的关键数据结构

倒排表和词典&#xff1a;提升搜索效率的关键数据结构 倒排表&#xff08;Inverted Index&#xff09;和词典&#xff08;Term Dictionary&#xff09;是 Lucene 中用于加速搜索的关键数据结构&#xff0c;它们帮助系统在庞大的文档集合中快速定位包含特定关键词的文档。以下是…

RN开发遇到的坑

1 、 RN 启动崩溃 https://blog.csdn.net/qq_31915745/article/details/108125671 2、修改报红⻚ https://blog.csdn.net/weixin_43969056/article/details/104757926 3 、编译不过去提示 glog-0.3.5 有问题&#xff0c; 找到 / 项⽬ /node_modules/react-native/scripts/ io…

基于Multisim信号波形发生器电路正弦波方波三角波锯齿波(含仿真和报告)

【全套资料.zip】正弦方波三角波锯齿波方波占空比可调频率可调电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.设计一个能够产生多个信号输出的信号发生器&#xff0c; 要求输出波形…

GC9A01驱动移植(HALL库)

最近在做LVGL的移植&#xff0c;用到的屏幕驱动时GC9A01的&#xff0c;记录一下学习历程&#xff0c;防止日后遗忘。 这款屏幕我使用的是SPI协议&#xff0c;参考了部分稚辉菌大佬这个项目的程序&#xff1a; 【自制】我做了个能动的迷你电脑配件&#xff01;【软核】_哔哩哔…

PCIe板卡标准尺寸

一、板卡尺寸说明 两种PCIe外接卡的高度&#xff0c;即全高&#xff08;Standard height&#xff09;111.15 mm (4.376 inches)和半高&#xff08;half height&#xff09;68.90 mm (2.731 inches)&#xff1b; 两种PCIe外接卡的长度&#xff1a;全长&#xff08;full length&a…

docker 阿里云镜像加速

在阿里云首页点击产品-容器-容器镜像服务ACR 无需购买&#xff0c;直接进去控制台创建个人版 完成后点击镜像加速器 选择对应的系统&#xff0c;按照操作文档完成

KPaaS洞察|异构系统中用户角色与权限分类及管理解决方案

多个异构系统的使用已经成为企业常态。每个系统通常有自己独立的用户角色和权限设置&#xff0c;导致权限管理复杂且容易出现冲突。如何在多个异构系统中统一、有效地进行用户角色和权限管理&#xff0c;已成为企业保障数据安全和提升管理效率的关键挑战。通过集中式权限管理平…

食品配送管理系统(源码+文档+部署+讲解)

食品配送管理系统是成品商业化项目&#xff0c;系统可基于源码二开。 系统概述 餐饮食品配送&#xff0c;包含配送人APP、下单APP、管理端等&#xff0c;实现订餐、配餐&#xff0c;用于食品店、中央厨房等订餐、团餐业务 本项目名称为食品配送系统&#xff0c;是针对食品配…

领夹麦克风哪个品牌音质最好?无线领夹麦克风可以唱歌吗?

随着短视频和直播行业的蓬勃发展&#xff0c;无线领夹麦克风已成为内容创作者提升音质体验的关键一环。但遗憾的是&#xff0c;市场上充斥着太多夸大其词、华而不实的宣传&#xff0c;诸如“一键降噪”、“无损传输”等概念满天飞&#xff0c;让消费者难以分辨真伪。许多朋友在…

大模型学习笔记------BLIP模型的再思考

大模型学习笔记------BLIP模型的再思考 1、BLIP推理---如何进行“图生文”2、BLIP推理---如何进行视觉问答&#xff08;Visual Question Answering, VQA&#xff09;3、BLIP推理---如何进行图文检索&#xff08;Image-text retrieval&#xff09;任务4、总结 上一篇文章上文中讲…

c# 调用c++ 的dll 出现找不到函数入口点

今天在调用一个设备的dll文件时遇到了一点波折&#xff0c;因为多c 不熟悉&#xff0c;调用过程张出现了找不到函数入口点&#xff0c;一般我们使用c# 调用c 文件&#xff0c;还是比较简单。 [DllImport("AtnDll2.dll",CharSet CharSet.Ansi)]public static extern …

H5BuildX发行uniapp h5版本的正确姿势

在manifest.json中配置基础路径 在上传到服务器后&#xff0c;需要将打包后的文件夹修改为基础路径中相同的文件名 否则网页的css、js等资源文件会因为路径问题始终访问不了

C++(Qt)软件调试---符号转换工具cv2pdb (24)

C(Qt)软件调试—符号转换工具cv2pdb &#xff08;24&#xff09; 文章目录 C(Qt)软件调试---符号转换工具cv2pdb &#xff08;24&#xff09;[toc]1、概述&#x1f41c;2、下载cv2pdb&#x1fab2;3、qt程序使用cv2pdb&#x1f9a7;1.1 方法1&#xff1a;命令行1.2 方法2&#…

MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中

MySQL技巧之跨服务器数据查询&#xff1a;高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中 基础篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的…

ReactPress与WordPress:两大开源发布平台的对比与选择

ReactPress与WordPress&#xff1a;两大开源发布平台的对比与选择 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为各类网站和应用的核心组成部分。两款备受欢迎的开源发布平台——ReactPress和WordPress&#xff0c;各自拥有独特的优势和特点&am…

Python多进程间通讯(包含共享内存方式)

文章目录 1 通过非共享内存配合队列方式2 通过共享内存配合队列方式 注&#xff1a;本博文测试环境为Linux系统。 1 通过非共享内存配合队列方式 下面是一个常见的生产者与消费者的模式示例&#xff0c;这里分别启动了两个子进程&#xff0c;一个为生产者&#xff08;producer…

djang5 官网_polls_app_05( 关于代码测试)

这篇教程从 教程4 结束的地方开始。已经构建了一个网络投票应用程序&#xff0c;现在将为其创建一些自动化测试。 1. 原因&#xff1a; 雅各布卡普兰-莫斯&#xff08;Jacob Kaplan-Moss&#xff09;&#xff0c;Django的原始开发者之一&#xff0c;说过&#xff1a;“没有测…

准双向/弱上拉(标准8051输出模式)、仅为输入(高阻)、开漏输出、推挽输出、上拉电阻、下拉电阻都是什么?

准双向/弱上拉&#xff08;标准8051输出模式&#xff09;&#xff1a; 弱上拉&#xff1a;即输出的1驱动能力是有限的 准双向&#xff1a;可以输入也可以输出 为什么是弱上拉呢&#xff1f; 当三极管断开的时候&#xff0c;“内部输入”处应该是高电平&#xff08;前提的后端…