Flutter / Dart:抽象类-无法读取子类字段

时间:2019-11-11 11:39:01

标签: flutter dart

class HorizontalMenu {
  String title;
  List<VerticalMenu> submenuItems;

  HorizontalMenu({
    @required this.title,
    @required this.submenuItems,
  });
}

这是水平滚动菜单的类定义。

水平标题很少。图片电影应用程序。

恐怖电影(水平菜单)
电影很少(垂直菜单)

喜剧电影
几部电影

但是我的垂直菜单不会与示例电影应用程序中的字段相同。

所以我创建了抽象的垂直类

abstract class VerticalMenu {
  String title;
  String imageLocation;
  navigation navigateTo;

  VerticalMenu({
    @required this.title,
    @required this.imageLocation,
    @required this.navigateTo,
  });
}

每个垂直菜单将转到不同的屏幕。

class FirstVerticalMenu extends VerticalMenu {
  String json;

  FirstVerticalMenu ({
    this.json,
    String title,
    String imageLocation,
    navigation navigateTo,
  }) : super(
          title: title,
          imageLocation: imageLocation,
          navigateTo: navigateTo,
        );
}

带有垂直菜单的水平菜单列表

List<HorizontalMenu> menuItems = [
  HorizontalMenu(
    title: 'First column',
    submenuItems: <FirstVerticalMenu>[
      FirstScreen(
        title: 'First Screen',
        imageLocation: 'assets/images/',
        navigateTo: navigation.FirstScreen,
        json: 'data.json',
      ),
      FirstScreen(
        title: 'First Screen',
        imageLocation: 'assets/images/',
        navigateTo: navigation.FirstScreen,
        json: 'data2.json',
      ),
    ],
  ),

  HorizontalMenu(
    title: 'Second column',
    submenuItems: <SecondVerticalMenu>[
      SecondScreen(
        title: 'Second Screen',
        imageLocation: 'assets/images/screen2/',
        navigateTo: navigation.SecondScreen,
        type: 'type_1',
        options: []
      ),
      SecondScreen(
        title: 'First Screen',
        imageLocation: 'assets/images/screen2/',
        navigateTo: navigation.SecondScreen,
        type: 'type_2',
        options: []
      ),
    ],
  ),

FirstVerticalMenu和SecondVerticalMenu几乎没有什么区别。
但是他们使用VerticalMenu的字段

现在,如果使用列表生成器,我将无法读取FirstVerticalMenu或SecondVerticalMenu的字段。

  

未为类“ VerticalMenu”定义吸气剂“ json”。

我在这里添加了很多编码,以致混淆。所以我没有在这里添加列表生成器代码。

我还没有使用过课程。我在React Native和reactjs中工作。 因此,抽象类概念在开始时就不会造成混淆。

您将如何解决此问题? 具有相似项目的水平菜单和具有非相似项目的垂直菜单。

0 个答案:

没有答案