【问题标题】:Saving a value as a string with Flutter Firestore Firebase使用 Flutter Firestore Firebase 将值保存为字符串
【发布时间】:2019-03-31 16:16:47
【问题描述】:

我想将 Cloud Firestore 中的值保存为字符串。我正在使用 Flutter 和 Dart。我已经能够在使用 MaterialepageRoute 构建页面时保存它:

        MaterialPageRoute(
        builder: (context) => MainScreen(
              currentUserId: firebaseUser.uid,
              currentUserGender: document['gender'],
              currentUserPreference: document['preference'],
            )),

但这不是我所有页面的选项,所以我必须寻找其他东西。我想从我的 Firestore 数据库中获取值,然后将其保存为字符串,因为我想:

if (currentUserGender == 'male') {
//then do something 
}

我不知道如何做到这一点,我曾考虑过使用一个类,也许是 Firebase 的“get”功能,但没有一个有效。我不太确定如何执行此操作,因此感谢您提供任何帮助。我能够获得当前用户。这是我的数据库的图片:

https://imgur.com/KL7HX6P

提前致谢。

【问题讨论】:

  • 您在哪里遇到问题? - 获取文档快照,将其值保存在本地地图变量中并随意使用。
  • 我的问题是,我不知道它是如何实现的。你能分享一个代码sn-p吗?谢谢
  • 添加了代码。

标签: firebase dart flutter google-cloud-firestore


【解决方案1】:

一个小例子:获取单个文档字段。将代码中的集合和文档名称替换为您自己的名称。

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

class GetUser extends StatefulWidget {
  @override
  _GetUserState createState() => _GetUserState();
}

class _GetUserState extends State<GetUser> {
  Map<String, dynamic> userDetails = {};

  Future<Null> getUser() async {
    await Firestore.instance
        .collection('users') // Your Collections Name
        .document('eMAE4XF9cTYS12MpfOuWBW4P2WH3')  // Your user Document Name
        .get()
        .then((val) {
      userDetails.addAll(val.data);
    }).whenComplete(() {
      print('Data Fetched');
      setState(() {});
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            RaisedButton(
              textColor: Colors.white,
              color: Theme.of(context).accentColor,
              onPressed: () async {
                await getUser();
              },
              child: Text('Get User Detail from Cloud'),
            ),
            userDetails.length > 0
                ? Column(
                    children: <Widget>[
                      Text('${userDetails['gender']}'),
                      Text('${userDetails['id']}'),
                      Text('${userDetails['nickname']}'),
                      userDetails['gender'] == 'male'
                          ? Text('Its Boy')
                          : Text('Girl'),
                    ],
                  )
                : Text('No user Data, Please Fetch'),
          ],
        ),
      ),
    );
  }
}

【讨论】:

  • 你好,这总是返回 null。这是我目前拥有的。对不起,迟到的答案。 pastebin.com/gWUe9EE1
  • 如果它即将到来的 Null 意味着 - 您的集合名称或文档名称不正确 - 请检查文档名称 - 尝试硬编码 Firestore 数据库中的值,然后您将获得他的值。这意味着这里的变量 currentUserId 没有正确的值。
  • 我已经用数据库检查了上面的代码 - 工作正常。
  • 感谢您的帮助,先生,但我无法让它以这种方式工作。
  • 即使只使用您提供的代码 sn-p 制作一个完整的页面,它仍然为空。我收到调试错误:“在 null 上调用了 getter 'keys'”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2019-11-15
  • 2019-08-19
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多