gpt4 book ai didi

flutter - 我正在尝试让用户登录,但是我的代码仅在应用程序热重启后才有效

转载 作者:行者123 更新时间:2023-12-03 03:50:01 26 4
gpt4 key购买 nike

我正在练习一个登录页面,几乎所有内容都已完成。现在,在后台清除应用程序后,使用户保持登录状态的原因是什么。我曾在flutter中尝试过sharedPreference,这有效。但是它仅在hotRestart而不在重启时才起作用。有人可以帮我吗?
这是sharedPreference类

import 'package:shared_preferences/shared_preferences.dart';

class HelperFunction {
static String sharedPreferenceUserLoggedInKey = 'userLoggedIn';
static String sharedPreferenceUserLoggedOutKey = 'userLoggedOut';
static String sharedPreferenceUserSignedUpKey = 'userSignedUp';

//saving data to sharedPreference
static Future<bool> saveUserLoggedInSharedPreference(
bool isUserLoggedIn) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setBool(sharedPreferenceUserLoggedInKey, isUserLoggedIn);
}

static Future<bool> saveUserSignedUpSharedPreference(
bool isUserSignUp) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setBool(sharedPreferenceUserSignedUpKey, isUserSignUp);
}

static Future<bool> saveUserLoggedOutSharedPreference(
bool isUserLoggedOut) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setBool(
sharedPreferenceUserLoggedOutKey, isUserLoggedOut);
}


//getting data to sharedPreference
static Future<bool> getUserLoggedInSharedPreference() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.getBool(sharedPreferenceUserLoggedInKey);
}

static Future<bool> getUserLoggedOutSharedPreference() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.getBool(sharedPreferenceUserLoggedOutKey);
}

static Future<bool> getUserSignedUpSharedPreference() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.getBool(sharedPreferenceUserSignedUpKey);
}
}

登录按钮已按下功能
FlatButton(
onPressed:(){
HelperFunction.saveUserLoggedInSharedPreference(true);
HelperFunction.saveUserSignedUpSharedPreference(false);
HelperFunction.saveUserLoggedOutSharedPreference(false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => DashBoard(),
),
);

}
),


注册按钮onPressed功能:
FlatButton(
onPressed:(){
HelperFunction.saveUserLoggedInSharedPreference(false);
HelperFunction.saveUserSignedUpSharedPreference(true);
HelperFunction.saveUserLoggedOutSharedPreference(false);
Navigator.pop(context);
}
}
)

退出按钮onPressed功能:
FlatButton(
onPressed:(){

HelperFunction.saveUserLoggedOutSharedPreference(true);
HelperFunction.saveUserLoggedInSharedPreference(false);
HelperFunction.saveUserSignedUpSharedPreference(false);
Navigator.pop(context);
}
}
)
这是我的主要功能
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light
.copyWith(systemNavigationBarColor: Colors.black));

runApp(
DevicePreview(
enabled: kReleaseMode,
builder: (context) => FlashChat(),
),
);
}

class FlashChat extends StatefulWidget {
@override
_FlashChatState createState() => _FlashChatState();
}

class _FlashChatState extends State<FlashChat> {
bool isUserLoggedIn;
bool isUserSignedUp;
bool isUserLoggedOut;

void getLoggedInStatus() async {
await HelperFunction.getUserLoggedInSharedPreference().then((value) {
isUserLoggedIn = value;
print('isUserLoggedIn = $isUserLoggedIn');
});
}

void getSignedUpStatus() async {
await HelperFunction.getUserSignedUpSharedPreference().then((value) {
isUserSignedUp = value;
print('isUserSignedUp = $isUserSignedUp');
});
}

void getLoggedOutStatus() async {
await HelperFunction.getUserLoggedOutSharedPreference().then((value) {
isUserLoggedOut = value;
print('isUserLoggedOut = $isUserLoggedOut');
});
}

@override
void initState() {
getLoggedInStatus();
getSignedUpStatus();
getLoggedOutStatus();
super.initState();
}

@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, constraints) {
return OrientationBuilder(builder: (context, orientation) {
SizeConfig().init(constraints, orientation);
return MaterialApp(
home: isUserLoggedIn == true
? DashBoard()
: isUserSignedUp == true
? LoginScreen()
: isUserLoggedOut == true ? LoginScreen() : WelcomeScreen(),
debugShowCheckedModeBanner: false,
);
});
});
}
}

最佳答案

经过长时间的搜索,我找到了答案。通过将值放在setState中,我解决了我的问题。

import 'package:firebase_core/firebase_core.dart';
import 'package:flash/helper/helper_function.dart';
import 'package:flash/screens/dash_board_screen.dart';
import 'package:flash/screens/forgot_password_screen.dart';
import 'package:flash/screens/welcome_screen.dart';
import 'package:flash/size_configuration.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flash/screens/login_screen.dart';
import 'package:flash/screens/registration_screen.dart';
import 'package:flash/screens/chat_screen.dart';
import 'package:device_preview/device_preview.dart';
import 'package:flutter/services.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light
.copyWith(systemNavigationBarColor: Colors.black));

runApp(
DevicePreview(
enabled: kReleaseMode,
builder: (context) => FlashChat(),
),
);
}

class FlashChat extends StatefulWidget {
@override
_FlashChatState createState() => _FlashChatState();
}

class _FlashChatState extends State<FlashChat> {
bool isUserLoggedIn;
bool isUserSignedUp;
bool isUserLoggedOut;

@override
void initState() {
getLoggedInStatus();
getSignedUpStatus();
getLoggedOutStatus();
super.initState();
}

void getLoggedInStatus() async {
await HelperFunction.getUserLoggedInSharedPreference().then((value) {
setState(() {
isUserLoggedIn = value;
});
print('isUserLoggedIn = $isUserLoggedIn');
});
}

void getSignedUpStatus() async {
await HelperFunction.getUserSignedUpSharedPreference().then((value) {
setState(() {
isUserSignedUp = value;
});
print('isUserSignedUp = $isUserSignedUp');
});
}

void getLoggedOutStatus() async {
await HelperFunction.getUserLoggedOutSharedPreference().then((value) {
setState(() {
isUserLoggedOut = value;
});
print('isUserLoggedOut = $isUserLoggedOut');
});
}

@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, constraints) {
return OrientationBuilder(builder: (context, orientation) {
SizeConfig().init(constraints, orientation);
return MaterialApp(
home: isUserLoggedIn == true
? DashBoard()
: isUserSignedUp == true || isUserLoggedOut == true
? LoginScreen()
: WelcomeScreen(),
debugShowCheckedModeBanner: false,
);
});
});
}
}

关于flutter - 我正在尝试让用户登录,但是我的代码仅在应用程序热重启后才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63787721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com