Flutter:通用列表处理不同的键,值对

时间:2019-01-07 15:35:16

标签: list dictionary flutter key

我有一个具有通用列表作为属性的类,我必须对其进行初始化,并且该类具有使用该列表返回卡片的功能:

class buildCard{
buildCard(this.list);
final List list;

Widget buildCard(int position) {
      return Card(child: ListTile(title: list[position].name,),);
}

现在,如您所见,我使用

 list[position].name 

适用于我所拥有的大多数东西,但是,如果我将得到一个列表,其中没有以“名称”为键的列表,那么我会遇到一些麻烦。我该如何避免这个问题?

3 个答案:

答案 0 :(得分:1)

您可以使用is来检查类型

Widget buildCard() {
  if(list[position].name is List) {
    return Card(child: ListTile(title: list[position][0].name,),); // or similar - I don't know your exact structure
  } else { 
    return Card(child: ListTile(title: list[position].name,),);
  }
}

答案 1 :(得分:1)

您可以约束List,以便只能传递具有name属性的对象。

abstract class Named {
    Widget name;
}

class buildCard {
    buildCard(this.list);
    final List<Named> list;

    Widget buildCard(int position) {
      return Card(child: ListTile(title: list[position].name,),);
    }
}

答案 2 :(得分:1)

您必须混合使用前面的答案才能获得所需的内容(贷方为@GünterZöchbauer)

abstract class Named {
  String name;
}

class Person implements Named {
  String name;

  Person(this.name);
}

class NotAPerson {
  String noName;

  NotAPerson(this.noName);
}

class BuildCard {
  BuildCard(this.list);
  final List list;

  Widget buildCard(int position) {
    if(list[position] is Named) {
      return Card(child: ListTile(title: list[position].name,),);
    } else { 
      return Card(child: ListTile(title: list[position].noName,),);
    }
  }
}

main() {
  BuildCard b = BuildCard([Person, NotAPerson]);
  b.buildCard(0); // Will access name
  b.buildCard(1); // Will not access name
}