【发布时间】:2021-01-02 05:59:54
【问题描述】:
我正在使用 Chopper 和 BLoC 系统在我的 Flutter 应用程序上实现登录身份验证。我的完整代码是here。 LoginForm 中的 BlocListner 效果很好,认证后可以导航到 HomePage,但是有两个问题:
- 当我在模拟器上终止应用并重新启动时,它不会记住登录状态,因此用户必须重新登录。
- 在用户通过身份验证后,在导航过程中会出现错误 2 秒。
问题 1: 这是我对 main.dart 的内容:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
setupLocator();
runApp(MultiBlocProvider(providers: [
BlocProvider(create: (BuildContext context) {
return DispatchBloc();
}),
BlocProvider(create: (BuildContext context) {
return HistoryBloc();
}),
BlocProvider(create: (BuildContext context) {
return LoginBloc();
}),
], child: MyApp()));
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
LoginBloc loginBloc;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Dispatch Executive App',
theme: ThemeData(
primarySwatch: Colors.green,
textTheme: Theme.of(context).textTheme.apply(
fontSizeDelta: 1.5,
)),
// home: LoginPage(),
routes: {
'/': (context) {
return BlocListener<LoginBloc, LoginState>(
cubit: loginBloc,
listener: (BuildContext context, state) {},
child: BlocBuilder<LoginBloc, LoginState>(
builder: (BuildContext context, LoginState state) {
if (state is LoadedLoginState) {
print("loaded log in from home!");
return Home(token: state.login.token);
} else {
print(state);
return LoginPage();
}
//return Home();
},
),
);
},
'/home': (context) => Home(),
},
// home: LoginPage(), //change this for testing
);
}
问题 2: This issue 认证成功后出现 2 秒,导航器指向首页 这就是我的登录表单。 BlocListener 和 BlocBuilder 在这里工作正常!
BlocBuilder(
cubit: loginBloc,
builder: (context, state) {
if (state is LoadingLoginState) {
return Center(
child: CircularProgressIndicator(),
);
}
if (state is LoadedLoginState) {
print(state);
print("in login form");
print(state.login.token);
Navigator.pushReplacementNamed(context, '/home');
return Text("Success " + state.login.token);
}
if (state is ErrorLoginState) {
return Text("Error" + state.error);
} else {
return SizedBox(width: 20.0);
}
},
),
请帮忙!非常感谢。
【问题讨论】:
-
您想第二次自动进入,无需再次登录?这是你的需要吗?
-
第二点,我导航了几次,但没有收到任何错误。当您收到错误消息时?