首页 > 解决方案 > 无法在 Dart 中初始化静态成员

问题描述

我读过类似的问题

  1. 错误:在初始化程序中只能访问静态成员这是什么意思?
  2. 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之前设置值。

我该怎么做?

标签: classflutterdartinitializationstatic-variables

解决方案


这里有很多选项...我不确定哪一个最适合您的情况,但我通常使用第二个,因为我不喜欢在所有状态中引用“小部件”对象时间:

选项 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;
  }
}

推荐阅读