【问题标题】:New Flutter Cloud Firestore [duplicate]新的 Flutter Cloud Firestore [重复]
【发布时间】:2021-01-06 07:34:16
【问题描述】:

我又开始学习 Flutter(前一段时间开始学习但停止了)。您可以在下面找到我的代码。如果我在智能手机上运行该应用程序,则会出现错误:[core/no-app] No Firebase App['DEFAULT'} has created - call Firebase.initializeApp()。我阅读了文档,但由于我使用的是最新版本 firebase_core: ^0.5.0, firebase_auth: ^0.18.0+1, cloud_firestore: ^0.14.0+2 似乎文档还没有完成,或者我没有得到它。我需要在哪里初始化那个?为什么这还不够:CollectionReference users = FirebaseFirestore.instance.collection('users');

timeline.dart(代码大部分来自flutter入门):

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:example/widgets/header.dart';
import 'package:example/widgets/progress.dart';

class Timeline extends StatefulWidget {
  @override
  _TimelineState createState() => _TimelineState();
}

class _TimelineState extends State<Timeline> {
  @override
  void initState() {
    // getUserById();
    super.initState();
  }
   
  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('users');
    return StreamBuilder<QuerySnapshot>(
      stream: users.snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text('Something went wrong');
        }

        if (snapshot.connectionState == ConnectionState.waiting) {
          return Text("Loading");
        }

        return new ListView(
          children: snapshot.data.documents.map((DocumentSnapshot document) {
            return new ListTile(
              title: new Text(document.data()['username']),
              subtitle: new Text(document.data()['posts_count']),
            );
          }).toList(),
        );
      },
    );
  }
}

这是我的 main.dart 代码

    import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'pages/home.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.red,
        accentColor: Colors.blue,
      ),
      home: Home(),
    );
  }
}

非常感谢您!

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    在你的 main.dart 中,添加以下内容

    void main() async {
      WidgetsFlutterBinding.ensureInitialized(); //add this
      await Firebase.initializeApp(); //initialize here
      runApp(MyApp());
    }
    

    访问新的docs,了解有关使用 firebase 包的更多信息

    【讨论】:

    • 你太棒了!!!这就是解决方案。 :)) 我不确定在哪里添加 Firebase.initializeapp();但现在我知道了。太感谢了!非常感谢。
    • 不客气!请将此标记为答案,以帮助其他有类似问题的人。
    【解决方案2】:

    您可以像这样修改您的 MyApp 小部件,以使其正常工作。

    class MyApp extends StatelessWidget {
          // This widget is the root of your application.
          @override
          Widget build(BuildContext context) {
            return MaterialApp(
              home: FutureBuilder(
                future: Firebase.initializeApp(),
                builder: (context, snapshot) {
                  if (snapshot.connectionState == ConnectionState.done) {
                    if (snapshot.hasError) {
                      print(snapshot.error.toString());
                      return Center(child: Text('Error'));
                    } else {
                      // ! RETURN THE SCREEN YOU WANT HERE
                      return Timeline();
                    }
                },
              ),
            );
          }
        }
    

    【讨论】:

    • 谢谢SLendeR。 :))) 我确信您的解决方案也可以,但我在 home.dart (home()) 内部有一个页面路由器。如果我返回 home() 而不是时间线,它也会起作用吗?因为时间线只是另一个页面。
    • 是的,它会起作用,您可以在将 Firesbase 与 Flutter 结合使用时使用此文档,它会帮助您做很多事情; firebase.flutter.dev/docs/overview
    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 2022-01-17
    • 2020-07-02
    • 2020-05-01
    • 2020-04-05
    • 2019-02-22
    • 2021-07-31
    • 2019-06-26
    相关资源
    最近更新 更多