Я впервые использую Flutter для создания мобильного приложения, и я не нашел способа реализовать автозаполнение мест Google в компоненте textEdit. Я стремлюсь получить вид списка, пока пользователь печатает местоположение, как мы можем сделать в нативной реализации Android / iOS и реагировать / ioni c.
То, что я получил, - это компонент TextEdit, который ищет возможные места и берет первый в конце. Вот фрагмент моего кода
class HomeFragmentState extends State<HomeFragment>{
GoogleMapController mapController;
String searchAddr;
List<Marker> markersList = [];
Marker finalMarker;
LatLng _center = LatLng(45.4654219,9.1859243); // default location
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
GoogleMap(
onMapCreated: onMapCreated,
initialCameraPosition: CameraPosition(
target: _center,
zoom: 11.0,
),
markers: Set.from(markersList),
),
Positioned(
top: 10.0,
right: 15.0,
left: 15.0,
child: Container(
height: 50.0,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.white
),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(
hintText: 'Enter the place',
border: InputBorder.none,
contentPadding: EdgeInsets.only(left: 15.0,top:15.0),
suffixIcon: IconButton(
icon: Icon(Icons.search),
onPressed: searchAndNavigate,
iconSize: 30.0,
)
),
onChanged: (val) {
setState(() {
searchAddr = val;
});
},
onEditingComplete: searchAndNavigate,
),
],
)
),
),
],
),
);
}
void searchAndNavigate(){
Geolocator().placemarkFromAddress(searchAddr).then((result) => {navigateTo(result:result)});
}
navigateTo({result, init: false}){
var zoom = 11.0;
var target;
if(init){
zoom = 12.0; //difference between searching and initializing
target = LatLng(result.latitude, result.longitude);
} else {
target = LatLng(result[0].position.latitude,result[0].position.longitude);
}
mapController.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target:target,
zoom: zoom
)));
}
void onMapCreated(controller){
setState(() {
mapController = controller;
Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high).then((position) => {
navigateTo(result: position,init: true)
});
});
}
}
Как мы можем видеть из Geolocator, мы можем получить какое-то местоположение на основе адреса, который мы печатаем (следовательно, мы можем получить результаты оттуда), но я не нашел умный способ реализовать часть предложений textedit