【问题标题】:How can I pass variable from Future<String> to void in Flutter?如何将 Future<String> 中的变量传递给 Flutter 中的 void?
【发布时间】:2020-05-04 11:14:45
【问题描述】:

我正在使用 SharedPreferences 我做了一个简单的保护程序和吸气剂,但我想在使用 initState 打开应用程序时加载我的变量 name

数据是一个带占位符的字符串

保存器

Future<String> saveNamePreference(String name) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('name', name);

  print(name);
  return prefs.getString(name);
}

吸气剂

Future<String> getNamePreference() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  final name = prefs.getString('name');

  return name.toString();
}

无效初始化状态

  @override
  void initState() async {
    super.initState();
    await getNamePreference();
    setState(() {
      data = name;
    });
  }

【问题讨论】:

  • 你试过了吗 - name = await getNamePreference(); in initState() 或 setState() =&gt; data = await getNamePreference();
  • 已经有一个类似的帖子here 提供了答案。

标签: flutter dart


【解决方案1】:

您必须使用 then 方法来执行此操作,因为 initstate 在数据从异步方法到达之前完成了精确运算。

@override
  void initState() {
    super.initState();
    getNamePreference().then((name){
       setState(() {
           data = name;
       });
    }); 
  }

【讨论】:

  • 我认为最好不要将initState 保持为异步状态。
  • 当然,我忘了删除它。谢谢@AbhilashChandran
猜你喜欢
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 2019-02-03
  • 2011-04-18
  • 2021-07-11
  • 1970-01-01
  • 2020-09-11
  • 2022-07-21
相关资源
最近更新 更多