簡體   English   中英

iOS 上的 Flutter:盡管在未來的構建器上調用 Firebase.initializeApp(),應用程序未初始化

[英]Flutter on iOS: Despite calling Firebase.initializeApp() on a future builder, app is not initialized

標題說明了一切。 以下是相關類及其各自的代碼。

主要.dart

... //Imports
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => NotificationService())
      ],
      child: MaterialApp(
        localizationsDelegates: [
          GlobalMaterialLocalizations.delegate,
        ],
        supportedLocales: [
          const Locale('en', ''),
          const Locale('pt', 'BR'),
        ],
        home: MyHomePage(),
        debugShowCheckedModeBanner: false,
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: StartPage(),
      ),
    );
  }
}

startPage.dart

... //Imports
class StartPage extends StatelessWidget {
  Future<void> init(BuildContext context) async {
    Firebase.initializeApp(); //Firebase initialization
    await Provider.of<NotificationService>(context, listen: false).init();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: init(context),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting)
            return LoadingSpinner();
          else {
            return StreamBuilder<User?>(
              stream: AuthService().userChanges,
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return LoadingSpinner();
                } else {
                  print(snapshot.hasData);
                  return snapshot.hasData ? MainScreen() : AuthPage();
                }
              },
            );
          }
        });
  }
}

pubspec.yaml

...
version: 1.0.0+1

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  flutter_spinkit: ^5.1.0
  brasil_fields: ^1.1.4
  image_picker: ^0.8.4+2
  provider: ^6.0.0
  firebase_auth: ^3.1.1
  cloud_firestore: ^2.5.3
  firebase_storage: ^10.0.3
  firebase_core: ^1.7.0
  firebase_messaging: ^10.0.7
  flutter_typeahead: ^3.2.1
  rxdart: ^0.27.2
  table_calendar: ^3.0.2
  flutter_form_builder: ^6.1.0+1
  http: ^0.13.4
  flutter_localizations: 
    sdk: flutter
    version: ^0.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter
...

當我嘗試在 android 模擬器上運行該應用程序時,即使在 android 設備上,它也能正常運行。 但是在iOS模擬器上,顯示如下錯誤:

[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

即使我在異步方法上調用 startPage.dart 上的 Firebase.initializeApp。 請幫忙!

你試過這個嗎?

    Future<void> init(BuildContext context) async {
       WidgetsFlutterBinding.ensureInitialized();//Add this line
       Firebase.initializeApp(); //Firebase initialization
       await Provider.of<NotificationService>(context, listen: false).init();
  }

但根據文檔,它在 main(){}

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(App());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM