Вопросы

Невозможно изменить переменную загрузки во Flutter

У меня проблема с загружаемой переменной.

У меня есть экран приветствия, который проходит через Firebase User. Я получаю UID пользователя, а из коллекции я получаю имя поля.

Итак, у меня есть следующий код:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

import '../widgets/app_drawer.dart';
import '../widgets/footer.dart';

class InitialScreen extends StatefulWidget {
  static const routeName = '/initial';  

  @override
  _InitialScreenState createState() => _InitialScreenState();
}



class _InitialScreenState extends State<InitialScreen> {
   final _auth = FirebaseAuth.instance;
    var _nombre;
    var _isLoading = false;

 **void inputData() async {
   try {
     setState(() {
       _isLoading = true;
     });
      final FirebaseUser user = await _auth.currentUser();
      Firestore.instance
          .collection('users')
          .document(user.uid)
          .get()
          .then((value) {
        setState(() {
          _nombre = value['nombre']; 
          _isLoading = false;       
        });
      });
       setState(() {
          _isLoading = false;
        });
   } catch (err) {
        print(err);
      setState(() {
        _isLoading = false;
      });
   }
  }**
  

  @override
  Widget build(BuildContext context) {
    inputData();
    _isLoading = false;
    return  Scaffold(
      drawer: AppDrawer(),
      appBar: AppBar(
        title: Text('Macabeos'),
      ),
      body: _isLoading ? Text(_nombre) : Container(
        alignment: Alignment.topCenter,
        child: SingleChildScrollView(
                  child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: CircleAvatar(
                  backgroundImage: NetworkImage(
                      'https://firebasestorage.googleapis.com/v0/b/flutter-chat-8b2e0.appspot.com/o/others%2Ftaber.png?alt=media&token=0381a057-bf69-4885-8690-f25e6f1abfe0'),
                  radius: 80.50,
                  backgroundColor: Colors.transparent,
                ),
              ),
              Divider(),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 60.0),
                child: Text(
                  'Bienvenido Hermano:',
                  style: TextStyle(fontSize: 18),
                ),
              ),
              Divider(),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 60.0),
                child: Text(
                  _nombre,
                  style: TextStyle(
                    fontSize: 18,
                    fontWeight: FontWeight.bold,
                  ),
                ),
              ),
              Divider(),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 60.0),
                child: Text(
                    'Ha Ingresado a MacabeosApp, en esta app manejara su Servicio con el Ministerio Macabeos.',
                    style: TextStyle(fontSize: 18)),
              )
            ],
          ),
        ),
      ),
      bottomNavigationBar: Footer(),
    );
  }
}

Я получаю информацию с помощью этой функции:

void inputData() async {
   try {
     setState(() {
       _isLoading = true;
     });
      final FirebaseUser user = await _auth.currentUser();
      Firestore.instance
          .collection('users')
          .document(user.uid)
          .get()
          .then((value) {
        setState(() {
          _nombre = value['nombre']; 
          _isLoading = false;       
        });
      });
       setState(() {
          _isLoading = false;
        });
   } catch (err) {
        print(err);
      setState(() {
        _isLoading = false;
      });
   }
  }

А затем вызвал сборку для заполнения информации и заполнения текстового виджета переменной имени (_nombre).

Читать:
Тип аргумента "Объект?" не может быть назначен типу параметра «Карта‹ динамический, динамический ›». GetX

Проблема, которую я получаю:

════════ Исключение, обнаруженное библиотекой виджетов ══════════════════════════════ ════ Следующее утверждение было выдано при построении InitialScreen (dirty, state: _InitialScreenState # 1f7ab): непустая строка должна быть предоставлена ​​текстовому виджету. ‘package: flutter / src / widgets / text.dart’: Неудачное утверждение: строка 360, позиция 10: ‘data! = null’

И когда я проверил, в чем проблема, я обнаружил, что он находится в текстовом виджете, и я предполагаю, что проблема в том, что он загружает информацию из Firebase, но все еще не готов, и он отображает красный экран, но через 5 секунд он забирает это.

Я использовал переменную _isLoading, чтобы проверить, выполняет ли она прием информации от Firebase, и я хочу отображать круговую полосу выполнения, пока информация заполняется, или, в худшем случае, по крайней мере, не отображать красный экран, что я мог сделать?

К вашему сведению, этот красный экран отображается максимум 2 или 5 секунд, после чего все загружается правильно

Похожие записи

Есть ли способ группировать коммиты в Git?

admin

Как я могу разрешить документам в сегменте доступ к другим документам в этом же сегменте без разрешения общего доступа?

admin

Подмножество данных по окну временного интервала для каждой строки в кадре данных после использования group_by ()

admin

Почему допустимо переплетать операторы switch / for / if в C / C ++?

admin

Composer (Airflow) DAG RunID конфликт в GCP

admin

Объединить несколько столбцов словаря / списка в новые столбцы и строки

admin