我想从Firestore检索数据以显示在我的应用程序中,但是如果我运行我的应用程序,则会收到如下错误:
方法'[]'在null上被调用。 接收者:null 尝试致电:
当我使用'data ['名字]以及'data [saldo]时,会发生这种情况。 toString(),位于子Text()上;
我不知道该怎么解决
我的代码如下:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class Top extends StatefulWidget {
@override
_TopState createState() => _TopState();
}
class _TopState extends State<Top> {
dynamic data;
Future<dynamic> getData() async {
final DocumentReference document = Firestore.instance
.collection('users')
.document('Ljlhq1wqPad4EejHTHPqIyGjJSD2');
await document.get().then<dynamic>((DocumentSnapshot snapshot) async {
setState(() {
data = snapshot.data;
});
});
}
@override
void initState() {
super.initState();
getData();
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Column(
children: <Widget>[
Container(
color: Color(0xff216353),
height: 170,
),
],
),
//Row utama
Row(
children: <Widget>[
Container(
margin: EdgeInsets.only(top: 30.0, left: 20),
child: Center(
child: Text(
data['firstname'],
style: TextStyle(
color: Colors.white,
fontFamily: 'Poppins',
fontSize: 25.0,
fontWeight: FontWeight.bold),
),
),
),
],
),
Row(
// mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Column(
children: <Widget>[
Container(
margin: EdgeInsets.only(top: 65.0, left: 20),
child: Text(
'Total Saldo : ',
style: TextStyle(
color: Colors.white,
fontFamily: 'Poppins',
fontSize: 12.0,
),
),
),
],
),
Column(
children: <Widget>[
Container(
margin: EdgeInsets.only(top: 65.0, left: 5),
child: Text(
data['saldo'].toString(),
style: TextStyle(
color: Colors.white,
fontFamily: 'Poppins',
fontSize: 12.0,
),
),
)
],
)
],
),
],
);
}
}
答案 0 :(得分:0)
您正在使用名为getData()
的Future方法填充数据。
该错误可能是因为build
方法呈现屏幕时,数据仍然为空。您的方法getData()
需要一些时间才能完成。
您可以使用FutureBuilder解决这种情况: 阅读此https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
答案 1 :(得分:0)
我确定您知道此错误是因为数据为空。
我看不到您的代码中的错误,因此我认为该值来自数据库。您可以检查snapshot.data值吗?
setState(() {
data = snapshot.data;
});
谢谢