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 获取值后更新文本字段的值