flutter在设置共享首选项时抛出null异常



你好,我目前正在学习flutter中的流,我遇到了一个计时器应用程序。这涉及到我使用共享偏好存储数据。当我试图存储手机的默认偏好时,我遇到了一个抛出的异常。我将其追溯到以下代码块:

readSettings() async {
prefs = await SharedPreferences.getInstance();
int workTime = prefs.getInt(WORKTIME);
if (workTime == null) {
await prefs.setInt(WORKTIME, int.parse('30'));
}
int shortBreak = prefs.getInt(SHORTBREAK);
if (shortBreak == null) {
await prefs.setInt(SHORTBREAK, int.parse('5'));
}
int longBreak = prefs.getInt(LONGBREAK);
if (longBreak == null) {
await prefs.setInt(LONGBREAK, int.parse('20'));
}
setState(() {
txtWork.text = workTime.toString();
txtShort.text = shortBreak.toString();
txtLong.text = longBreak.toString();
});
} 

这是我收到的错误:

Exception has occurred.
NoSuchMethodError (NoSuchMethodError: The setter 'text=' was called on null.
Receiver: null
Tried calling: text="30")

我认为您的错误很可能不是由SharedPreferences引起的。

同样假设txtWork.text是一个textEditingController。转到您定义TextEditingController textWork;的位置

并将其更改为:

TextEditingController textWork = TextEditingController ();

TextEditingController txtLong = TextEditingController ();

TextEditingController txtShort = TextEditingController ();

它应该起作用,请更新发生的情况。

我认为txtWork具有.text的对象为null所以你正在尝试这样做:

text=";30〃;

检查实例化它的位置。

我通过将我的textEditing控制器从intiState函数中移出来实现这一点

旧代码:

void initState() {
TextEditingController txtWork = TextEditingController();
TextEditingController txtShort = TextEditingController();
TextEditingController txtLong = TextEditingController();
readSettings();
super.initState();
}

新代码:

TextEditingController txtWork = TextEditingController();
TextEditingController txtShort = TextEditingController();
TextEditingController txtLong = TextEditingController();
@override
void initState() {
readSettings();
super.initState();
}

最新更新