#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