Flutter: приложение продолжает возвращаться к исходному маршруту после горячей перезагрузкиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Flutter: приложение продолжает возвращаться к исходному маршруту после горячей перезагрузки

Сообщение Anonymous »


Я только что обновил плагины FireBase до последней версии в соответствии с руководством по миграции https://firebase.flutter.dev/docs/migration и начал замечать, что всякий раз, когда я делаю горячую перезагрузку, мое приложение выполняет горячий перезапуск и возвращается к исходному маршруту. . Сначала я подумал, что это может быть проблема с Android Studio, поэтому я попробовал использовать командную строку и код VS, но результат тот же. Я искал старые вопросы Stackoverflow, связанные с этой темой, но не смог найти ничего, что могло бы решить проблему. Я копирую свой код ниже. PS: Я новичок во Flutter, и это мой первый вопрос в stackoverflow.

Будем благодарны за любую помощь. РЕДАКТИРОВАТЬ: только что отладил и обнаружил, что он возвращается к runApp(...) при выполнении горячей перезагрузки.

main.dart

void main() async { Строка authMethod; ВиджетыFlutterBinding.ensureInitialized(); SharedPreferenceService localStorage = SharedPreferenceService(); authMethod = ждут localStorage.getAuthMode(); print("Режим аутентификации $authMethod"); установкаЛокатор(); запустить приложение( Девицепревью( включено: false, //kReleaseMode, строитель: (контекст)=>AppInitialization()) ); } AppInitialization.dart

класс AppInitialization расширяет StatelessWidget { Final Future _initialization = Firebase.initializeApp(); @переопределить Сборка виджета (контекст BuildContext) { вернуть FutureBuilder( будущее: _инициализация, строитель: (контекст, снимок) { если (снапшот.hasError) { центр возврата( ребенок: Контейнер( дочерний элемент: Text('Невозможно инициализировать FireBase'), ), ); } если (snapshot.connectionState == ConnectionState.done) { print("======= F I R E B A S E A P P ========"); вернуть LocalGroceryOnline(); } центр возврата( дочерний элемент: SizedBox( высота: 40, ширина: 40, дочерний элемент: CircularProgressIndicator( ширина хода: 2.0, valueColor: AlwaysStoppedAnimation(Colors.redAccent, )), ), ); }); } } LocalGroceryOnline.dart

класс LocalGroceryOnline расширяет StatelessWidget { окончательный GlobalKey navigatorKey = новый GlobalKey(); @переопределить Сборка виджета (контекст BuildContext) { вернуть Мультипровайдер ( провайдеры: [ Поставщик(create: (_) => FirebaseAuthService()), Поставщик(create: (_) => SignInHelperService()), Поставщик(create: (_) => SharedPreferenceService()), ChangeNotifierProvider(create: (_) => CartModel()), ChangeNotifierProvider(create: (_) => UserModel()), ChangeNotifierProvider(create: (_) => ProductModel()), ChangeNotifierProvider(create: (_) => cat.Category()), ChangeNotifierProvider(create: (_) => AppSetting()), ChangeNotifierProvider(create: (_) => ValueNotifier(false),), ChangeNotifierProvider(create: (_) => ValueNotifier(0),) ], дочерний элемент: MaterialApp( debugShowCheckedModeBanner: ложь, title: «Местный интернет-магазин продуктов питания», локаль: DevicePreview.of(context).locale, конструктор: DevicePreview.appBuilder, тема: ThemeData( основнойЦвет: Цвета.белый, Семейство шрифтов: 'Монтсеррат', appBarTheme: AppBarTheme(elevation: 0.0), //Это важно ), начальныйRoute: AuthWidget.id, Ключ Навигатора: Ключ Навигатора, onGenerateRoute: RouteGenerator.generateRoute, //onGenerateInitialRoutes: InitialRouteGenerator.generateRoute(), ) , ); } } RouteGenerator.dart

класс RouteGenerator { static RoutegenerateRoute(настройки RouteSettings) { окончательные аргументы = settings.arguments; переключатель (settings.name) { случай AuthWidget.id: return MaterialPageRoute(builder: (_) => AuthWidget()); случай SignUpSelectionScreen.id: return MaterialPageRoute(builder: (_) => SignUpSelectionScreen()); случай SignupForm.id: return MaterialPageRoute(builder: (_) => SignupForm()); случай LoginView.id: return MaterialPageRoute (builder: (_) => LoginView()); случай HomePage.id: return MaterialPageRoute(builder: (_) => HomePage()); случай MainPage.id: если (args.runtimeType == MainCategory) { вернуть MaterialPageRoute( строитель: (_) => MainPage( основнаяКатегория: аргументы, )); } вернуть _errorRoute(); случай ProductDetail.id: if (args.runtimeType == SelectedProductArguments) { вернуть MaterialPageRoute( строитель: (_) => ProductDetail( выбранныйПродуктАргументы: args, )); } вернуть _errorRoute(); случай CheckOutScreen.id: вернуть MaterialPageRoute (строитель: (_) => CheckOutScreen()); случай Admin.id: return MaterialPageRoute(builder: (_) => Admin()); кейс ScrapBoard.id: return MaterialPageRoute(builder: (_) => ScrapBoard()); случай ProductAdminView.id: return MaterialPageRoute(builder: (_) => ProductAdminView()); случай DeliveryAddressView.id: return MaterialPageRoute (builder: (_) => DeliveryAddressView()); случай PaymentView.id: return MaterialPageRoute(builder: (_) => PaymentView()); случай OrderProcessingView.id: return MaterialPageRoute(builder: (_) => OrderProcessingView()); случай MyOrdersView.id: return MaterialPageRoute(builder: (_) => MyOrdersView()); случай MyOrderDetails.id: если (args.runtimeType == Порядок) { return MaterialPageRoute(builder: (_) => MyOrderDetails( порядок: аргументы, ) ); } вернуть _errorRoute(); по умолчанию: // Если в операторе переключения нет такого именованного маршрута, например. /третий вернуть _errorRoute(); } } статический маршрут _errorRoute() { вернуть MaterialPageRoute (строитель: (_) { вернуть эшафот( AppBar: AppBar( заголовок: Текст('Ошибка'), ), тело: Центр( дочерний элемент: Текст («ОШИБКА»), ), ); }); } } класс InitialRouteGenerator { static RoutegenerateRoute(настройки RouteSettings) { bool _firstTimeAppUsed; окончательный localStorage = новый SharedPreferenceService(); localStorage.isFirstTimeAppUsed().then((логическое значение) { если (значение == истина) { _firstTimeAppUsed = правда; } }); если (_firstTimeAppUsed) { return MaterialPageRoute(builder: (_) => SignUpSelectionScreen()); } return MaterialPageRoute(builder: (_) => HomePage()); } } AuthWidget.dart

класс AuthWidget расширяет StatelessWidget { статический константный идентификатор = «auth_widget»; @переопределить Сборка виджета (контекст BuildContext) { print("Виджет аутентификации..."); окончательный authService = Provider.of(контекст, прослушивание: false); окончательная userModel = Provider.of(контекст, прослушивание: false); окончательный знакInHelperService = Provider.of(контекст, прослушивание: false); вернуть StreamBuilder( поток: authService.onAuthStateChanged, строитель: (контекст, снимок) { if (snapshot.connectionState == ConnectionState.active) { распечатать («ВНУТРЕННИЙ ВИДЖЕТ АУТ»); конечный пользователь = snapshot.data; если (пользователь != ноль) { print("${user.uid} ${user.userName} ${user.photoUrl}"); userModel.user = пользователь; вернуть StreamBuilder( поток: FirebaseFirestore.instance .collection('пользователи') .doc(user.uid) .get().asStream(), строитель: (контекст, userSnapshot) { if (userSnapshot.hasData && snapshot.connectionState == ConnectionState.active) { окончательный userDocument = userSnapshot.data; если (userDocument!= ноль) { print("------ Данные найдены -------"); Пользователь AppUser = AppUser.fromMap(userDocument); //bool SignUpComplete = userDocument["signUpComplete"]; bool SignUpComplete = user.signUpComplete; если (signUpComplete == NULL) SignUpComplete = false; если (!signUpComplete) { print("userModel.user UID ${userModel.user.uid}"); вернуть форму регистрации(); } еще { Пользователь приложения user2 = Пользователь приложения.fromMap(userDocument); userModel.user = пользователь2; print('Уровень пользователя..... ${userModel.user.userLevel}'); SignInHelperService.getAndUpdateDeviceToken(user2); вернуть домашнюю страницу(); //Главная страница(); } } } вернуть пустойScaffoldWithProgress(); }); } вернуть SignUpSelectionScreen(); } вернуть пустойScaffoldWithProgress(); }); } Скаффолд пустойScaffoldWithProgress() { вернуть эшафот( тело: Центр( дочерний элемент: SizedBox( высота: 90, ширина: 90, дочерний элемент: CircularProgressIndicator( ширина хода: 5,0, valueColor: AlwaysStoppedAnimation(Colors.redAccent)), ), ), ); } } флаттер-доктор -v
[√] Flutter (стабильная версия канала, 1.22.4, в Microsoft Windows [версия 10.0.19041.630], локаль en-US) • Flutter версии 1.22.4 в C:\src\flutter. • Версия платформы 1aafb3a8b9 (3 недели назад), 13.11.2020, 09:59:28 -0800. • Версия двигателя 2c956a31c0 • Дартс версия 2.10.4 [√] Набор инструментов Android — разработка для устройств Android (Android SDK версии 29.0.3) • Android SDK в папке C:\Users\Jamal\AppData\Local\Android\sdk. • Платформа android-29, инструменты сборки 29.0.3. • Бинарный файл Java: C:\Android\Android Studio\jre\bin\java. • Версия Java OpenJDK Runtime Environment (сборка 1.8.0_242-release-1644-b01). • Принимаются все лицензии Android. [√] Android Studio (версия 4.0) • Android Studio: C:\Android\Android Studio. • Плагин Flutter версии 47.1.2. • Версия плагина Dart 193.7361. • Версия Java OpenJDK Runtime Environment (сборка 1.8.0_242-release-1644-b01). [√] VS Code (версия 1.51.1) • Код VS: C:\Users\Jamal\AppData\Local\Programs\Microsoft VS Code. • Расширение Flutter версии 3.17.0. [√] Подключенное устройство (доступно 1) • Android SDK, созданный для x86 (мобильных устройств). • emulator-5554. • android-x86. • Android 10 (API 29) (эмулятор). • Проблем не обнаружено!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»