Я пытаюсь прочитать базу данных Firebase в реальном времени и пытаюсь преобразовать ее в список, чтобы я мог представить ее в виде виджета таблицы в моем приложении.
Вот данные Json, которые я импортирую в базу данных реального времени firebase, а затем вызываю их в моем приложении
[
{
"SYMBOL": "VOLTAS",
"OPEN": "572.8",
"CLOSE": "572.2",
"FORECAST": "TRENDING"
},
{
"SYMBOL": "GODREJCP",
"OPEN": "645.05",
"CLOSE": "640.55",
"FORECAST": "TRENDING"
},
{
"SYMBOL": "MARICO",
"OPEN": "355.4",
"CLOSE": "351.4",
"FORECAST": "TRENDING"
},
{
"SYMBOL": "KOTAKBANK",
"OPEN": "1396.0",
"CLOSE": "1389.35",
"FORECAST": "TRENDING"
},
{
"SYMBOL": "KAJARIACER",
"OPEN": "575.0",
"CLOSE": "579.95",
"FORECAST": "TRENDING"
}
]
Я искал часы и часы и наконец нашел это руководство:
https://medium.com/flutter-community/parsing-complex-json-in-flutter-747c46655f51
Я наконец понял, что имею дело со списком карт.
Ниже мой текущий набор кода.
cprdata.dart:
class MyDataList {
final List<MyData> myList ;
MyDataList({
this.myList,
});
factory MyDataList.fromJson(List<dynamic> parsedJson) {
List<MyData> myList = new List<MyData>();
myList = parsedJson.map((i)=> MyData.fromJson(i)).toList();
return new MyDataList(
myList: myList
);
}
}
class MyData {
final String SYMBOL;
final String FORECAST;
final String OPEN;
final String CLOSE;
MyData({
this.SYMBOL,
this.OPEN,
this.CLOSE,
this.FORECAST});
factory MyData.fromJson(Map<String, dynamic> json){
//print(json);
return new MyData(
SYMBOL: json['SYMBOL'],
OPEN: json['OPEN'],
CLOSE: json['CLOSE'],
FORECAST: json['FORECAST']
);
}
}
cpr.dart
///import 'dart:async';
import 'package:flutter/material.dart';
import 'package:firebase_database/firebase_database.dart';
import 'cprdata.dart';
import 'dart:convert';
class CprAnalysis extends StatefulWidget{
@override
CPRState createState() => CPRState();
}
class CPRState extends State<CprAnalysis> {
List<MyData> allData = [];
@override
void initState() {
super.initState();
DatabaseReference cprData = FirebaseDatabase.instance.reference();
cprData.reference().once().then((DataSnapshot snap) {
var d = snap.value;
final jsonE = json.encode(d);
final jsonResponse = json.decode(jsonE);
MyDataList zz = new MyDataList.fromJson(jsonResponse);
print(zz.myList);
setState(() {
print("Done");
//print('Length : ${allData.length}');
});
}
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("CPR Analysis"),
),
);
}
Ожидаемый результат - список, содержащий данные файла json в формате списка, так что я могу использовать его для создания таблицы для отображения в моем приложении.
Фактический результат:
I/flutter (16067): [Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance of 'MyData', Instance o
I/flutter (16067): Done