Flutter Secure Storage 未按应用程序启动时的预期进行初始化
Flutter Secure Storage not initializing as itended on app start up
我正在开发一个带有动态初始屏幕图像的应用程序。
我就是这样实现的。
class _SplashScreenState extends State<SplashScreen> {
loginState() async{
if(await FlutterSecureStorage().read(key: "Login")!=null){
isLoggedIn = true;
image = await StorageAccess().readFile();
}
}
bool isLoggedIn = false;
var image;
@override
void initState() {
loginState();
super.initState();
Timer(Duration(seconds: 4),
()=>Navigator.pushReplacement(context,
MaterialPageRoute(builder:
(context) =>
FirstPage()
)
)
);
}
@override
Widget build(BuildContext context) {
return isLoggedIn?Container(
color: Colors.white,
child:Image.memory(image),
):Container(
color: Colors.white,
child: Image.asset('images/logo.png'),
);
}
}
这在我执行热重启时工作正常,但当我关闭并启动应用程序时,变量 isLoggedIn 花费更多时间进行初始化,并且启动画面中的动态图像未显示。
任何人都知道为什么在应用程序启动时初始化需要这么多时间,但在热重启时却没有,我该如何解决这个问题?
提前致谢。
你可以试试 运行 initState with async。
void initState() async {
loginState();
super.initState();
Timer(Duration(seconds: 4),
()=>Navigator.pushReplacement(context,
MaterialPageRoute(builder:
(context) =>
FirstPage()
)
)
);
}
类似的问题我也在苦苦挣扎。对于我的情况,我使用的是 getx,因此这可能会解决您遇到的问题。
我用 FutureBuilder 解决了这个问题。
更新后的代码是这样的:
class _SplashScreenState extends State<SplashScreen> {
loginState() async{
if(await FlutterSecureStorage().read(key: "Login")!=null){
isLoggedIn = true;
image = await StorageAccess().readFile();
}
}
bool isLoggedIn = false;
var image;
@override
void initState() {
super.initState();
Timer(Duration(seconds: 4),
()=>Navigator.pushReplacement(context,
MaterialPageRoute(builder:
(context) =>
FirstPage()
)
)
);
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: loginState(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return isLoggedIn?Container(
color: Colors.white,
child:Image.memory(image),
):Container(
color: Colors.white,
child: Image.asset('images/logo.png'),
);
},);
}
}
我正在开发一个带有动态初始屏幕图像的应用程序。 我就是这样实现的。
class _SplashScreenState extends State<SplashScreen> {
loginState() async{
if(await FlutterSecureStorage().read(key: "Login")!=null){
isLoggedIn = true;
image = await StorageAccess().readFile();
}
}
bool isLoggedIn = false;
var image;
@override
void initState() {
loginState();
super.initState();
Timer(Duration(seconds: 4),
()=>Navigator.pushReplacement(context,
MaterialPageRoute(builder:
(context) =>
FirstPage()
)
)
);
}
@override
Widget build(BuildContext context) {
return isLoggedIn?Container(
color: Colors.white,
child:Image.memory(image),
):Container(
color: Colors.white,
child: Image.asset('images/logo.png'),
);
}
}
这在我执行热重启时工作正常,但当我关闭并启动应用程序时,变量 isLoggedIn 花费更多时间进行初始化,并且启动画面中的动态图像未显示。
任何人都知道为什么在应用程序启动时初始化需要这么多时间,但在热重启时却没有,我该如何解决这个问题?
提前致谢。
你可以试试 运行 initState with async。
void initState() async {
loginState();
super.initState();
Timer(Duration(seconds: 4),
()=>Navigator.pushReplacement(context,
MaterialPageRoute(builder:
(context) =>
FirstPage()
)
)
);
}
类似的问题我也在苦苦挣扎。对于我的情况,我使用的是 getx,因此这可能会解决您遇到的问题。
我用 FutureBuilder 解决了这个问题。 更新后的代码是这样的:
class _SplashScreenState extends State<SplashScreen> {
loginState() async{
if(await FlutterSecureStorage().read(key: "Login")!=null){
isLoggedIn = true;
image = await StorageAccess().readFile();
}
}
bool isLoggedIn = false;
var image;
@override
void initState() {
super.initState();
Timer(Duration(seconds: 4),
()=>Navigator.pushReplacement(context,
MaterialPageRoute(builder:
(context) =>
FirstPage()
)
)
);
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: loginState(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return isLoggedIn?Container(
color: Colors.white,
child:Image.memory(image),
):Container(
color: Colors.white,
child: Image.asset('images/logo.png'),
);
},);
}
}