首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法更改加载变量(以“颤振”表示)

无法更改加载变量(以“颤振”表示)
EN

Stack Overflow用户
提问于 2020-08-31 17:01:11
回答 2查看 77关注 0票数 0

加载变量有问题。

我有一个欢迎屏幕,通过Firebase用户,我得到了用户UID,从一个集合,我得到了字段名。

因此,我有以下代码:

代码语言:javascript
运行
复制
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(),
    );
  }
}

我得到这个函数的信息:

代码语言:javascript
运行
复制
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;
      });
   }
  }

然后在构建中调用来填充信息,并使用Name变量(_nombre)填充文本Widget。

我遇到的问题是:

════════异常被小部件库═══════════════════════════════════捕获以下断言被抛出构建InitialScreen(脏,状态:_InitialScreenState#1f7ab):必须向文本小部件提供一个非空字符串。“包:flutter/src/widget/text.dart”:失败的断言:第360行pos 10:'data != null'

当我检查问题在哪里时,我发现它在文本Widget上,我假设问题是它正在从Firebase加载信息,它仍然没有准备好,它显示了一个红色的屏幕,但在5秒内它就把它拿走了。

我使用_isLoading变量来检查它是否正在执行来自Firebase的信息接收,我希望在填充信息时显示一个循环进度栏,或者在最坏的情况下至少不显示红色屏幕,我可以做什么?

FYI这个红色屏幕最多显示2秒或5秒,然后所有的东西都正确加载

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-12 11:11:27

UPDATE:我设法修复了它,因为在初始构建过程中,应用程序wa在Firebase的文本上寻找一个值,所以我只在Initial中添加了一个字符串来表示加载,并且它成功了。

谢谢

票数 0
EN

Stack Overflow用户

发布于 2020-08-31 17:43:29

首先,您没有使用CircularProgressIndicator,也没有正确地使用_isLoading。

body: _isLoading ? Center(child: CircularProgressIndicator()) : Container(...)

这就是您必须如何使用进度指示符。上面的代码呈现一个文本小部件,数据在一段时间后传递,这就是红色屏幕的原因。

您还应该从build方法中删除_isLoading。这是没用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63675095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档