如何在我的 Flutter 应用中显示来自 Firebase 的用户数据?

2024-01-08

我是颤振新手。如何将用户数据从 Firebase 检索到我的个人资料页面?

我的 Firebase 数据包含姓名、电子邮件、血型和出生日期。我想将此数据检索到我的应用程序的个人资料页面。

这是我的个人资料页面代码:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:line_awesome_flutter/line_awesome_flutter.dart';
import '../Reminder/ui/theme.dart';

class ProfilePage extends StatefulWidget {
  const ProfilePage({super.key});

  @override
  State<ProfilePage> createState() => _ProfilePageState();
}

class _ProfilePageState extends State<ProfilePage> {
  final user = FirebaseAuth.instance.currentUser!;

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        //leading: IconButton(onPressed: (){}, icon: const Icon(Icons.arrow_back_ios_new),),
        centerTitle: true,
        title: Text(
          'Profile',
          style: headingStyle,
        ),
        backgroundColor: Get.isDarkMode ? Colors.grey[700] : Colors.white,
      ),
      body: SingleChildScrollView(
        child: Container(
          padding: const EdgeInsets.all(10),
          child: Column(
            children: [
              SizedBox(
                width: 120,
                height: 120,
                child: Image(image: AssetImage("images/profile.png")),
              ),
              const SizedBox(height: 50),
              Form(
                child: Column(
                  children: [
                    TextFormField(
                      decoration: InputDecoration(
                          prefixIconColor: Get.isDarkMode?Colors.black:Colors.white,
                          focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100), borderSide: BorderSide(color: Get.isDarkMode?Colors.white:Colors.black,)),
                          labelText: "Email",
                          prefixIcon: Icon(LineAwesomeIcons.envelope_1, color:  Get.isDarkMode?Colors.white:Colors.black),
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(100))),
                    ),
                    SizedBox(height: 10),
                    TextFormField(
                      decoration: InputDecoration(
                          prefixIconColor: Get.isDarkMode?Colors.black:Colors.white,
                          focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100), borderSide: BorderSide(color: Get.isDarkMode?Colors.white:Colors.black,)),
                          labelText: "Full Name",
                          prefixIcon: Icon(LineAwesomeIcons.user, color:  Get.isDarkMode?Colors.white:Colors.black),
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(100))),
                    ),
                    SizedBox(height: 10),
                    TextFormField(
                      decoration: InputDecoration(
                          prefixIconColor: Get.isDarkMode?Colors.black:Colors.white,
                          focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100), borderSide: BorderSide(color: Get.isDarkMode?Colors.white:Colors.black,)),
                          labelText: "Date of Birth",
                          prefixIcon: Icon(LineAwesomeIcons.baby_carriage, color:  Get.isDarkMode?Colors.white:Colors.black),
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(100))),
                    ),
                    SizedBox(height: 10),
                    TextFormField(
                      decoration: InputDecoration(
                          prefixIconColor: Get.isDarkMode?Colors.black:Colors.white,
                          focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100), borderSide: BorderSide(color: Get.isDarkMode?Colors.white:Colors.black,)),
                          labelText: "Blood Type",
                          prefixIcon: Icon(Icons.bloodtype, color:  Get.isDarkMode?Colors.white:Colors.black),
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(100))),
                    ),
                    SizedBox(height: 15,),
                    SizedBox(
                      width: 100,
                      child: MaterialButton(
                        onPressed: () {
                          FirebaseAuth.instance.signOut();
                        },
                        color: Colors.redAccent,
                        child: Text('SIGN OUT'),
                      ),
                    ),
                  ],
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

使用任一StreamBuilder or FutureBuilder, 获取数据firebase,并相应地显示它。

1.流构建器

当您想要不断监听更改,并且希望数据在不热重载/重启的情况下得到更新时

2. 未来建造者

当您只想获取一次文档并且不需要不断监听文档的变化时。

  1. 使用 StreamBuilder

     @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
              stream:  FirebaseFirestore
                       .instance
                       .collection('users')
                       .doc(FirebaseAuth.instance.currentUser!.uid) // ???? Your document id which is equal to currentuser
                       .snapshots(),
              builder:
                  (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
                if (snapshot.hasError) {
                  return const Text('Something went wrong');
                }
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return const Text("Loading");
                }
                Map<String, dynamic> data =
                    snapshot.data!.data()! as Map<String, dynamic>;
                return Text(data['fullName']); // ???? your valid data here
              },
            ),
          ),
        );
      }
    
  2. 使用 FutureBuilder

     @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
              child: FutureBuilder<DocumentSnapshot<Map<String, dynamic>>>(
            future: FirebaseFirestore.instance
                .collection('users')
                .doc(FirebaseAuth.instance.currentUser!.uid) // ???? Your document id which is equal to currentuser
                .get(),
            builder: (_, snapshot) {
              if (snapshot.hasError) return Text('Error = ${snapshot.error}');
              if (snapshot.connectionState == ConnectionState.waiting) {
                return const Text("Loading");
              }
              Map<String, dynamic> data = snapshot.data!.data()!;
              return Text(data['fullName']); //???? Your valid data here
            },
          )),
        );
      }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在我的 Flutter 应用中显示来自 Firebase 的用户数据? 的相关文章

  • 什么是“标量”查询?

    我正在使用 LLBLGEN 其中有一种方法可以将查询作为scalar query 谷歌搜索给了我一个定义scalar sub query 它们一样吗 标量查询是返回由一列组成的一行的查询
  • 如何让 pub build 在 dart 聚合物项目上使用源映射

    On a 飞镖聚合物项目 https www dartlang org polymer 当我进行调试时酒吧建设 https www dartlang org tools pub cmd pub build html像这样 pub build
  • 如何检查 postgres 的 psql 是否自动提交

    我使用的是 postgres 9 5 如何检查自动提交是否打开或关闭 我试过SHOW AUTOCOMMIT我在哪里得到的ERROR unrecognized configuration parameter autocommit 然后我做了一
  • Firebase Crashlytics 与 UncaughtExceptionHandler

    我集成了 Firebase Crashlytics 版本 2 9 1 来挖掘崩溃 以覆盖我的应用程序的性能和稳定性 如果应用程序有自己的 UncaughtExceptionHandler 则不会在 firebase crashlytics
  • Firestore 安全规则:在请求上使用 hasOnly 来检查是否仅更新特定字段

    我正在设置 Firestore 安全规则 但遇到一个问题 即我想使用 hasOnly 函数限制仅更新文档中的一个特定字段 问题是我使用模拟器不断得到 拒绝 结果 我肯定做了一些简单的错误 我试图防止有人可以更新文档中的其他字段update
  • 使用 Firebase orderByChild 进行不区分大小写的排序

    我正在使用 FirebaseRecyclerAdapter 来显示字符串列表 我的查询使用 orderByChild 结果首先按大写字母排序 如下所示 项目 1 项目 2 项目 3 aItem bItem zItem 如何使用 orderB
  • 无法构建 Objective-C 模块“Firebase”

    我收到此错误的原因是import Firebase 无法构建 Objective C 模块 Firebase Xcode 还抱怨 FirebaseAnalytics 说 找不到 FirebaseAnalytics FirebaseAnaly
  • 在 firebase 中,使用单独的端点对多对多关系进行建模是一个好主意吗?

    假设我有一个典型的用户和组数据模型 其中用户可以属于多个组 并且一个组可以拥有多个用户 在我看来 Firebase 文档 https www firebase com docs web guide structuring data html
  • FIND_IN_SET 具有多个值[重复]

    这个问题在这里已经有答案了 我想从数据库字段搜索多个值 以下是我的查询 SELECT FROM tablename WHERE FIND IN SET 12 13 15 15 category id 我如何搜索它对我不起作用 FIND IN
  • 社交对象 - 数据库结构、过滤、排序、可扩展性的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正在 ASP NET MVC 中构建通用企业社交网络平台 任何社交网站的主要特征之一是社会对象由用户显式 文本更新 照片 博客 视频等 或隐
  • 使用 AngularJS 将图像上传到 Firebase

    我有一个处理 剧集 的服务 创建 删除和更新它们 它看起来像这样 app service Episode firebase FIREBASE URL function firebase FIREBASE URL var ref new Fi
  • .Net 将 NULL 值从变量值插入 SQL Server 数据库

    也有类似的问题 但答案不是我想要的 如果引用为 NULL 或尚未分配值 我想将 NULL 值插入 SQL Server 数据库 目前我正在测试 null 它看起来像 String testString null if testString
  • 在 django 中创建“历史”类型模型的最佳方法是什么?

    我想为我的 Django 应用程序创建一个类似于 Django 管理员的 最近操作 的功能 以便存储其他模型的历史信息 例如 假设我有两个模型 分别称为 Book 和 Author 我想要第三个模型来存储信息 例如由谁以及何时对模型中的给定
  • 非关系型数据库系统

    还有哪些其他类型的数据库系统 我最近遇到了以非关系方式处理数据的 couchDB 这让我思考其他人正在使用哪些其他模型 所以 我想知道还有哪些其他类型的数据模型 我不是在寻找任何细节 只是想看看其他人是如何处理数据存储的 我的兴趣纯粹是学术
  • 检查 Firebase 邀请是否引导至 Play 商店

    当在 Android 上使用 Firebase 邀请并在应用程序启动时访问动态链接时 有没有办法知道用户是通过邀请刚刚安装了该应用程序还是已经安装了该应用程序 非常感谢 Borja 编辑 感谢 Catalin Morosan 的回答 事实证
  • 如何使用 Node.js 在 Firebase 中注册用户?

    PROBLEM 0 用户是在 Firebase 的身份验证系统中创建的 我在 身份验证 选项卡中看到它 1 但没有对数据库进行任何更改 2 页面似乎无限加载 3 控制台仅记录 Started 1 CODE router post regis
  • 将 firebase 框架添加到 ios 项目时出现链接器错误

    我一直在尝试将 firebase 框架添加到我的 ios 应用程序中 我按照这里的说明进行操作 https www firebase com docs ios quickstart html https www firebase com d
  • 按时间戳字段中的日期过滤结果

    我已经获得了一些帮助 但不确定为什么这不起作用 我正在尝试使用表单让用户过滤他们的活动 存储在数据库中 My code GET from 01 11 2013 GET to 25 11 2013 from DateTime createFr
  • Flutter 分析/构建在 GitHub 操作中失败

    当运行以下操作时 它会失败flutter analyze 如果我删除它 稍后会失败flutter build 这两个命令在本地都可以正常工作 我理解该消息 但无法理解包路径可能有什么问题 GitHub 操作错误 flutter analyz
  • firebase批量更新和onWrite触发同步

    我在同步两个 Firebase 云函数时遇到问题 第一个函数对多个文档执行批量更新 第二个函数由onWrite触发这些文档之一 为了便于说明 假设我有两个文档A and B 在两个单独的集合中 第一个云功能更新两个文档A and B有消防库

随机推荐