Flutter: общий список обрабатывает разные ключи, пары значений - PullRequest
0 голосов
/ 07 января 2019

У меня есть класс, у которого есть универсальный список в качестве свойства, который я должен инициализировать, и который имеет функцию, которая возвращает карту с использованием этого списка:

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

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

Теперь, как видите, я использую

 list[position].name 

, который работает для большинства вещей, которые у меня есть, но, в случае, если у меня будет список, в котором ключом не будет «name», у меня будут некоторые проблемы. Как я могу избежать этой проблемы?

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Вы можете ограничить ваш 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,),);
    }
}
0 голосов
/ 07 января 2019

Вы должны смешать оба предыдущих ответа, чтобы получить то, что вы хотите (кредит переходит к @ 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
}
0 голосов
/ 07 января 2019

Вы можете использовать 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,),);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...