如果登录,则无法让用户返回到上一个屏幕,并且一旦使用共享首选项和提供程序从后台删除两个单独容器的点击,并且基于该点击,用户将登录并验证哪个配置文件的乐趣用户已登录,一旦用户重新打开应用程序并且仅在此时登录,就会显示该特定页面。
我尝试了很多,并在我的启动画面中为这样的事情创造了乐趣,但没有按预期工作,请查看这个。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../Provider/LogicForTappedContainer.dart';
class Onboard extends StatefulWidget {
const Onboard({super.key});
@override
State<Onboard> createState() => OnboardState();
}
class OnboardState extends State<Onboard> {
//check ifLoggedIn state
Future<void> check(LogicContainer provider)async{
var sharedPref = await SharedPreferences.getInstance();
sharedPref.setBool(OnboardState.KEYLOGIN, false);
bool? isLoggedIn = sharedPref.getBool(OnboardState.KEYLOGIN);
var value=provider.tappedContainerIndex;
print('isLoggedIn: $isLoggedIn');
print('value: $value');
if(isLoggedIn==true && value==0){
context.go('/userMainScreen');
}
else if(isLoggedIn==true && value==1){
context.go('/panditchat');
}
else{
context.go('/signup');
}
}
//shared pref
static var KEYLOGIN = "login";
double opacity1 = 0.0;
double opacity2 = 0.0;
@override
void initState() {
whereToGo();
Future.delayed(const Duration(milliseconds: 500), () {
setState(() {
opacity1 = 1.0;
});
});
Future.delayed(const Duration(milliseconds: 1000), () {
setState(() {
opacity2 = 1.0;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Consumer<LogicContainer>(builder: (context, provider, child) {
return Stack(children: [
Image.asset(
"assets/logos/Temple.jpg",
fit: BoxFit.fitHeight,
height: double.infinity,
),
Positioned(
top: MediaQuery.of(context).size.height * 0.83,
left: 80.w,
child: Column(
children: [
AnimatedOpacity(
opacity: opacity1,
duration: const Duration(milliseconds: 500),
child: Text(
" Welcome",
style: GoogleFonts.signikaNegative(
fontSize: 40,
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
const SizedBox(height: 5),
AnimatedOpacity(
opacity: opacity2,
duration: const Duration(milliseconds: 500),
child: Text(
" Worshipper",
style: GoogleFonts.signikaNegative(
fontSize: 40,
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
],
),
),
]);
}));
}
void whereToGo() async {
Timer(const Duration(seconds: 3), () {
LogicContainer myLogicContainer=LogicContainer();
check(myLogicContainer);
});
}
}
这是因为您始终在
KEYLOGIN
功能中将 false
设置为 check
。
在这一行
sharedPref.setBool(OnboardState.KEYLOGIN, false);
从代码中删除上面的行,它将正常工作。
使用此代码
Future<void> check(LogicContainer provider)async{
var sharedPref = await SharedPreferences.getInstance();
bool? isLoggedIn = sharedPref.getBool(OnboardState.KEYLOGIN);
var value=provider.tappedContainerIndex;
print('isLoggedIn: $isLoggedIn');
print('value: $value');
if(isLoggedIn==true && value==0){
context.go('/userMainScreen');
}
else if(isLoggedIn==true && value==1){
context.go('/panditchat');
}
else{
context.go('/signup');
}
}