【问题标题】:Flutter Stream Builder - Stream Getting nullFlutter Stream Builder - 流获取 null
【发布时间】:2019-05-14 19:19:47
【问题描述】:

我想在构建小部件之前从两个流中获取数据。第一个流为数据库路径提供 uid。我无法压缩这两个流,因为我需要先获取 uid 才能构建第二个数据。

我尝试使用嵌套流但不断出错

在 null 上调用了方法“[]”。 接收方:空 尝试调用:

我的代码已给出。我该如何解决这个问题?

class _DiabeticaState extends State<Diabetica> {

 @override
 Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        elevation: 0,
        title: Text(
          "Diabetica",
          style: TextStyle(
              color: Colors.black, fontWeight: FontWeight.w400, fontSize: 22),
        ),
        centerTitle: true,
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.monetization_on),
            onPressed: () {},
          ),
        ],
      ),
      body: StreamBuilder(
        stream: FirebaseAuth.instance.onAuthStateChanged,
        builder: (BuildContext context, user) {
          if (user.hasData) {
            String name = "";
            String photoUri = "";
            String u = "";
            if (user.connectionState == ConnectionState.active) {
              name = user.data.displayName;
              photoUri = user.data.photoUrl;
              u = user.data.uid;

              return StreamBuilder(
                stream: Firestore.instance.document('users/$u').snapshots(),
                builder: (BuildContext context, db) {
                  if (db.hasData) {
                    double age = 0;
                    double height = 0;
                    double weight = 0;
                    double a1c = 0;
                    double bmr = 0;
                    if (db.connectionState == ConnectionState.active) {
                        age = db.data['age'];
                        height = db.data['height'];
                        weight = db.data['weight'];
                        a1c = db.data['a1c'];
                        bmr = db.data['bmr'];

                      return Container();
                    }
                    return Container(

                    );
                  }
                  return new LoadingScreen();
                },
              );
            }
            return new LoadingScreen();
          }
          return new LoginAlter();
        },
      ),
    );
   }

 }

【问题讨论】:

  • 是的,我有.. 两个流都是不同的类型,我将首先加载 uid 以从 firestore 获取用户数据
  • 在构建小部件之前,我需要获取 uid。
  • 我正在采取另一种方法。我将流划分到需要它们的小部件。如果数据为空,则小部件可见性将为空

标签: flutter


【解决方案1】:

在您的情况下,由于您的实施,使用此 CombineLatestStream.combine2 不是正确的方法。您是否尝试在第二个 StreamBuilder 上设置 initialData 属性?

例如,试试看这里:StreamBuilder initialData

【讨论】:

    猜你喜欢
    • 2018-11-05
    • 2020-07-30
    • 2021-09-17
    • 2019-10-01
    • 2020-06-07
    • 2019-11-12
    • 2019-07-20
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多