如何不用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
相关产品推荐
相关产品推荐

