簡體   English   中英

抽象 class 的擴展在 Dart 中無法正常工作

[英]Extension of abstract class doesn't work properly in Dart

我在 Dart 中遇到了抽象 class 擴展的奇怪行為。

編碼

我有以下文件:

BaseListItem.dart

abstract class BaseListItem {
  ImageProvider get _icon;
  IHealthChecker get _healthChecker;
  String get _name;
  String get _unit;

  Widget build(BuildContext context) {
     ... build widgets tree ... 
  }
}

溫度.dart

class Temperature extends BaseListItem {
   @override
  IHealthChecker get _healthChecker => TemperatureHealthChecker();

  @override
  ImageProvider<Object> get _icon => const Svg('assets/images/icons/Temperature.svg');

  @override
  String get _name => "Temperature";

  @override
  String get _unit => "°C";
}

我在SensorsList.dart文件中使用的所有這些 inheritance 東西。

class SensorsList extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _StateSensorsList();
}

class _StateSensorsList extends State<SensorsList> {
  final List<BaseListItem> sensors = [Temperature(), Humidity()];

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: sensors.length,
        shrinkWrap: true,
        itemBuilder: (BuildContext context, int index) {
          return sensors[index].build(context);
        });
  }
}

問題

此代碼已構建但在運行時失敗並出現下一個異常

Exception has occurred.
NoSuchMethodError (NoSuchMethodError: Class 'Temperature' has no instance getter '_icon'.
Receiver: Instance of 'Temperature'
Tried calling: _icon)

❗️如果我將抽象 class BaseListItem 和他的擴展溫度放在一個文件中,問題就消失了。❗️

它發生的原因是因為變量是私有的。 私有變量只能在同一個文件中訪問。 另請參閱在 Dart 中,如何從另一個文件中的子類訪問父私有 var?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM