【问题标题】:Flutter - Error: The getter X isn't defined for the classFlutter - 错误:没有为类定义 getter X
【发布时间】:2019-12-01 03:55:44
【问题描述】:

我有一个类TripController,其中包含一个私有字段_updatedAccount。我创建了一个 getter 以便从外部获取。

class TripController {
  final String _accountId;
  final BuildContext _context;
  Account _updatedAccount;  
  Account updatedAccount() => _updatedAccount;


  TripController(this._accountId, this._context);
...
}

在另一个类中,我完全可以访问TripController 类,我有代码:

onTap: () {
 TripController _tripController =
 new TripController(_account.id, context);
 _tripController.add(context);
 _account.trips  = _tripController.updatedAccount.trips;
 _account.notifyListeners();
},

在这里,来自_tripController.updatedAccount.tripsupdatedAccount 带有红色下划线,并带有以下消息:The getter 'updatedAccount' isn't defined for the class 'TripController'

我是否错误地声明了 getter ?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    好的,我终于修好了。不知道为什么,只好把TripController相关的代码删掉了,重新写一遍。不知道为什么,可能是Editor的问题,我用的是VScode。

    【讨论】:

      【解决方案2】:

      您已将updatAccount() 声明为方法,而不是getter。使用_tripController.updatedAccount().trips; 或将方法更改为getter Account get updatedAccount => _updatedAccount;

      【讨论】:

      • 带括号,错误信息改变,变成The method 'updatedAccount' isn't defined for the class 'TripController'.
      • 你有另一个类叫做'TripController'吗?
      • 不,我不知道。我不明白的是我可以使用所有其他方法,但不能使用这个。它不认识它。编辑:实际上,当我尝试添加另一个 test() 方法时,它也不起作用
      • 好像它不想考虑我对TripController 班级所做的更改。
      • 这很奇怪。您是否厌倦了清理/重建您的项目?
      【解决方案3】:

      您使用的是 Dart 语言中的经典方法语法声明,更喜欢对 getter 使用这种语法:

      Account get updatedAccount => _updatedAccount;
      

      并按照您的方式称呼它。 否则,您应该将其称为经典方法:

      _tripController.updatedAccount().trips
      

      请点击此链接了解更多信息:

      https://dart.dev/guides/language/language-tour#getters-and-setters

      【讨论】:

      • 我尝试添加get,但是消息是一样的:/
      • 你是否也删除了括号?
      【解决方案4】:

      用显式类型声明或向下转换替换成员的定义

      例如 - querySelector() 方法静态返回一个元素,但代码假定它返回定义 context2D 的子类型 CanvasElement。 canvas 字段被声明为 var ,在没有强模式的 Dart 1.x 版本中,将其键入为 dynamic 并消除所有错误。 Dart 推断 canvas 是一个元素。

      CanvasElement canvas = querySelector('canvas');
      canvas.context2D.lineTo(x, y);
      

      【讨论】:

        【解决方案5】:

        只需删除“_”即可。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-06
          • 2020-09-02
          • 2021-07-01
          • 2021-08-11
          • 2021-02-11
          • 2022-06-17
          • 2023-01-25
          相关资源
          最近更新 更多