【发布时间】:2021-03-14 01:26:22
【问题描述】:
我的main.dart:
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:ruum/screens/login_screen.dart';
import 'package:ruum/screens/ruum_screen.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
// This widget is the root of your application.
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
/* @override
void initState() {
// TODO: implement initState
super.initState();
Firebase.initializeApp().whenComplete(() => null);
} */
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, appSnapshot) => MaterialApp(
title: 'ruum',
theme: ThemeData(
primarySwatch: Colors.red,
backgroundColor: Colors.blueGrey,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, userSnapshot) {
if (userSnapshot.hasData) {
return RuumScreen();
}
return LoginScreen();
},
),
routes: {
RuumScreen.routeName: (ctx) => RuumScreen(),
},
),
);
}
}
我正在使用 FutureBuilder,因为稍后我将在代码中使用 Future。无论如何我都会收到此错误。
[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
[38;5;244mThe following FirebaseException was thrown building FutureBuilder<FirebaseApp>(dirty, state: _FutureBuilderState<FirebaseApp>#19dc7):[39;49m
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
[38;5;244mThe relevant error-causing widget was[39;49m
[38;5;248mFutureBuilder<FirebaseApp>[39;49m
[38;5;244mWhen the exception was thrown, this was the stack[39;49m
[38;5;244m#0 MethodChannelFirebase.app[39;49m
[38;5;244m#1 Firebase.app[39;49m
[38;5;244m#2 FirebaseAuth.instance[39;49m
[38;5;248m#3 _MyAppState.build.<anonymous closure>[39;49m
[38;5;244m#4 _FutureBuilderState.build[39;49m
[38;5;244m...[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m
这可能是什么原因造成的?我已将所有内容添加到 gradle 文件中,并将配置文件添加到 android 目录中。
edit:在 Future 解析后,LoginScreen 会加载。
【问题讨论】:
-
也许用
if-else来检查appSnapshot是否完成? -
我在考虑,但是 futrebuilder 应该处理异步问题。