Flutter: что означает в DropdownMenuItem ?

#flutter #dart

#трепетание #дротик

Вопрос:

В Dart, как вы знаете, мы указываем типы, прикрепляя их перед списком или картой, как показано ниже.

 List<String> listOfStrings = [ ... ];
Map<String, int> listOfInts = { ... };
 

Затем я наткнулся на этот странный синтаксис,

 DropdownButton<String>( ... );
DropdownMenuItem<String>( ... );
 

Это создатели виджетов, которые являются классами, верно? Как получилось <String> , что его можно прикрепить туда? Что это значит?

Комментарии:

1. Это может помочь — dart.dev/guides/language/language-tour#дженерики

Ответ №1:

Часто во многих языках программирования есть функция Generics , которая призвана обеспечить безопасность типов и простоту поддержки нескольких типов без необходимости определять сигнатуру метода для каждого известного класса.

Dart не является исключением и поддерживает Generics . Если вы проверите DropdownButton документацию, вы увидите, что сигнатура метода определяется следующим образом.

 DropdownButton<T> class
 

Это означает, что любой T ype может быть передан в DropDownButton, и он будет «передан» другим базовым методам. Внизу в документации вы можете выполнить поиск по использованию T , и ниже приведены несколько примеров.

 ...
items → List<DropdownMenuItem<T>>?
...
onChanged → ValueChanged<T?>?
 

В приведенных выше случаях T автоматически будет то, что вы изначально указали с помощью DropDownButton< T > .

В вашем примере, поскольку вы используете String for T , все базовые переменные экземпляра или методы, которые используют T String , также будут использоваться.

Дженерики — важная концепция языка программирования, и вы в значительной степени увидите ее повсюду, поэтому я рекомендую вам прочитать документацию Dart lang о дженериках. https://dart.dev/guides/language/language-tour#generics