如何在颤动中加载存储在SharedPreference中的数据
How to load data stored in SharedPreference in flutter
我有一个获取当前登录用户名并将其保存到共享首选项的代码。面临的问题是,每当用户第一次登录时,用户名永远不会显示,但是当我在应用程序上进行热重载时,用户名会显示在屏幕上。我怎样才能以这种方式在第一次加载时加载用户名而不进行热重载。
如何获取 SharedPreference 上的用户名
/// Gets the current and prior accounts.
Future<dynamic> handleGetAccount() async { // <-- Replace dynamic with type of currentAccount
final result = await msal.getAccount();
if (result.currentAccount != null) {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.setString("username", result.currentAccount.username);
//print(result.currentAccount.username);
return result.currentAccount;
} else {
print('no account found');
return null;
}
}
我导航到 NavScreen -> 重定向到主屏幕
/// Updates the signed in state
refreshSignedInStatus() async {
bool loggedIn = await msal.getSignedIn();
if (loggedIn) {
isSignedIn = loggedIn;
if(isSignedIn) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => NavScreen(
),
),
);
}
// Remaining code for navigation
}
}
我如何让用户名显示在主屏幕上并显示用户名
class Home extends StatefulWidget {
const Home({Key key}) : super(key: key);
@override
HomeState createState() => new HomeState();
}
class HomeState extends State<Home> {
final TrackingScrollController _trackingScrollController =
TrackingScrollController();
String username = "";
@override
void initState() {
getName();
}
Future<String> getName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
username = prefs.getString("username");
return username;
}
因为 getName() 是一个异步方法,你应该在获取用户名后调用 setState((){})
。
void getName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
username = prefs.getString("username");
setState((){});
}
我有一个获取当前登录用户名并将其保存到共享首选项的代码。面临的问题是,每当用户第一次登录时,用户名永远不会显示,但是当我在应用程序上进行热重载时,用户名会显示在屏幕上。我怎样才能以这种方式在第一次加载时加载用户名而不进行热重载。
如何获取 SharedPreference 上的用户名
/// Gets the current and prior accounts.
Future<dynamic> handleGetAccount() async { // <-- Replace dynamic with type of currentAccount
final result = await msal.getAccount();
if (result.currentAccount != null) {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.setString("username", result.currentAccount.username);
//print(result.currentAccount.username);
return result.currentAccount;
} else {
print('no account found');
return null;
}
}
我导航到 NavScreen -> 重定向到主屏幕
/// Updates the signed in state
refreshSignedInStatus() async {
bool loggedIn = await msal.getSignedIn();
if (loggedIn) {
isSignedIn = loggedIn;
if(isSignedIn) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => NavScreen(
),
),
);
}
// Remaining code for navigation
}
}
我如何让用户名显示在主屏幕上并显示用户名
class Home extends StatefulWidget {
const Home({Key key}) : super(key: key);
@override
HomeState createState() => new HomeState();
}
class HomeState extends State<Home> {
final TrackingScrollController _trackingScrollController =
TrackingScrollController();
String username = "";
@override
void initState() {
getName();
}
Future<String> getName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
username = prefs.getString("username");
return username;
}
因为 getName() 是一个异步方法,你应该在获取用户名后调用 setState((){})
。
void getName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
username = prefs.getString("username");
setState((){});
}