Flutter使用SharedPreferences时出现NoSuchMethodError错误求助
错误原因
你直接调用getPref()异步函数后就去调用setString,但getPref()返回的是Future<dynamic>对象,不是SharedPreferences实例,所以会提示找不到setString方法。另外你写的getPref()函数本身也有问题,late修饰的变量不能直接用== null判断,而且setString调用时还缺了必要的参数。
修正方案
1. 修正getPref函数(可选,也可以直接简化)
late SharedPreferences pref; Future<SharedPreferences> getPref() async { // 用空合并运算符确保只初始化一次 pref ??= await SharedPreferences.getInstance(); return pref; }
2. 正确调用异步函数并执行setString
异步操作必须在异步上下文里执行,比如在页面的initState中或者按钮点击事件里:
@override void initState() { super.initState(); // 单独开一个异步函数处理 _saveDataToPrefs(); } void _saveDataToPrefs() async { final prefs = await getPref(); // setString需要传入key和value两个参数,缺一不可 await prefs.setString("user_name", "test_user"); }
3. 更简洁的写法(无需单独的getPref函数)
如果不需要复用初始化逻辑,直接在需要的地方获取实例即可:
void _saveData() async { final prefs = await SharedPreferences.getInstance(); await prefs.setString("user_name", "test_user"); }
注意点
setString方法必须传入**存储键(key)和对应的值(value)**两个参数,缺少任意一个都会报错;- 所有涉及
await的操作都必须放在async修饰的函数中,不能在同步代码块里直接使用。
内容的提问来源于stack exchange,提问作者Ibtissam
相关产品推荐
相关产品推荐

