flutter 动画json_Flutter JSON序列化

这篇博客介绍了在Flutter中处理JSON数据的方法,包括不使用model直接解析和使用json_serializable库进行序列化。通过示例展示了如何从HTTP响应中获取并解析IP地址,并讨论了使用json_serializable生成fromJson和toJson方法的优势。
摘要由CSDN通过智能技术生成

1、使用model和不使用model

import 'dart:convert';

import 'dart:io';

import 'package:flutter/material.dart';

void main() {

runApp(new MyApp());

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return new MaterialApp(

home: new MyHomePage(),

);

}

}

class MyHomePage extends StatefulWidget {

MyHomePage({Key key}) : super(key: key);

@override

_MyHomePageState createState() => new _MyHomePageState();

}

class User {

final String origin;

User(this.origin);

User.fromJson(Map json)

: origin = json['origin'];

Map toJson() =>

{

'origin': origin,

};

}

class _MyHomePageState extends State {

var _ipAddress = 'Unknown';

_getIPAddress() async {

var url = 'https://httpbin.org/ip';

var httpClient = new HttpClient();

String result;

try {

var request = await httpClient.getUrl(Uri.parse(url));

var response = await request.close();

if (response.statusCode == HttpStatus.OK) {

var json = await response.transform(Utf8Decoder()).join();

Map userMap = jsonDecode(json);

var user = new User.fromJson(userMap);

print('Howdy, ${user.origin}!');

//        Map user = jsonDecode(json);

//        print(' ${user['origin']}');

//        var data = JSON.decode(json);

//        result = data['origin'];

} else {

result =

'Error getting IP address:\nHttp status ${response.statusCode}';

}

} catch (exception) {

result = 'Failed getting IP address';

}

// If the widget was removed from the tree while the message was in flight,

// we want to discard the reply rather than calling setState to update our

// non-existent appearance.

if (!mounted) return;

setState(() {

_ipAddress = result;

});

}

@override

Widget build(BuildContext context) {

var spacer = new SizedBox(height: 32.0);

return new Scaffold(

body: new Center(

child: new Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

new Text('Your current IP address is:'),

new Text('$_ipAddress.'),

spacer,

new RaisedButton(

onPressed: _getIPAddress,

child: new Text('Get IP address'),

),

],

),

),

);

}

}

{

Map user = jsonDecode(json);

print(' ${user['origin']}');

}

{

Map userMap = jsonDecode(json);

var user = new User.fromJson(userMap);

print('Howdy, ${user.origin}!');

}

2、使用json_serializable

添加依赖

dependencies:

flutter:

sdk: flutter

json_annotation: ^2.0.0

dev_dependencies:

flutter_test:

sdk: flutter

build_runner: ^1.0.0

json_serializable: ^2.0.0

创建model

import 'package:json_annotation/json_annotation.dart';

class User {

User(this.origin);

String origin;

}

添加注解(part后面是类名称/添加part会报红)

part 'User.g.dart';

@JsonSerializable()

运行命令

flutter packages pub run build_runner build一次性的生成文件

flutter packages pub run build_runner watch持续性的生成文件

添加fromJson和toJson

factory User.fromJson(Map json) => _$UserFromJson(json);

Map toJson() => _$UserToJson(this);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值