sul*_*110 5 splash-screen flutter bloc flutter-go-router
所以我最近在我的应用程序中切换到 Go router,因为它非常容易实现。但我在从启动屏幕转移到登录屏幕时遇到问题。我的启动屏幕中有逻辑,我可以检查用户是否登录。根据用户的身份验证,屏幕将转到登录屏幕或主页。
这是启动画面。
class SplashScreen extends StatefulWidget {
static const routeName = "/SplashScreen";
const SplashScreen({Key? key}) : super(key: key);
@override
_SplashScreenState createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen>
with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
return BlocConsumer<AuthenticationBloc, AuthenticationState>(
listener: (context, state) {
if (kDebugMode) {
print('Listener: $state');
}
Future.delayed(const Duration(seconds: 3), () {
if (state.authStatus == AuthStatus.unAuthenticated) {
GoRouter.of(context).go('/login');
Navigator.pushNamed(context, SignUpScreen.routeName);
} else if (state.authStatus == AuthStatus.authenticated) {
//Navigator.popUntil(context, (route) => route.isFirst);
Navigator.pushReplacementNamed(context, HomePage.routeName);
}
});
},
builder: (context, Object? state) {
if (kDebugMode) {
print('object: $state');
}
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text(
"Welcome to Musajjal",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
),
const SizedBox(
height: 20,
),
Image.asset(
'assets/musajjalBlue.png',
width: 300,
height: 300,
),
const SizedBox(
height: 20,
),
const Text(
"Hifz ul Quran Records",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
),
const SizedBox(
height: 20,
),
const CircularProgressIndicator(
color: Colors.blueGrey,
),
],
),
),
);
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,这个。是我的 Go Router 功能
GoRouter _router(AuthenticationBloc bloc) {
return GoRouter(
routes: <GoRoute>[
GoRoute(
path: '/',
builder: (context, state) => const SplashScreen(),
routes: <GoRoute>[
GoRoute(path: 'login', builder: (context, state) => LoginScreen()),
GoRoute(
path: 'signUp', builder: (context, state) => SignUpScreen()),
GoRoute(path: 'homePage', builder: (context, state) => HomePage())
],
redirect: (BuildContext context, GoRouterState state) {
final isLoggedIn =
bloc.state.authStatus == AuthStatus.authenticated;
final isLoggingIn = state.location == '/login';
print(isLoggedIn);
if (!isLoggedIn && !isLoggingIn) return '/login';
if (isLoggedIn && isLoggingIn) return '/homePage';
return null;
},
),
],
);
Run Code Online (Sandbox Code Playgroud)
}
问题是应用程序卡在启动屏幕上,并且不会前进到登录屏幕。请帮忙。
小智 0
尝试将重定向中的逻辑更改为
if (!isLoggedIn && !isLoggingIn) return '/login';
if (isLoggedIn) return '/homePage';
Run Code Online (Sandbox Code Playgroud)
另外,考虑将登录逻辑设置为 OR 而不是 AND --可选
if (!isLoggedIn || !isLoggingIn) return '/login';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6763 次 |
| 最近记录: |