1. Используйте IDE для эффективного объединения виджетов
Во Flutter построение пользовательского интерфейса достигается за счет вложения виджетов.В процессе разработки неизбежно частое изменение дерева виджетов и вставка или удаление из него некоторых виджетов.
Помимо ручного написания кода, вырезания и вставки для изменения дерева виджетов, в Android Studio и Visual Studio Code у вас есть более эффективные способы использования:
- в Android-студии
- в коде Visual Studio
Во-вторых, поймите значение имен, начинающихся со знака подчеркивания.
Язык Dart, используемый Flutter, не имеет Java-подобной общедоступной защиты private.Переменные, функции и классы, начинающиеся с _, означают, чтоВидно только в библиотеке
Libraries not only provide APIs, but are a unit of privacy: identifiers that start with an underscore (_) are visible only inside the library.происхождение
Обратите внимание на следующие примеры, чтобы углубить свое понимание:
-
Переменная
После того, как переменная name начинается с _, хотя она и унаследована от Fruit, поскольку Apple не находится в той же библиотеке, она не может получить доступ к атрибуту name родительского класса.
-
функция
После того, как метод getName начинается с _, хотя он и унаследован от Fruit, поскольку Apple не находится в той же библиотеке, он не может получить доступ к методу getName родительского класса, и его не нужно реализовывать.
-
Добрый
Класс Banana может получить доступ к классу _Fruit, который находится в той же библиотеке, но, поскольку Apple не находится в той же библиотеке, он не может получить доступ к классу _Fruit.
В-третьих, разница между final и const
В Dart, когда вам не нужно изменять переменную, вы должны использовать final или const вместо var для объявления переменной.
Конечная переменная может быть назначена только один раз и должна быть инициализирована во время определения или в списке параметров конструктора.
То, что изменяет const, является константой времени компиляции, мы уже знаем ее значение во время компиляции, ее значениезначение неизменноиз.
Разница между ними в том, чтоconst строже, чем final, см. следующие примеры:
final List<String> list = [];
list.add('1'); // 正确
const List<String> list = [];
list.add('1'); // 错误,运行时报错:Cannot add to an unmodifiable list
final timestamp = new DateTime.now().millisecondsSinceEpoch; // 正确
const timestamp = new DateTime.now().millisecondsSinceEpoch;
// 错误,编译前报错:Const variables must be initialized with a constant value
В-четвертых, используйте интерфейс отладки Debug Painting.
Отладочная картина, предоставленная Flutter, может легко помочь нам наблюдать за макетом интерфейса и отлаживать разработку интерфейса.
Как Android Studio, так и Visual Studio Code предоставляют переключатели для отображения или скрытия отладочной картины (Предполагается, что приложение находится в состоянии отладки.):- в Android-студии
- в коде Visual Studio
5. Используйте FocusScope для передачи фокуса и скрытия метода ввода
Когда мы разрабатываем приложения, мы часто сталкиваемся с необходимостью скрыть метод ввода при нажатии на пустую область. Думая о методе ввода, каждый может захотеть использовать канал метода, чтобы позволить собственной реализации скрытого метода ввода решить его. На самом деле, мы можем передать фокус через FocusScope, что также может помочь скрыть метод ввода.
Container(
height: 500.0,
child: new GestureDetector(
onTap: () {
// 通过GestureDetector捕获点击事件,再通过FocusScope将焦点转移至空焦点——new FocusNode()
FocusScope.of(context).requestFocus(FocusNode());
},
child: Container(
margin: EdgeInsets.all(30.0),
child: ListView(children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Username'),
),
TextField(
decoration: InputDecoration(labelText: 'Password'),
)
])),
),
),
В процессе разработки также был обнаружен баг во Flutter: контекст, передаваемый в FocusScope, не может находиться под MaterialApp, то есть нужно выносить эту часть кода в отдельный Widget. конкретная ссылкаЭта проблемаПоследний комментарий.