Первый конструктор в качестве параметра принимает начальное значение, которое затем будет отображаться в ассоциированном текстовом поле. Второй конструктор также принимает начальное значение, но в виде объекта TextEditingValue
TextEditingController позволяет контроллировать введенный и выделенный текст в поле ввода, для чего у него определены три свойства:
selection: выделенный текст в виде объекта TextSelection
text: текущий введенный текст в виде объекта String
value: текущее значение в виде объекта TextEditingValue
При изменении ввода в текстовом поле связанный объект TextEditingController уведомляет слушателей об изменении. Для добавления слушателей — функций обработного вызова в классе определен метод addListener(). Все добавленные слушатели могут считать введенный текст, а также выделенный текст и таким образом узнать о произошедших изменениях.
Когда объект TextEditingController больше не нужен, у него надо вызвать метод dispose(). Это позволит освободить все ресурсы, используемые объектом.
Таким образом модифицируем код, добавив поля ввода для логина и пароля:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class_LoginStateextendsState<Login>{// _ впереди класса, означает чтоб скрыть доступ из другх файлов
Вполне типичная ситуация: отображать пункты меню в зависимости от того, авторизован пользователь или нет. Используя глобальные переменные из предыдущей статьи, дополним код, при котором после «прохождения авторизации», соответствующий пункт меню будем скрывать. Для этого, мы можем использовать опять же виджет Visibility, который имеет свойство visible: true/false. Странно конечно, почему любой виджет не имеет этого свойства, а приходится его «обёртывать» им..
Для того чтобы попробовать получившееся приложение на «реальном» телефоне, а не на эмуляторе, необходимо проделать ряд манипуляций.
Вариант 1: создание не подписанного apk. Не пригодно для размещения в Google Play, но пригодно для того чтобу устанавливать на телефон для «потестить». Этот способ подойдет если нужно «по быстрому» или не планируется распространять приложение через Google Play
Для этого достаточно выполнить в меню: Build -> Flutter -> Build APK. Спустя несколько минут компиляции и сборки, результат можно выловить в папке C:\Users\<пользователь>\AndroidStudioProjects\invent\build\app\outputs\flutter-apk
Вариант 2: создание подписанного apk и публикация в Google Play занимает несколько шагов
Создание версии приложения для публикации (—release)
Публиковать в Google Play Store
Добавление иконки приложения
По умолчанию приложение собирается с иконкой Flutter. Чтобы её поменять — нужно заместить эти иконки своими в папке <app dir>/android/app/src/main/res/
Настройка подписи приложения
Для публикации приложения в Play Store необходимо подписать приложение цифровой подписью. Создание ключа:
1
2
3
4
5
6
keytool-genkey-v-keystore~/.keystore\
-keyalg RSA\
-keysize2048\
-validity10000\
-alias key
Далее необходимо связать приложение с ключём. Для этого нужно создать файл <app dir>/android/key.properties
// TODO: Add your own signing config for the release build.
// Signing with debug keys for now,
// so `flutter run --release` works
signingConfig signingConfig.debug
}
}
на следующую информацию, содержащую параметры подписи
1
2
3
4
5
6
7
8
9
10
11
12
13
signingConfigs{
release{
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes{
release{
signingConfig signingConfigs.release
}
}
Теперь сборка релиза будет подписываться автоматически.
Проверка манифеста приложения
Необходимо убедиться что в файле <app dir>/android/app/src/main/AndroidManifest.xml содержится верное наименование приложения, а также установлены верные uses-permissions
Проверим конфигурацию сборки
В <app dir>/android/appbuild.gradle необходимо выставить идентификатор приложения, имя и номер сборки.