#flutter #dart
Вопрос:
У меня есть этот код, который берет адресную информацию из Google mab. Есть ли способ заставить Google mab автоматически загружаться всякий раз, когда я захожу на адресную страницу, вместо того, чтобы нажимать значок для ее загрузки?
setAddress() {
return Row(
children: [
Expanded(
child: TextFormField(
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
textCapitalization: TextCapitalization.sentences,
style: Theme.of(context)
.textTheme
.subtitle2
.copyWith(color: colors.fontColor),
focusNode: addFocus,
controller: addressC,
validator: (val) =>
validateField(val, getTranslated(context, 'FIELD_REQUIRED')),
onSaved: (String value) {
address = value;
},
onFieldSubmitted: (v) {
_fieldFocusChange(context, addFocus, locationFocus);
},
decoration: InputDecoration(
hintText: getTranslated(context, 'ADDRESS_LBL'),
isDense: true,
),
),
),
Container(
margin: EdgeInsetsDirectional.only(start: 5),
width: 40,
child: IconButton(
icon: new Icon(
Icons.my_location,
size: 20,
),
focusNode: locationFocus,
onPressed: () async {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Map(
latitude: latitude == null
? position.latitude
: double.parse(latitude),
longitude: longitude == null
? position.longitude
: double.parse(longitude),
from: getTranslated(context, 'ADDADDRESS'),
)));
if (mounted) setState(() {});
List<Placemark> placemark = await placemarkFromCoordinates(
double.parse(latitude), double.parse(longitude));
state = placemark[0].administrativeArea;
country = placemark[0].country;
pincode = placemark[0].postalCode;
// address = placemark[0].name;
if (mounted)
setState(() {
countryC.text = country;
stateC.text = state;
pincodeC.text = pincode;
// addressC.text = address;
});
},
),
)
],
);
}
https://i.stack.imgur.com/6F34B.png
Есть ли способ заставить mab Google автоматически загружаться всякий раз, когда я захожу на адресную страницу, вместо того, чтобы нажимать значок для ее загрузки?
Комментарии:
1. Поместите код в функцию и вызовите функцию там, где вы хотите
Ответ №1:
Вы можете использовать контроллер ввода или, более конкретно, TextEditingController https://flutter.dev/docs/cookbook/forms/text-field-changes
Таким образом, вы можете определить, когда пользователь вводит текст в поле или когда пользователь покидает файл, чтобы перейти к следующему и т.д. Вы должны решить, что должно вызвать карту.
// create a text field controller
final myController = TextEditingController();
...
// add controller to text field
TextField(
controller: myController,
),
...
// add a listener to the controller
@override
void initState() {
super.initState();
// Start listening to changes.
myController.addListener(_printLatestValue);
}
// function called every time the text field is changed
void _printLatestValue() {
print('Second text field: ${myController.text}');
// HERE YOU CAN CALL THE MAP
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Map(
latitude: latitude == null
? position.latitude
: double.parse(latitude),
longitude: longitude == null
? position.longitude
: double.parse(longitude),
from: getTranslated(context, 'ADDADDRESS'),
)));
if (mounted) setState(() {});
List<Placemark> placemark = await placemarkFromCoordinates(
double.parse(latitude), double.parse(longitude));
state = placemark[0].administrativeArea;
country = placemark[0].country;
pincode = placemark[0].postalCode;
// address = placemark[0].name;
if (mounted)
setState(() {
countryC.text = country;
stateC.text = state;
pincodeC.text = pincode;
// addressC.text = address;
});
}