flhoter MyhomePage ({Key key, this.title}): супер (key: key); Пожалуйста, объясните любой пример с трепетом - PullRequest
0 голосов
/ 28 августа 2018

В flutter кто-нибудь объяснит ясно с примером моя путаница насчет key, код как ниже

MyHomepage({Key key, this.title}) : super(key: key);

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

Спасибо за подробное объяснение @ Гюнтера, которое помогло мне в самом начале. Здесь я хотел бы немного объяснить фон этого вопроса, и особенно знаки препинания в качестве синтаксиса.

упомянутая строка кода:

MyHomepage({Key key, this.title}) : super(key: key);

должно исходить из автоматически сгенерированного шаблона приложения флаттера .

Полный контекст :

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

Для меня точечные знаки препинания (фигурные скобки { } и два двоеточия :) - вот что мешало мне понять его синтаксис.

Фигурные скобки из {Key key, this.title}: это синтаксис объявления необязательных параметров при определении функции в Dart.

1-е двоеточие из MyHomepage(...) : super(key: key) - это разделитель, который задает список инициализатора (super(key: key)) функции конструктора MyHomepage(...)

2-е двоеточие в super(key: key) - это способ, которым вы передаете параметр в названную функцию (super() в данном случае).

  • Например, функция enableFlags определяется следующим образом
void enableFlags({bool bold, bool hidden}) {...}
  • Чтобы вызвать функцию, Dart передает параметр в функцию, объявив parameterName перед value, отделенным двоеточием :, что безопаснее для разработчика, чем Pythononic. Синтаксис аналога в swift должен быть внешний параметр.
enableFlags(bold: true, hidden: false);

Хотелось бы, чтобы это помогло.

Все определения и примеры можно найти в официальном документе Дарт

0 голосов
/ 28 августа 2018

Код является конструктором виджета MyHomepage.

{Key key, this.title}

объявляет 2 необязательных именованных параметра (необязательно именованных из-за {}), где

  • первое имя key с типом Ключ`

  • 2-й имеет имя title с типом поля this.title и автоматически инициализирует this.title с переданным значением Это хороший синтаксический сахар, который экономит время.

: запускает список инициализаторов. Список инициализаторов позволяет некоторым выполнять некоторые выражения до того, как вызов будет перенаправлен в конструктор суперкласса.

Когда класс инициализируется, доступ на чтение к this запрещен до тех пор, пока не будет завершен вызов супер-конструктора (пока не будет выполнено тело конструктора - в вашем примере у конструктора нет тела).

Список инициализаторов часто используется для проверки переданных значений параметров с помощью assert(key != null) или для инициализации final полей с вычисленными значениями (final поля не могут быть инициализированы или обновлены позже).

super(key: key) пересылается в конструктор суперкласса и передает параметр key, переданный в MyHomepage, параметру суперконструкторов key (аналогично MyHomepage({Key key})).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...