You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不用FutureBuilder从SharedPreferences获取值放入Text组件

问题核心原因

_currPage是异步函数,返回值为Future<int>类型,而Text组件仅支持传入String类型的展示内容,无法直接解析异步Future对象,因此直接传入会报错或者不展示内容。

非FutureBuilder实现方案

通过State生命周期触发异步读取,读取完成后调用setState更新状态变量驱动界面刷新即可,实现代码如下:

class _AllTasksPageState extends State<AllTasksPage> {
  // 初始化页码默认值为0,也可以定义为可空类型配合加载占位使用
  int _currPageNum = 0;

  @override
  void initState() {
    super.initState();
    // 页面初始化时执行异步读取逻辑
    _loadCurrPage();
  }

  Future<void> _loadCurrPage() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    _currPageNum = prefs.getInt('currPage') ?? 0;
    // 读取完成后触发界面重绘
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    // ... 其他布局代码
    return Text(_currPageNum.toString());
    // ... 其他布局代码
  }
}
可选优化点
  • 如果需要区分加载状态,可以将_currPageNum定义为可空类型int? _currPageNum,build时做判断:
    Text(_currPageNum?.toString() ?? '加载中')
    
  • 如果后续需要修改页码并同步更新展示,直接修改_currPageNum后调用setState即可,同时可以按需同步更新SharedPreferences中的存储值。

内容的提问来源于stack exchange,提问作者Chiliaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:42:03