无法初始化Dart中的静态成员。

问题描述 投票:0回答:1

我也看过类似的问题

  1. 错误。只有静态成员可以在初始化器中被访问,这是什么意思?
  2. Dart - 只有静态成员可以在初始化器中被访问。

但我仍然无法解决这个问题。

我是把Ip字符串的Ip对象从一个屏幕发送到另一个屏幕。

这里是第二屏的widget和状态类的简称。

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之前设置值。

我应该怎么做呢?

class flutter dart initialization static-variables
1个回答
0
投票

这里有很多选项...... 我不知道哪种方案最适合你的情况,但我通常使用第二种方案,因为我不喜欢一直在状态中引用'widget'对象。

选项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;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.