Я следовал этому руководству по аутентификации, используя блоки: https://bloclibrary.dev/# / flutterlogintutorial , и все работало отлично. За исключением того, что я вынужден изменить в på main.dart просто возврат страницы, которую я хочу, на go, если я успешно войду в систему, чтобы перейти на страницу виджета со следующим:
WidgetsBinding.instance.addPostFrameCallback((_) {
print("Authenticated");
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => TodaysPage(),
),
);
});
// return TodaysPage();
Я сделал это, потому что приложение не изменило представление на представление TodaysPage после входа в систему. Только после «обновления» симулятора из средства отладки кода VS. Итак, я знаю, что состояния blo c меняются нормально.
И это решение отлично работало в течение месяца, давай или бери. И я часто использую этот способ навигации в своем приложении. Сначала я использовал Navigator.pushNamed(...)
, но затем контекст блоков аутентификации не переносился, поэтому я не мог выйти, если изменил маршруты после входа в систему. Однако сейчас это не моя проблема.
Когда я начал до моего симулятора сегодня и запуска приложения, приложение вело себя очень странно. Вот что происходит, когда я вхожу в систему (извините за большое изображение):
Мне кажется, что навигатор толкает снова и снова.
Мой код работает нормально (за исключением того, что мне приходится обновлять sh каждый раз, когда я вхожу в систему), если я go с оператором return
вместо Navigator.of(context).push.....
Если я смотрю на консоль отладки, я вижу это :
И вот код для обработки состояния аутентификации:
if (authState is AuthenticationAuthenticated) {
print("Authenticated");
WidgetsBinding.instance.addPostFrameCallback((_) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => TodaysPage(),
),
);
});
// return TodaysPage();
}
if (authState is AuthenticationUnauthenticated) {
print("LoginPage loading");
return LoginPage(userRepository: userRepository);
}
if (authState is AuthenticationLoading) {
return CircularProgressIndicator();
}
print("SplashPage");
return SplashPage();
Я пробовал другие способы использования Navigator
, но все они дать тот же результат ..
Эта ошибка очень расстраивает, так как она работала на прошлой неделе, когда я работал над приложением .. И я почти закончил с этим и собирался показать его своему клиенту ..
flutter doctor -v
дает это:
[✓] Flutter (Channel stable, v1.12.13+hotfix.8, on Mac OS X 10.15.3 19D76, locale sv-SE)
• Flutter version 1.12.13+hotfix.8 at /Users/andreas/Library/flutter
• Framework revision 0b8abb4724 (6 weeks ago), 2020-02-11 11:44:36 -0800
• Engine revision e1e6ced81d
• Dart version 2.7.0
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Android SDK at /Users/andreas/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.2
• ANDROID_HOME = /Users/andreas/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.3.1, Build version 11C504
• CocoaPods version 1.9.0
[✓] Android Studio (version 3.5)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 42.1.1
• Dart plugin version 191.8593
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
[✓] IntelliJ IDEA Ultimate Edition (version 2019.3.2)
• IntelliJ at /Applications/IntelliJ IDEA.app
• Flutter plugin version 43.0.3
• Dart plugin version 193.6015.53
[✓] VS Code (version 1.43.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.8.1
[✓] Connected device (1 available)
• iPhone 11 Pro Max • 84A08DAE-713B-4A10-94C7-51CCCCF3FF1C • ios •
com.apple.CoreSimulator.SimRuntime.iOS-13-3 (simulator)
• No issues found!