【问题标题】:Flutter on iOS: Despite calling Firebase.initializeApp() on a future builder, app is not initializediOS 上的 Flutter:尽管在未来的构建器上调用 Firebase.initializeApp(),但应用程序未初始化
【发布时间】:2021-12-01 03:42:59
【问题描述】:

标题说明了一切。以下是相关类及其各自的代码。

main.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
...

当我尝试在安卓模拟器上运行应用程序时,即使是在安卓设备上,它也能正常运行。但是,在 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。请帮忙!

【问题讨论】:

    标签: ios firebase flutter


    【解决方案1】:

    你试过了吗?

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

    但根据documentation,它在 main(){}

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

    【讨论】:

    • 我以前没有,现在做了,而且成功了!尽管它在 main 上不起作用,但仅在 init 中起作用。谢谢!
    • 不客气。
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2011-03-03
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多