Что означает "_" перед именем переменной для Flutter

Привет со ссылкой на учебник Flutter, я сталкиваюсь с подчеркиванием, "_"

Я знаю, что в Java _ используется как соглашение об именах для закрытой переменной.

1. Применимо ли это к Флаттеру? отмечая, что в Flutter нет публичных / защищенных. 2."_" Будет действительно приватным (недоступным для других классов) или это просто соглашение об именах?

переменная

 class RandomWordsState extends State<RandomWords> {
  final List<WordPair> _suggestions = <WordPair>[];
  final Set<WordPair> _saved = new Set<WordPair>();
  final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);
  ...
}
  1. Это _ делает виджет приватным? В таком случае разве основной класс не сможет оценить Widget?

Виджет

Widget _buildRow(WordPair pair) {
  final bool alreadySaved = _saved.contains(pair);  // Add this line.
  ...
}

3 ответа

Решение

Это не просто соглашение об именах. Подчеркнутые поля, классы и методы будут доступны только в .dart файл, где они определены.

Это обычная практика, чтобы сделать State реализация виджета private, чтобы его можно было создать только с помощью соответствующего StatefulWidget:

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

Из руководства Дартс

В отличие от Java, в Dart нет ключевых слов public, protected и private. Если идентификатор начинается с подчеркивания (_), он является частным для своей библиотеки. Для получения дополнительной информации см. Библиотеки и видимость.

Частные поля также имеют то преимущество, что Lint может определить, какие поля были объявлены/созданны, а не использованы, что помогает выявлять человеческие ошибки.

Если вы объявите общедоступное поле, в будущем к полю могут получить доступ классы вне класса, поэтому Lint не сможет предупредить вас, если вы добавили поле по ошибке.

Другие вопросы по тегам