【问题标题】:How can SharedPreferences value be showed in Flutter/Dart?如何在 Flutter/Dart 中显示 SharedPreferences 值?
【发布时间】:2021-03-19 14:23:32
【问题描述】:

我想在该页面中设置 sharedPreferences 变量。但是当我调用函数(例如 _getUsername)时,我收到了类似“Flutter: 'Future' is not a subtype of type '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);
}

【问题讨论】:

    标签: flutter dart sharedpreferences


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      尝试这样调用

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

      【讨论】:

        【解决方案3】:

        由于您的 _getUsername() 是一个异步函数,您需要返回一个 Future。因此,您需要await _getUsername() 或调用_getUsername().then((value) =&gt; ..) 来获取字符串而不是Future&lt;String&gt;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-23
          • 2019-09-15
          • 1970-01-01
          • 2020-06-24
          • 2022-01-23
          • 2020-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多