Как автоматически нажать кнопку во флаттере

#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;
        });
}