Flutter JSON序列化

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<String,?dynamic>?json)

??????:?origin?=?json['origin'];

??Map<String,?dynamic>?toJson()?=>

??????{

????????'origin':?origin,

??????};

}

class?_MyHomePageState?extends?State<MyHomePage>?{

??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<String,?dynamic>?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:?<Widget>[

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

????????????new?Text('$_ipAddress.'),

????????????spacer,

????????????new?RaisedButton(

??????????????onPressed:?_getIPAddress,

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

????????????),

??????????],

????????),

??????),

????);

??}

}

{

??Map<String,?dynamic>?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

創(chuàng)建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持續(xù)性的生成文件

添加fromJson和toJson

??factory?User.fromJson(Map<String,?dynamic>?json)?=>?_$UserFromJson(json);

??Map<String,?dynamic>?toJson()?=>?_$UserToJson(this);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容