#flutter #dart
Вопрос:
Я настраиваю мобильное приложение для электронной коммерции flutter от codecanyon. Как я могу изменить команду onPressed на одноразовую функцию, которая будет работать автоматически в течение одного времени
onPressed: () async { Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); await Navigator.push( context, MaterialPageRoute( builder: (context) =gt; Map( latitude: latitude == null ? position.latitude : double.parse(latitude), longitude: longitude == null ? position.longitude : double.parse(longitude), from: getTranslated(context, 'ADDADDRESS'), ))); if (mounted) setState(() {}); Listlt;Placemarkgt; 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; }); },
Комментарии:
1. Что это значит «будет работать автоматически в течение одного раза»? не могли бы вы добавить полный код, пожалуйста?
2. вы пытаетесь сказать, что это будет доступно только один раз?
3. Код открывает google mab, нажав на значок, чтобы выбрать местоположение. вместо того, чтобы нажимать на значок, я хочу, чтобы mab открывался автоматически один раз
4. просто сделайте это функцией и вызовите внутри initState.
Ответ №1:
@override void initState(){ super.initState(); _openMap(); } ...... void _openMap() async { Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); await Navigator.push( context, MaterialPageRoute( builder: (context) =gt; Map( latitude: latitude == null ? position.latitude : double.parse(latitude), longitude: longitude == null ? position.longitude : double.parse(longitude), from: getTranslated(context, 'ADDADDRESS'), ))); if (mounted) setState(() {}); Listlt;Placemarkgt; 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; }); } ....... ..... onPressed:_openMap
Комментарии:
1. Если вы не поняли вопрос, пожалуйста, попросите разъяснений в комментариях.
2. Я пытался сделать это таким образом, но столкнулся с этой ошибкой: Поместите позиционные аргументы перед именованными аргументами. Попробуйте переместить позиционный аргумент перед именованными аргументами или добавить имя к аргументу. void _openMap() асинхронно {