Метод '[]' был вызван на нуль - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу получить данные из Firestore для отображения в моем приложении, но если я запускаю свое приложение, я получаю сообщение об ошибке, подобное этому:

Метод '[]' был вызван для нуля , Получатель: null Пробный вызов:

Это происходит, когда я использую 'data [' firstname], а также 'data [saldo]. toString (), on child 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 голосов
/ 28 апреля 2020

Я уверен, что вы знаете, что получаете эту ошибку, потому что данные равны нулю.

Я не вижу ошибок в вашем коде, поэтому я думаю, что значение исходит из базы данных. Можете ли вы проверить значение snapshot.data?

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

Спасибо

0 голосов
/ 28 апреля 2020

Вы заполняете свои данные методом Future, называемым getData().

Возможно, ошибка в том, что когда метод build отображает ваш экран, данные по-прежнему равны нулю. Ваш метод getData() займет некоторое время, чтобы закончить sh.

Вы можете работать с FutureBuilder, чтобы решить эту ситуацию: Прочитайте это https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...