我正在尝试将数据存储在一个类中以存储此信息并在以后使用它们,但我收到此错误消息并且无法找出我必须更改的内容才能使其正常工作。这是我的代码的简化版本,我遇到了同样的错误。
class LUI {
String lui;
LUI({
this.lui,
});
}
class Test extends StatefulWidget {
final LUI data;
Test({
Key key,
this.data,
});
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
TextEditingController _controller = new TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: Container(
child: TextField(
controller: _controller,
keyboardType: TextInputType.number,
))),
TextButton(
child: Text('add information'),
onPressed: () {
_sendresult(context);
print(widget.data.lui);
},
),
],
),
),
);
}
void _sendresult(BuildContext context) {
final result = _controller.text;
print(result);
setState(() {
widget.data.lui = result;
});
}
}```
答案 0 :(得分:0)
我必须从创建 Test 类的实例的位置发送数据参数的值。谢谢 Sisir 的回答。
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Basis',
theme: ThemeData(
primaryColor: Colors.red,
textTheme: TextTheme(
headline1: TextStyle(
fontSize: 40,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
),
home: Test(data: new LUI()));
}
}
答案 1 :(得分:0)
问题在于,Test
类期望为 data
参数传递一个值。但是,由于您在创建实例时没有向其传递任何值,这使得该字段保持为空。
稍后当您访问 print(widget.data.lui);
中的相同字段时,它会生成一个 null pointer exception
。正如您已经想到的,解决方法是将值传递给 data
。
但是,您可以以更好的方式编写代码,以便您可以在编译时捕获此错误,而不是等到运行时。
方法 1:(启用 Null-Safety)
使用关键字 required
指定必须提交,例如
Test({
Key key,
required this.data,
});
现在,有了这个,创建一个像 Test()
这样的带有参数输入的实例会抛出编译错误,抱怨缺少输入参数。
方法 2:(未启用 Null-Safety)
使用注释 @required
来指定归档是必需的,例如
Test({
Key key,
@required this.data,
});
在这种情况下,未能传递参数将引发编译时警告(黄线突出显示),与上述情况不同,它会通知您但不会阻止您的执行。