【问题标题】:Flutter Instance member ‘{0}’ can’t be accessed using static access无法使用静态访问访问 Flutter 实例成员“{0}”
【发布时间】:2020-04-02 19:52:25
【问题描述】:

我正在将变量从一个活动传递到另一个活动,但收到错误“无法使用静态访问访问实例成员'纬度'”我需要在该块中对其进行转换,以便将其分配给静态 URL。

class Xsecond extends StatefulWidget {
  final double latitude;
  final double longitude;
  Xsecond(this.latitude, this.longitude, {Key key}): super(key: key);

  @override
  _Xsecond createState() => _Xsecond();
}

class _Xsecond extends State<Xsecond> {
  static String lat = Xsecond.latitude.toString(); // Error: Instance member ‘latitude’ can’t be accessed using static access
  ...

紧随其后

  ...
  String url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${lat},$lng&radius=$radius&type=restaurant&key=$api';
  ...

【问题讨论】:

  • @Morez 试过这个。不幸的是,这不起作用,但将错误更改为“初始化程序只能访问静态成员”

标签: flutter dart static instance


【解决方案1】:

在您的代码中,纬度和经度都被定义为非静态变量,即实例变量。这意味着它们只能使用类实例来调用。

class _Xsecond extends State<Xsecond> {
      final xsecond = Xsecond();
      static String lat = xsecond.latitude.toString();
      ...

请阅读任何面向对象编程语言的基础知识,例如飞镖、Java、C++

但是,在您的上下文中,第一个类是您的 StatefullWidget。因此,您可以通过状态类的 widget 字段访问它。

修复:

class _Xsecond extends State<Xsecond> {
          static String lat = widget.latitude.toString();
          ...

【讨论】:

  • 在你的构建方法中移动代码。错误将消失
  • 在构建方法中移动代码并将变量传递给上述类中的函数是可行的。谢谢!
  • @Sisir “请阅读任何面向对象编程语言的基础知识,例如 Dart、java、C++”——真的吗?你必须这么说吗?
  • 哈,也是这么想的!任何相当于“请阅读手册”的内容都可以附加到任何响应中,并使整个站点变得无用。更有帮助的回复指向有帮助的文档。作为一名新开发人员,我经常会花费大量时间四处寻找文档,但没有成功,因为 a) 我不知道如何表达我的问题(适当搜索),b) 了解所有十亿资源中的哪一个有用,和/或 c) 手册本质上过于技术性或期望我还没有基础知识的另一个基础层。
  • 话虽如此,您的实际解释对我的搜索很有用。谢谢,先生。
【解决方案2】:

如果您使用静态等非静态变量,则会发生此错误。我们来看看这个例子:

class MyPage extends StatefulWidget {
  final foo = Foo();
  // ...
}

class _MyPageState extends State<MyPage> {
  final newFoo = MyPage.foo; // Error
  // ...
}

MyPage.foo 不是静态成员,但如果是,您正在使用。


要解决此问题,您可以将变量设为static

static final foo = Foo();

使用widget 变量来获取基础变量。

class _MyPageState extends State<MyPage> {
  @override
  void initState() {
    super.initState();
    final newFoo = widget.foo; // No Error
  }
  // ...
}

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2020-01-03
    • 2021-08-09
    • 2020-11-29
    • 2019-06-22
    • 2021-08-19
    • 2021-11-26
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多