我希望我的启动画面始终出现在我的应用程序中,这确实很棒,但是我在启动画面之后进行了一次遍历,我希望它是一次遍历,所以我想添加一个整数设置为0的共享首选项,每次我打开初始屏幕时,该值都会增加1,因此,当第二次运行“数字”等于1或更大时,初始屏幕会跳过演练并返回首页,这是我现在要编辑的代码:
void initState() {
// TODO: implement initState
super.initState();
Timer(Duration(seconds: 5), () => MyNavigator.goToIntro(context));
}
我希望它像:
void initState() {
// TODO: implement initState
super.initState();int number=0;//this is in the shared prefs
Timer(Duration(seconds: 5), () => if(number==0){MyNavigator.goToIntro(context));
}else{MyNavigator.goToHome(context));
number++;}
}
答案 0 :(得分:1)
我们需要具有number
值,才能在多个应用程序启动之间进行保存。我们可以使用shared_preference插件来实现这一点。
答案 1 :(得分:0)
下面的代码可以按照我们的预期完美打印(仅在首次启动期间,“首次启动”期间)。您可以使用导航逻辑来代替打印。
@override
void initState() {
super.initState();
setValue();
}
void setValue() async {
final prefs = await SharedPreferences.getInstance();
int launchCount = prefs.getInt('counter') ?? 0;
prefs.setInt('counter', launchCount + 1);
if (launchCount == 0) {
print("first launch"); //setState to refresh or move to some other page
} else {
print("Not first launch");
}
}
答案 2 :(得分:0)
首先,让我们将数据另存为布尔值
Future<void> saveData() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
bool isIntroScreenOpened = true;
sharedPreferences.setBool("isIntroScreenOpened", isIntroScreenOpened); // saved data to your device.
}
答案 3 :(得分:0)
第二,getData
保存在我们的设备中。
Future<bool> getSaveData() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
bool isIntroScreenOpenedBefore =
sharedPreferences.getBool("isIntroScreenOpened") ?? false;
print(sharedPreferences.containsKey("isIntroScreenOpened")); // check your key either it is save or not?
if (isIntroScreenOpenedBefore == true) {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return LoginBoard();
}));
} else {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return WalKThroughScreen();
}));
}
return isIntroScreenOpenedBefore;
}
答案 4 :(得分:0)
但我有 4 个初始屏幕需要显示一次。我已经在每个屏幕中使用相同的逻辑完成了这项工作。然后我的应用第二次显示第 5 个屏幕,例如快进所有前一个屏幕并在第 5 个屏幕上停止。
为了解决这个问题,我在 main.dart 获取所有设置的首选项以直接打开第 5 个屏幕。但是当我这样做时,我遇到了这个问题,
<块引用>"E/flutter (32606): [错误:flutter/lib/ui/ui_dart_state.cc(186)] 未处理的异常:使用上下文请求的导航器操作 不包括导航器。
E/flutter (32606):用于 来自导航器的推送或弹出路由必须是 导航器小部件的后代。”
这是从 main.dart 切换的代码:
int firstLogin, firstMobile, firstOtp, firstInfo;
void setValue() async {
final prefs = await SharedPreferences.getInstance();
firstLogin = prefs.getInt('counterLogin') ?? 0;
firstMobile = prefs.getInt('counterMobile') ?? 0;
firstOtp = prefs.getInt('counterOtp') ?? 0;
firstInfo = prefs.getInt('counterInfo') ?? 0;
prefs.setInt('counterLogin', firstLogin + 1);
prefs.setInt('counterMobile', firstMobile + 1);
prefs.setInt('counterOtp', firstOtp + 1);
prefs.setInt('counterInfo', firstInfo + 1);
if ((firstLogin == 0) && (firstMobile == 0) && (firstOtp == 0) && (firstInfo == 0)) {
setState(() {
print("first launch");
Navigator.of(context).pushNamed(LoginScreen.routeName);
});
} else {
setState(() {
print("not first launch");
Navigator.of(context).pushNamed(LandingSection.routeName);
});
}
}
<块引用>
并调用 setValue()
中的 initState()
我期待解决方案。