Flutter 网络请求和序列化

2023-11-02

 

一.网络请求

1.导入http.dart

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

2.封装请求方法

//封装的方法
getData(cbk) async {
  var api =getBaseUrl() + 'cats/lv2/statistics';
  print(api);
  try {
        final response =await client.get(api);
        if (response.statusCode == 200) {
          cbk(response.body);
        }
  } catch (e) {
    print(e);
  }
}

String getBaseUrl () {
  return "https://xxx.com/";
}

 

//调用
getData((data){
    var a = json.decode(data);
  });

二. 序列化 

JSON.decode是将一个json格式的string 转化成一个Map<String,dynamic>类型的Map 官方无法转化成模型。以下有三种方法可以转化成模型

  1. 直接使用Map,不转换成Object。 这一点对于一些小型项目,数据量不大的情况下是可以使用的,原生默认支持。
  2. 通过添加额外的方法来转换成Object。这里所说的额外的方法是指,给你需要转换的类添加formJson(Map<String,dynamic> map)和Map<String,dynamic> toJson()这两个方法。
  3. 使用json_serializable 进行转换。这里简单说一下使用方式,官方文档中都有的。

官方推荐第三种,以下是实现方式

1.创建模型类

import 'package:menu_test/models/Author.dart';
import 'package:json_annotation/json_annotation.dart';
//报错忽略 后面会自动生成此文件
part 'Book.g.dart';

@JsonSerializable()
class Book extends Object with _$BookSerializerMixin {
  String name;
  Author author;
  String publishDate;
  String publisher;


  Book(this.name, this.author, this.publishDate, this.publisher);

  @override
  String toString() {
    return 'Book{name: $name, author: $author, publishDate: $publishDate, publisher: $publisher}';
  }
  factory Book.fromJson(Map<String, dynamic> json) => _$BookFromJson(json);
}
import 'package:json_annotation/json_annotation.dart';
//报错忽略 后面会自动生成此文件
part 'Author.g.dart';
@JsonSerializable()
class Author extends Object with _$AuthorSerializerMixin {
  String name;

  Author(this.name);

  @override
  String toString() {
    return 'Author{name: $name}';
  }
  factory Author.fromJson(Map<String, dynamic> json) => _$AuthorFromJson(json);

}

2.在pubspec.yaml中引入json_serializable相关的库

# Your other regular dependencies here
json_annotation: ^0.2.2
dev_dependencies:
# Your other dev_dependencies here
build_runner: ^0.7.6
json_serializable: ^0.3.2

保存此文件后,可能会出现以下错误

Because new_trend depends on build_runner >=0.9.0 which requires SDK version >=2.0.0-dev.61 <3.0.0, version solving failed.
pub get failed (1)

只需修改 ,并且保存

build_runner: any

安装相关依赖库之后,去pubspec.lock中查找当前库的版本,修改并保存

为什么不直接使用any作为版本号呢

在实际项目开发中,拥有不确定性的版本号会成为未来应用崩溃的一个极大的隐患。这可能将会使您的应用难以调试。所以请记住,不要在你的项目中留下any关键字!

3.在开发工具终端 输入

flutter packages pub run build_runner build

会自动生成两个文件 Author.g.dart和Book.g.dart

使用

//模型
var book = new Book("book1", new Author("Jack"), "2018-10-10", "xxx company");

//模型=>json字符串
String jsonStr= json.encode(book);

//json字符串转map
json.decode(jsonStr)

//json字符串=>模型
var bookAfter= Book.fromJson(json.decode(jsonStr));

以上就是自己学习的flutter相关网络请求和序列化~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 网络请求和序列化 的相关文章

随机推荐

  • FID(Fusion-in-Decoder models)源码笔记

    源码 源码 https github com facebookresearch FiD 目录 源码 数据集 数据格式 预训练模型 训练 测试 src slurm py 资源调度管理 util py 配置管理 evaluation py 查找
  • 夜光带你走进 传奇语言C#(24)

    夜光序言 一只站在树上的鸟儿 从来不会害怕树枝断裂 因为它相信的不是树枝 而是它自己的翅膀 有时候 经济不独立 你发的一切飚都是浮云 正文 任务18 班级编码表维护
  • oracle 16058,Oracle 11g Data Guard ORA-16058 错误处理

    采用RMAN 备份恢复搭建Oracle 11g的Data Guard 恢复结束之后 DG 同步一直异常 主库提示如下信息 https www cndba cn Dave article 4330 SQL gt select DEST NAM
  • java设计模式之观察者模式(含完整例子和UML类图)

    java设计模式之观察者模式 1 观察者模式 1 1定义 观察者 Observer 模式的定义 指多个对象间存在一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都得到通知并被自动更新 这种模式有时又称作发布 订阅模式 模型
  • 高性能服务器架构思路(一)——缓冲策略

    本文首发腾云阁 高性能服务器架构思路 一 缓冲策略 作者介绍 韩伟 1999年大学实习期加入初创期的网易 成为第30号员工 8年间从程序员开始 历任项目经理 产品总监 2007年后创业4年 开发过视频直播社区 及多款页游产品 2011年后就
  • 孕妇有什么副业做?孕妇在家有哪些兼职可以做?

    孕妇有什么副业做 孕妇在家有哪些兼职可以做 孕妇在家选择兼职工作时 有一点一定要遵循 不能从事极端的体力工作 因为体力工作容易让孕妇出现并发症 所以孕妇一定要选择一些没有太大压力的兼职工作 有很多兼职工作时间很自由 所以特别适合怀孕的女性做
  • LAMP部署

    文章目录 LAMP简介 web服务器 web服务器的资源分为两种 静态资源和动态资源 工作流程 http响应报文 httpd与php结合的方式 httpd与php结合的方式有以下三种 lamp平台构建 环境说明
  • 不会下载软件?这5个网站别错过,纯净、安全、无捆绑

    虽然下载网站有很多 但是一不小心就会下载到各种捆绑安装包 这里就给大家分享5个比较靠谱的软件下载网站 纯净 安全 无捆绑 可以放心使用 1 Microsoft Store 一个微软旗下的电脑软件商城 它里面有很多类型的软件可以下载 首页也有
  • c/c++中,预编译指令用法汇总

    切换模式 写文章 登录 注册
  • java多线程实战( 多个线程 修改同一个变量)

    java多线程实战 多个线程 修改同一个变量 synchronized 同步 介绍 java多线程实战 需求 创建两个线程 分别输出 a b 要求输出总和为30个 线程介绍 一 定义线程 1 扩展java lang Thread类 此类中有
  • Makefile原理及使用

    makefile make 是一个命令工具 是一个解释 makefile 中指令的命令工具 make 工具在构造项目的时候需要加载一个叫做 makefile 的文件 makefile 关系到了整个工程的编译规则 文章目录 makefile
  • 前端Vue项目——课程详情页面实现

    一 详情页面路由跳转 应用 Vue Router 编程式导航通过 this router push 来实现路由跳转 1 绑定查看详情事件 修改 src components Course Course vue 文件 给课程 div 绑定查看
  • matlab基础语法1_变量类型_顺序循环

    1 变量 和c不同 matlab对于变量可以直接用 不用提前声明 和c一样 大小写敏感 和c一样 matlab的关键字不做变量名 使用iskeyword查看 和c一样 matlab的变量不能以数字开头 综上 和c编程类似 一定原因也是mat
  • OCV/ACOV的介绍

    OCV on chip variation 差异 芯片制造过程中 MOS见差异必然存在 Library中的cell delay是在某个固定的PVT下仿真得出的 而实际上芯片内部由于工艺偏差 电压降 温度变化 cell的delay并不是一个固
  • 进度条加载

    import datetime import time def show process counts 500 wait time 1 25 进度条总步数 steps counts 打印的 length 80 for step in ran
  • socket编程-TCP各函数及其用法

    socket编程 TCP socket主要类型 流套接字 SOCK STREAM 流套接字用于提供面向连接 可靠的数据传输服务 该服务将保证数据能够实现无差错 无重复送 并按顺序接收 流套接字之所以能够实现可靠的数据服务 原因在于其使用了传
  • Pseudo-Q: Generating Pseudo Language Queries for Visual Grounding, 2022 CVPR

    本文内容仅代表个人理解 如有错误 欢迎指正 1 Problem Background Information 1 1 Problem 目前 人们基本上都采用基于深度学习的方法来解决Visual grounding任务 不论是全监督学习还是弱
  • [转]VS2022\VS2019 VisualSVN License expires 解决办法

    步骤一 首先下载反编译工具 dnSpy gitHub下载地址 Releases dnSpy dnSpy GitHub 步骤二 查找VisualSVN安装目录 一般都在C目录下 步骤三 用dnSpy打开该dll 运行dnSpy exe 步骤四
  • CentOS8服务篇2:配置与应用Web服务

    Web服务器又称为WWW服务器 它是放置一般网站的服务器 一台Web服务器上可以建立多个网站 各网站的拥有者只需要把做好的网页和相关文件放置在Web服务器的网站中 其他用户就可以通过浏览器访问网站中的网页了 目前能够提供Web网络服务的程序
  • Flutter 网络请求和序列化

    一 网络请求 1 导入http dart import package http http dart as client 2 封装请求方法 封装的方法 getData cbk async var api getBaseUrl cats lv