问题描述
我有一个同步融合图表。我想从 firebase 获取数据。 yAxis 上的数据是“int”类型。而 xAxis si 的数据只是输入“日期时间”而不是从任何地方获取。有谁能够帮我?我只是厌倦了二月尝试这个 scince 并且我的图表没有任何反应。谢谢!
这是我的代码:
@override
Widget build(BuildContext context) {
return MaterialApp(debugShowCheckedModeBanner: false,home: LiveChart());
}
}
class LiveChart extends StatefulWidget {
@override
_LiveChartState createState() => _LiveChartState();
}
class _LiveChartState extends State<LiveChart> {
Timer timer;
int count = 0;
final dbRef = FirebaseDatabase.instance.reference();
List<_ChartData> chartData = <_ChartData>[];
Map<dynamic,dynamic> data = new Map();
void _updateDataSource(Timer timer) {
setState(() {
if (count >= 59) {
count = 0;
}
chartData.add(_ChartData(x: DateTime(2021,1,count),y1: data['y1']));
if (chartData.length == 20) {
chartData.removeAt(0);
}
count = count + 1;
});
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(body: _showChart());
}
Widget _showChart() {
return StreamBuilder(
stream: dbRef.child("Data").orderByChild('$count').onValue,builder: (context,snapshot) {
Widget widget;
if (snapshot.hasData &&
!snapshot.hasError &&
snapshot.data.snapshot.value != null) {
List<dynamic> values = snapshot.data.snapshot.value["Moisture"];
if (values != null && count < values.length) {
data = values[count];
timer = Timer.periodic(
Duration(milliseconds: 1000),_updateDataSource);
}
widget = Container(
child: SfCartesianChart(
tooltipBehavior: TooltipBehavior(enable: true),primaryXAxis: DateTimeAxis(),series: <Lineseries<_ChartData,DateTime>>[
Lineseries<_ChartData,DateTime>(
dataSource: chartData,xValueMapper: (_ChartData data,_) => data.x,yValueMapper: (_ChartData data,_) => data.y1,)
],),);
} else {
widget = Center(child: CircularProgressIndicator());
}
return widget;
});
}
@override
void dispose() {
super.dispose();
timer?.cancel();
}
}
class _ChartData {
_ChartData({this.x,this.y1});
final DateTime x;
final int y1;
}
这是错误:
════════ Exception caught by widgets library ═══════════════════════════════════
The following _TypeError was thrown building StreamBuilder<Event>(dirty,state: _StreamBuilderBaseState<Event,AsyncSnapshot<Event>>#ec6fc):
type 'int' is not a subtype of type 'List<dynamic>'
解决方法
如果不了解您从 Firebase 检索的数据,就很难完全理解代码。但是,看起来有问题的行是:
List<dynamic> values = snapshot.data.snapshot.value["Moisture"];
该值是真正的 List
还是错误消息所暗示的 int
?