Jam*_*mad 7 android dart firebase flutter google-cloud-firestore
我刚刚按照迁移指南https://firebase.flutter.dev/docs/migration将 FireBase 插件升级到最新版本,并开始注意到每当我进行热重载时,我的应用程序都会进行热重启并返回到初始路线。首先我认为这可能是 Android Studio 问题,所以我也尝试通过命令提示符和 VS code,但结果相同。我搜索了与该主题相关的旧 Stackoverflow 问题,但找不到任何可以解决该问题的内容。\n我正在复制下面的代码。\nPS:我对 Flutter 还很陌生,这是我在 stackoverflow 中遇到的第一个问题。
\n非常感谢任何帮助。\n编辑:刚刚调试它并发现执行热重载时它会返回到 runApp(...) 。
\n主程序.dart
\nvoid main() async {\n String authMethod;\n WidgetsFlutterBinding.ensureInitialized();\n SharedPreferenceService localStorage = SharedPreferenceService();\n authMethod = await localStorage.getAuthMode();\n print("Authentication Mode $authMethod");\n setupLocator();\n\n\n runApp(\n DevicePreview(\n enabled: false,//kReleaseMode,\n builder: (context)=>AppInitialization())\n );\n}\nRun Code Online (Sandbox Code Playgroud)\n应用程序初始化.dart
\nclass AppInitialization extends StatelessWidget {\n final Future<FirebaseApp> _initialization = Firebase.initializeApp();\n @override\n Widget build(BuildContext context) {\n return FutureBuilder(\n future: _initialization,\n builder: (context, snapshot) {\n if (snapshot.hasError) {\n return Center(\n child: Container(\n child: Text(\'Unable to Initialize FireBase\'),\n ),\n );\n }\n if (snapshot.connectionState == ConnectionState.done) {\n print("======= F I R E B A S E A P P ========");\n return LocalGroceryOnline();\n }\n return Center(\n child: SizedBox(\n height: 40,\n width: 40,\n child: CircularProgressIndicator(\n strokeWidth: 2.0,\n valueColor: AlwaysStoppedAnimation<Color>(Colors.redAccent, )),\n ),\n );\n\n });\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n本地杂货在线.dart
\nclass LocalGroceryOnline extends StatelessWidget {\n final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();\n @override\n Widget build(BuildContext context) { \n return MultiProvider (\n providers: [\n Provider<FirebaseAuthService>(create: (_) => FirebaseAuthService()),\n Provider<SignInHelperService>(create: (_) => SignInHelperService()),\n Provider<SharedPreferenceService>(create: (_) => SharedPreferenceService()),\n ChangeNotifierProvider<CartModel>(create: (_) => CartModel()),\n ChangeNotifierProvider<UserModel>(create: (_) => UserModel()),\n ChangeNotifierProvider<ProductModel>(create: (_) => ProductModel()),\n ChangeNotifierProvider<cat.Category>(create: (_) => cat.Category()),\n ChangeNotifierProvider<AppSetting>(create: (_) => AppSetting()),\n ChangeNotifierProvider<ValueNotifier<bool>>(create: (_) => ValueNotifier<bool>(false),),\n ChangeNotifierProvider<ValueNotifier<int>>(create: (_) => ValueNotifier<int>(0),)\n\n ],\n child: MaterialApp(\n debugShowCheckedModeBanner: false,\n title: \'Online Local Grocery\',\n locale: DevicePreview.of(context).locale,\n builder: DevicePreview.appBuilder,\n theme: ThemeData(\n primaryColor: Colors.white,\n fontFamily: \'Montserrat\',\n appBarTheme: AppBarTheme(elevation: 0.0), //This is important\n\n ),\n initialRoute: AuthWidget.id,\n navigatorKey: navigatorKey,\n\n onGenerateRoute: RouteGenerator.generateRoute,\n //onGenerateInitialRoutes: InitialRouteGenerator.generateRoute(),\n )\n ,\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n路线生成器.dart
\nclass RouteGenerator {\n static Route<dynamic> generateRoute(RouteSettings settings) {\n final args = settings.arguments;\n\n switch (settings.name) {\n case AuthWidget.id:\n return MaterialPageRoute(builder: (_) => AuthWidget());\n\n case SignUpSelectionScreen.id:\n return MaterialPageRoute(builder: (_) => SignUpSelectionScreen());\n case SignupForm.id:\n return MaterialPageRoute(builder: (_) => SignupForm());\n case LoginView.id:\n return MaterialPageRoute(builder: (_) => LoginView());\n case HomePage.id:\n return MaterialPageRoute(builder: (_) => HomePage());\n case MainPage.id:\n if (args.runtimeType == MainCategory) {\n return MaterialPageRoute(\n builder: (_) => MainPage(\n mainCategory: args,\n ));\n }\n return _errorRoute();\n case ProductDetail.id:\n if (args.runtimeType == SelectedProductArguments) {\n return MaterialPageRoute(\n builder: (_) => ProductDetail(\n selectedProductArguments: args,\n ));\n }\n return _errorRoute();\n case CheckOutScreen.id:\n return MaterialPageRoute(builder: (_) => CheckOutScreen());\n case Admin.id:\n return MaterialPageRoute(builder: (_) => Admin());\n case ScrapBoard.id:\n return MaterialPageRoute(builder: (_) => ScrapBoard());\n case ProductAdminView.id:\n return MaterialPageRoute(builder: (_) => ProductAdminView());\n case DeliveryAddressView.id:\n return MaterialPageRoute(builder: (_) => DeliveryAddressView());\n case PaymentView.id:\n return MaterialPageRoute(builder: (_) => PaymentView());\n case OrderProcessingView.id:\n return MaterialPageRoute(builder: (_) => OrderProcessingView());\n case MyOrdersView.id:\n return MaterialPageRoute(builder: (_) => MyOrdersView());\n case MyOrderDetails.id:\n if (args.runtimeType == Order) {\n return MaterialPageRoute(builder: (_) => MyOrderDetails(\n order: args,\n )\n );\n }\n return _errorRoute();\n\n default:\n // If there is no such named route in the switch statement, e.g. /third\n return _errorRoute();\n }\n }\n\n static Route<dynamic> _errorRoute() {\n return MaterialPageRoute(builder: (_) {\n return Scaffold(\n appBar: AppBar(\n title: Text(\'Error\'),\n ),\n body: Center(\n child: Text(\'ERROR\'),\n ),\n );\n });\n }\n}\n\nclass InitialRouteGenerator {\n static Route<dynamic> generateRoute(RouteSettings settings) {\n bool _firstTimeAppUsed;\n final localStorage = new SharedPreferenceService();\n localStorage.isFirstTimeAppUsed().then((bool value) {\n if (value == true) {\n _firstTimeAppUsed = true;\n }\n });\n if (_firstTimeAppUsed) {\n return MaterialPageRoute(builder: (_) => SignUpSelectionScreen());\n }\n return MaterialPageRoute(builder: (_) => HomePage());\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nAuthWidget.dart
\nclass AuthWidget extends StatelessWidget {\n static const id = "auth_widget";\n\n @override\n Widget build(BuildContext context) {\n print("Auth Widget...");\n final authService =\n Provider.of<FirebaseAuthService>(context, listen: false);\n final userModel = Provider.of<UserModel>(context, listen: false);\n final signInHelperService = Provider.of<SignInHelperService>(context, listen: false);\n\n return StreamBuilder(\n stream: authService.onAuthStateChanged,\n builder: (context, snapshot) {\n if (snapshot.connectionState == ConnectionState.active) {\n print ("INSIDE AUTH WIDGET");\n final user = snapshot.data;\n if (user != null) {\n print("${user.uid} ${user.userName} ${user.photoUrl}");\n userModel.user = user;\n return StreamBuilder(\n stream: FirebaseFirestore.instance\n .collection(\'users\')\n .doc(user.uid)\n .get().asStream(),\n builder: (context, userSnapshot) {\n if (userSnapshot.hasData && snapshot.connectionState == ConnectionState.active) {\n final userDocument = userSnapshot.data;\n if (userDocument != null) {\n print("------ Data Found -------");\n AppUser user = AppUser.fromMap(userDocument);\n //bool signUpComplete = userDocument["signUpComplete"];\n bool signUpComplete = user.signUpComplete;\n if (signUpComplete == null) signUpComplete = false;\n if (!signUpComplete) {\n print("userModel.user UID ${userModel.user.uid}");\n return SignupForm();\n } else {\n AppUser user2 = AppUser.fromMap(userDocument);\n userModel.user = user2;\n print(\'User Level ..... ${userModel.user.userLevel}\');\n signInHelperService.getAndUpdateDeviceToken(user2);\n\n return HomePage(); //MainPage();\n }\n }\n }\n return emptyScaffoldWithProgress();\n });\n }\n return SignUpSelectionScreen();\n }\n return emptyScaffoldWithProgress();\n });\n }\n\n Scaffold emptyScaffoldWithProgress() {\n return Scaffold(\n body: Center(\n child: SizedBox(\n height: 90,\n width: 90,\n child: CircularProgressIndicator(\n strokeWidth: 5.0,\n valueColor: AlwaysStoppedAnimation<Color>(Colors.redAccent)),\n ),\n ),\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n扑动医生-v
\n[\xe2\x88\x9a] Flutter (Channel stable, 1.22.4, on Microsoft Windows [Version 10.0.19041.630], locale en-US)\n \xe2\x80\xa2 Flutter version 1.22.4 at C:\\src\\flutter\n \xe2\x80\xa2 Framework revision 1aafb3a8b9 (3 weeks ago), 2020-11-13 09:59:28 -0800\n \xe2\x80\xa2 Engine revision 2c956a31c0\n \xe2\x80\xa2 Dart version 2.10.4\n\n\n[\xe2\x88\x9a] Android toolchain - develop for Android devices (Android SDK version 29.0.3)\n \xe2\x80\xa2 Android SDK at C:\\Users\\Jamal\\AppData\\Local\\Android\\sdk\n \xe2\x80\xa2 Platform android-29, build-tools 29.0.3\n \xe2\x80\xa2 Java binary at: C:\\Android\\Android Studio\\jre\\bin\\java\n \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)\n \xe2\x80\xa2 All Android licenses accepted.\n\n[\xe2\x88\x9a] Android Studio (version 4.0)\n \xe2\x80\xa2 Android Studio at C:\\Android\\Android Studio\n \xe2\x80\xa2 Flutter plugin version 47.1.2\n \xe2\x80\xa2 Dart plugin version 193.7361\n \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)\n\n[\xe2\x88\x9a] VS Code (version 1.51.1)\n \xe2\x80\xa2 VS Code at C:\\Users\\Jamal\\AppData\\Local\\Programs\\Microsoft VS Code\n \xe2\x80\xa2 Flutter extension version 3.17.0\n\n[\xe2\x88\x9a] Connected device (1 available)\n \xe2\x80\xa2 Android SDK built for x86 (mobile) \xe2\x80\xa2 emulator-5554 \xe2\x80\xa2 android-x86 \xe2\x80\xa2 Android 10 (API 29) (emulator)\n\n\xe2\x80\xa2 No issues found!\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2503 次 |
| 最近记录: |