首页 > 解决方案 > 如何在 Flutter/Dart 中显示 SharedPreferences 值?

问题描述

我想在该页面中设置 sharedPreferences 变量。但是当我调用函数(例如 _getUsername)时,出现类似“Flutter:“Future”不是“String”类型的子类型的错误。

如何在该页面中获取和设置值?为什么不能在小部件中显示字符串值?这应该是我的“编辑设置”页面。我想编辑三个变量用户名、密码和 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);
}

标签: flutterdartsharedpreferences

解决方案


尝试像这样打电话

_getUsername().then((value) => ....)

推荐阅读