Flutter 网络请求和序列化

 

一.网络请求

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相关网络请求和序列化~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值