Size: a a a

Flutter Developers — русскоговорящее сообщество

2021 February 21

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
🅵🅾️🆇
class A {}
class B extends A {}
class C extends A {}

final list = [A(), B(), C()];
Ты про это также сказал, что нужен
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
List<Object> как верхний общий тип вышел
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Окей, давай еще 1 промежуточный шаг сделаем
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Victor
List<Object> как верхний общий тип вышел
Так, давай теперь подумаем, почему именно Object
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
https://api.dart.dev/stable/2.10.5/dart-core/Object-class.html

Прочитай доку, там всего пару строк
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
Потому что они оба от него наследуются, да
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Да, все в дарте (кроме null) наследуется от Object
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Типы, объекты, перечисления, вообще все.
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Тоесть мы с тобой поняли, что список у нас получается по некому общему знаменателю?
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
ну да, я давно понял о чем ты
в тайпскрипте есть подтип списка tuple, поэтому там работает инференс, в дарте такого нет поэтому не работает
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
ну точнее он то работает как задумано
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
но не так как хотелось бы)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Victor
  List<A> list = [];
 list.add(A());
 list.add(B());
}
Окей, вот у нас с тобой тут получился такой список final list = <Object>[A(), B(), С()];

Теперь задачка будет такой - надо перебрать весь список в цикле и там где объект типа A вывести на экран "яйцо", там где B - "курица", где C - "петух"
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Начать, наверное, надо с цикла и получать каждый элемент.
Все должно быть строго типизировано, везде где можно указать тип - должен быть указан тип - пиши и приноси код.
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
  list.forEach((element) {
   if (element is B) {
     print('курица');
   } else if (element is C) {
     print('петух');
   } else if (element is A) {
     print('яйцо');
   }
 });
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Ну вот, +- хорошо.
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Только в идеале не используй forEach на списке если можешь не использовать
источник

V

Victor in Flutter Developers — русскоговорящее сообщество
зачем его тогда сделали?)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
заменяй на его прямой аналог

for (final a in list) {

}
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Victor
зачем его тогда сделали?)
Его можно использовать там где это красиво впишется, но это лишняя функция в стеке вызовов
источник