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);