SharedPreferences 值如何显示在 Flutter/Dart 中?
How can SharedPreferences value be showed in Flutter/Dart?
我想在其中设置 sharedPreferences 变量 page.But 当我调用函数 (ex. _getUsername) 时,出现类似“Flutter: 'Future' is not a subtype of type 'String''.
如何获取和设置该页面中的值?为什么不能在小部件中显示字符串值?这应该是我的 'Edit Settings' 页面。我想编辑三个变量用户名、密码和 url。
感谢您的帮助。
class ThirdRoute extends StatefulWidget {
@override
_ThirdRouteState createState() => _ThirdRouteState();
}
class _ThirdRouteState extends State<ThirdRoute> {
String username = '';
String password = '';
String url = '';
@override
void initState() {
super.initState();
username = _getUsername();
password = _getPassword();
url = _getUrl();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("edit page")),
body: Center(
child: ListView(
children: [
Container(
child: Text(username),
),
Container(
child: Text(password),
),
Container(
child: Text(url),
),
FlatButton(
onPressed: () {
setState(() {
_setUsername("new username");
_setPassword("new password");
_setUrl("new url");
});
},
)
],
),
),
);
}
}
_getUsername() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('username');
}
_getPassword() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('password').toString();
}
_getUrl() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('url').toString();
}
_setUsername(newUsername) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("username", newUsername);
}
_setPassword(newPassword) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("password", newPassword);
}
_setUrl(newUrl) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("url", newUrl);
}
试试这样打电话
_getUsername().then((value) => ....)
由于您的 _getUsername()
是一个异步函数,您需要 return 一个 Future。因此,您需要 await _getUsername()
或调用 _getUsername().then((value) => ..)
来获取字符串而不是 Future<String>
。
在initstate中,运行这样的代码
@override
void initState() {
super.initState();
_getUsername().then((v){
setState((){username = v});
};
_getPassword().then((v){
setState((){password= v});
};
_getUrl().then((v){
setState((){url= v});
};
}
现在我们在 sharedpreferences 获取值后更新文本字段的值
我想在其中设置 sharedPreferences 变量 page.But 当我调用函数 (ex. _getUsername) 时,出现类似“Flutter: 'Future' is not a subtype of type 'String''.
如何获取和设置该页面中的值?为什么不能在小部件中显示字符串值?这应该是我的 'Edit Settings' 页面。我想编辑三个变量用户名、密码和 url。 感谢您的帮助。
class ThirdRoute extends StatefulWidget {
@override
_ThirdRouteState createState() => _ThirdRouteState();
}
class _ThirdRouteState extends State<ThirdRoute> {
String username = '';
String password = '';
String url = '';
@override
void initState() {
super.initState();
username = _getUsername();
password = _getPassword();
url = _getUrl();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("edit page")),
body: Center(
child: ListView(
children: [
Container(
child: Text(username),
),
Container(
child: Text(password),
),
Container(
child: Text(url),
),
FlatButton(
onPressed: () {
setState(() {
_setUsername("new username");
_setPassword("new password");
_setUrl("new url");
});
},
)
],
),
),
);
}
}
_getUsername() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('username');
}
_getPassword() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('password').toString();
}
_getUrl() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('url').toString();
}
_setUsername(newUsername) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("username", newUsername);
}
_setPassword(newPassword) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("password", newPassword);
}
_setUrl(newUrl) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("url", newUrl);
}
试试这样打电话
_getUsername().then((value) => ....)
由于您的 _getUsername()
是一个异步函数,您需要 return 一个 Future。因此,您需要 await _getUsername()
或调用 _getUsername().then((value) => ..)
来获取字符串而不是 Future<String>
。
在initstate中,运行这样的代码
@override
void initState() {
super.initState();
_getUsername().then((v){
setState((){username = v});
};
_getPassword().then((v){
setState((){password= v});
};
_getUrl().then((v){
setState((){url= v});
};
}
现在我们在 sharedpreferences 获取值后更新文本字段的值