Невозможно изменить переменную загрузки во 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).

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

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

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

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

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

Источник: ledsshop.ru

Стиль жизни - Здоровье!