class - 无法在 Dart 中初始化静态成员
问题描述
我读过类似的问题
但我仍然无法解决问题。
我正在将具有 Ip 字符串的 Ip 对象从一个屏幕发送到另一个屏幕。
简而言之,这是第二个屏幕的小部件和状态类。
class DrawingPage extends StatefulWidget {
Ip ipObj;
// String ipObj;
DrawingPage({Key key, @required this.ipObj});
_DrawingPageState createState() => _DrawingPageState();
}
class _DrawingPageState extends State<DrawingPage> {
final String ip = widget.ipObj.ip; //Error at "widget": Only Static members can be accessed in initializers
}
我努力了
1.初始化列表。
2.将 final 转换为静态成员,然后在 initState 中分配 ip 值确实有效。
但是值是在调用initState时设置的,但我想在initState之前设置值。
我该怎么做?
解决方案
这里有很多选项...我不确定哪一个最适合您的情况,但我通常使用第二个,因为我不喜欢在所有状态中引用“小部件”对象时间:
选项 1:将 'ip' 转换为字段
class _DrawingPageState extends State<DrawingPage> {
String get ip => widget.ipObj.ip;
}
选项2:在状态的构造函数中传递ipObj:
class DrawingPage extends StatefulWidget {
Ip ipObj;
DrawingPage({Key key, @required this.ipObj});
_DrawingPageState createState() => _DrawingPageState(ipObj);
}
class _DrawingPageState extends State<DrawingPage> {
String ip;
DrawingPageState(Ip ipObj){
ip = ipObj.ip;
}
}
推荐阅读
- sql - 如何在数据库中查找相同或相似名称的重复公司的数量
- owl - Horst (pD*) 与 OWL2-RL 相比
- java - 类中开关/案例的正确格式
- python - 如何在使用中使用 pyinstaller 和 matplotlib
- javascript - For 循环总是使用最后一个值 JavaScript - VueJS
- javascript - 如何从 Javascript 中的对象中获取两个(或 X)级别的所有键名?
- javascript - 如何仅从忽略NodeJS中的空值的对象中获取值?
- java - 从未缩放的 long 创建 BigDecimal
- javascript - 在 JavaScript 中清除本地存储
- kubernetes - Kubernetes 节点 CPU 利用率