方法'[]'在null上被调用

时间:2020-04-27 23:34:58

标签: flutter

我想从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,
                    ),
                  ),
                )
              ],
            )
          ],
        ),
      ],
    );
  }
}

2 个答案:

答案 0 :(得分:0)

您正在使用名为getData()的Future方法填充数据。

该错误可能是因为build方法呈现屏幕时,数据仍然为空。您的方法getData()需要一些时间才能完成。

您可以使用FutureBuilder解决这种情况: 阅读此https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

答案 1 :(得分:0)

我确定您知道此错误是因为数据为空。

我看不到您的代码中的错误,因此我认为该值来自数据库。您可以检查snapshot.data值吗?

setState(() {
  data = snapshot.data;
});

谢谢