繁体   English   中英

当我尝试从 Firestore 检索时,数据显示为 null - flutter

[英]data are showing as null when i try to retrieve from firestore - flutter

我正在构建一个抽屉菜单,抽屉是我创建的有状态的 class,名为“NavigationDrawer”,它包含用户名和 email。 名称和 email 应从云 Firestore 中检索,如下所示:

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

class NavigationDrawer extends StatefulWidget {
  const NavigationDrawer({Key? key}) : super(key: key);

  @override
  State<NavigationDrawer> createState() => _NavigationDrawerState();
}

class _NavigationDrawerState extends State<NavigationDrawer> {
  User? user = FirebaseAuth.instance.currentUser;
  UserModel loggedInUser = UserModel();

  @override
  void initState() {
    super.initState();
    FirebaseFirestore.instance
        .collection("Users")
        .doc(user!.uid)
        .get()
        .then((value) => this.loggedInUser = UserModel.fromMap(value.data()));
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: SingleChildScrollView(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            buildHeader(context),
            buildMenuItems(context),
          ],
        ),
      ),
    );
  }

  Widget buildHeader(BuildContext context) => Container(
        color: Colors.purple,
        padding: EdgeInsets.only(
          top: MediaQuery.of(context).padding.top,
        ),
        child: Column(
          children: [
            CircleAvatar(
              radius: 52,
              backgroundImage: AssetImage("assets/DefaultImage.png"),
            ),
            SizedBox(height: 12),
            Text(
              "${loggedInUser.name}",
              style: TextStyle(fontSize: 20, color: Colors.white),
            ),
            Text("${loggedInUser.email}",
                style: TextStyle(fontSize: 17, color: Colors.white)),
            SizedBox(
              height: 12,
            )
          ],
        ),
      );

  Widget buildMenuItems(BuildContext context) => Container(
        padding: EdgeInsets.all(20),
        child: Wrap(
          runSpacing: 14,
          children: [
            ListTile(
              trailing: Icon(Icons.home_outlined),
              title: Text(
                'الصفحة الرئيسية',
                textAlign: TextAlign.right,
              ),
              onTap: () {},
            ),
            ListTile(
              trailing: Icon(Icons.flag_outlined),
              title: Text(
                "تحدياتي",
                textAlign: TextAlign.right,
              ),
              onTap: () {},
            ),
            ListTile(
              trailing: Icon(Icons.flag_circle_outlined),
              title: Text(
                'جميع التحديات',
                textAlign: TextAlign.right,
              ),
              onTap: () {},
            ),
            ListTile(
              trailing: Icon(Icons.settings_outlined),
              title: Text(
                'إعدادات الحساب',
                textAlign: TextAlign.right,
              ),
              onTap: () {},
            ),
            Divider(
              color: Colors.purple,
            ),
            ListTile(
              trailing: Icon(Icons.question_mark_outlined),
              title: Text(
                'عن التطبيق',
                textAlign: TextAlign.right,
              ),
              onTap: () {},
            ),
            ListTile(
              trailing: Icon(Icons.phone_outlined),
              title: Text(
                'اتصل بنا',
                textAlign: TextAlign.right,
              ),
              onTap: () {},
            )
          ],
        ),
      );
}

此导航 class 在名为“home_screen”的其他屏幕中调用,值显示为“null”我确定了集合名称并多次重新启动应用程序,但值仍显示为 null。 我还导入了必要的库,这里是 firestore 数据库:

在此处输入图像描述

当我第一次打开抽屉时,我登录调试器显示此错误:

E/flutter ( 4873): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: NoSuchMethodError: The method '[]' was called on null.
E/flutter ( 4873): Receiver: null
E/flutter ( 4873): Tried calling: []("uid")
E/flutter ( 4873): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5)
E/flutter ( 4873): #1      new UserModel.fromMap
package:athaddakapp/model/user_model.dart:24
E/flutter ( 4873): #2      _NavigationDrawerState.initState.<anonymous closure>
package:athaddakapp/screens/navigation_drawer.dart:26
E/flutter ( 4873): #3      _rootRunUnary (dart:async/zone.dart:1434:47)
E/flutter ( 4873): #4      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter ( 4873): <asynchronous suspension>
E/flutter ( 4873):

setState移动到then()的内部 ...类似于:

  @override
  void initState() {
    super.initState();
    FirebaseFirestore.instance
        .collection("Users")
        .doc(user!.uid)
        .get()
        .then((value) => setState(() => this.loggedInUser = UserModel.fromMap(value.data())));
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM