你如何从firebase序列化这些数据?:
{ "-KiRg_F-qC59xxlfZ6ej": { "first":"Brandon","last":"Donnelson" },"-KiRgmsISBsJsWfXhrdD": { "first":"Danny","last":"Kirk" } }
我想出了什么:(见_loadData())
import 'dart:convert';import 'package:Flutter/material.dart';import 'package:Flutter/services.dart';voID main() { runApp(new MyApp());}class MyApp extends StatelessWidget { @overrIDe Widget build(BuildContext context) { return new MaterialApp( Title: 'Flutter Demo',theme: new themeData( primarySwatch: colors.blue,),home: new MyHomePage(Title: 'Flutter Demo Home Page'),); }}class MyHomePage extends StatefulWidget { MyHomePage({Key key,this.Title}) : super(key: key); final String Title; @overrIDe _MyHomePageState createState() => new _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> { @overrIDe Widget build(BuildContext context) { return new Scaffold( appbar: new Appbar( Title: new Text(Widget.Title),body: new Center( child: new Text( 'click',floatingActionbutton: new floatingActionbutton( onpressed: _test,tooltip: 'Increment',child: new Icon(Icons.add),); } voID _test() { _loadData(); } _loadData() async { String url = 'https://dev-xxxxxxx.firebaseio.com/names.Json'; var httpClIEnt = createhttpClIEnt(); var response = await httpClIEnt.read(url); print('response=' + response); // response={"-KiRg_F-qC59xxlfZ6ej":{"first":"Brandon","last":"Donnelson"},"-KiRgmsISBsJsWfXhrdD":{"first":"Danny","last":"Kirk"}} namesData namesData = new namesData(JsON.decode(response)); print("names.len=" + namesData.names.length.toString()); }}class namesData { final List<nameData> names = new List(); namesData(Map data) { data.values.forEach((Map map) => names.add(new nameData.fromJson(map))); }}class nameData { String first; String last; nameData.fromJson(Map map) { first = map['first']; last = map['last']; }}
我发现Json解码器有一个更好的方法来使用reviver函数实例化类.这感觉好多了,但我想我可以做得更好.
_loadData() async { String url = 'https://dev-xxxxxxx.firebaseio.com/names.Json'; var httpClIEnt = createhttpClIEnt(); var response = await httpClIEnt.read(url); print('response=' + response); // response={"-KiRg_F-qC59xxlfZ6ej":{"first":"Brandon","last":"Kirk"}} var extendedJson = new JsonCodec(reviver: _reviver); var o = extendedJson.decode(response); print('end'); } // https://github.com/dart-lang/sdk/blob/master/tests/lib/convert/Json_toencodable_reviver_test.dart _reviver(key,value) { if (value != null && value is Map && key.toString().contains("-")) { return new nameData2(value); } return value; } } class nameData2 { String first; String last; nameData2(Map map) { first = map['first']; last = map['last']; } }解决方法 我个人喜欢有时写一个小编解码器:
DartPad example
import 'dart:convert';voID main() { final decoder = const FirebasenamesDecoder(); print(decoder.convert(exampleFirebaseData));}class namedData { final String ID; final String firstname; final String lastname; const namedData(this.ID,this.firstname,this.lastname); @overrIDe String toString() => '$namedData {$ID: $firstname $lastname}';}class FirebasenamesDecoder extends Converter<Map,Iterable<namedData>> { const FirebasenamesDecoder(); @overrIDe Iterable<namedData> convert(Map<String,Map> raw) { return raw.keys.map((ID) => new namedData(ID,raw[ID]['first'],raw[ID]['last'])); }}final exampleFirebaseData = { "-KiRg_F-qC59xxlfZ6ej": { "first":"Brandon","last":"Donnelson" },"last":"Kirk" }};
结果是:
总结( namedData {-KiRg_F-qC59xxlfZ6ej: Brandon Donnelson},namedData {-KiRgmsISBsJsWfXhrdD: Danny Kirk} )
以上是内存溢出为你收集整理的将数据从firebase序列化为Flutter的Dart对象的最佳方法是什么?全部内容,希望文章能够帮你解决将数据从firebase序列化为Flutter的Dart对象的最佳方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)