【发布时间】:2020-06-03 21:59:25
【问题描述】:
以下代码是我的登录屏幕的一部分。我正在使用 shared_preferences 来保存记住我复选框和用户名。复选框值有效,但未设置用户名。我知道它正在被保存,因为我可以使用 print 查看该值。但我想它设置得太晚了,因为我的 TextField 是空白的。有什么想法吗?
class RmoLogin extends StatefulWidget {
static const String id = 'login_screen';
@override
_RmoLoginState createState() => _RmoLoginState();
}
class _RmoLoginState extends State<RmoLogin> {
final TextStyle style = TextStyle(fontFamily: 'Montserrat', fontSize: 20.0);
final TextEditingController usernameController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
bool showSpinner = false;
bool rememberMe = false;
String userName = '';
_saveRememberUser() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('username', usernameController.text);
prefs.setBool('remember', rememberMe);
}
_getRememberUser() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
userName = prefs.getString('username') ?? '';
rememberMe = prefs.getBool('remember') ?? false;
}
@override
void initState() {
super.initState();
_getRememberUser();
if (rememberMe) {
usernameController.text = userName;
}
}
@override
Widget build(BuildContext context) {
final userField = UserTextField(style: style, usernameController: usernameController);
final passwordField = PasswordTextField(style: style, passwordController: passwordController);
final rememberMeCheckbox = Checkbox(
value: rememberMe,
onChanged: (newValue) {
setState(() {
rememberMe = newValue;
});
},
);
【问题讨论】:
-
它返回一个
Future,你可以使用await。例如await prefs.setString('username', usernameController.text);
标签: flutter