Как использовать автозаполнение местоположения в flutter

#flutter #google-maps #maps

Вопрос:

В своем приложении я создал очень простой экран Google maps, где я использовал ключ API и настроенное местоположение для отображения карты на экране с нужными мне координатами.

Я также разместил текстовое поле, чтобы пользователь мог вставить местоположение для отображения на карте.

Вот где я сталкиваюсь с проблемами, кто-нибудь знает, как добиться автозаполнения этого местоположения с помощью flutter?

Есть ли посылка? Если да, то какой из них, пожалуйста.

Это то, чего я достиг до сих пор:

 class _GoogleMapScreenState extends State<GoogleMapScreen> {
  Set<Marker> markers = {};
  late BitmapDescriptor mapMarker;
  late GoogleMapController googleMapController;

  @override
  void dispose() {
    googleMapController.dispose();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();
    setCustomMarker();
  }

  void setCustomMarker() async {
    //mapMarker = await BitmapDescriptor.fromAssetImage(ImageConfiguration(), 'assets/img/location.png',);
    mapMarker =
        await getBitmapDescriptorFromAssetBytes('assets/img/icon2.png', 35);
  }

  /// Marker size

  Future<Uint8List> getBytesFromAsset(String path, int width) async {
    var data = await rootBundle.load(path);
    var codec = await ui.instantiateImageCodec(data.buffer.asUint8List(),
        targetWidth: width);
    var fi = await codec.getNextFrame();
    return (await fi.image.toByteData(format: ui.ImageByteFormat.png))
            ?.buffer
            .asUint8List() ??
        Uint8List.fromList([]);
  }

  Future<BitmapDescriptor> getBitmapDescriptorFromAssetBytes(
      String path, int width) async {
    var imageData = await getBytesFromAsset(path, width);
    return BitmapDescriptor.fromBytes(imageData);
  }

  void onMapCreated(GoogleMapController controller) {
    setState(() {
      markers.add(
        Marker(
          markerId: MarkerId('theBase1'),
          position: LatLng(52.5722702, 13.4039918),
          icon: mapMarker,
          infoWindow: InfoWindow(
            title: 'The Base 1',
            snippet: 'Main Building',
          ),
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;
    var height = MediaQuery.of(context).size.height;
    return Scaffold(
      body: NestedScrollView(
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            MainScreenAppBar(
                flavorSettings: context.flavorSettings,
                centerTitle: true,
                title: 'Choose Location',
                showBack: true,
                backgroundColor: context.themeSettings.background),
          ];
        },
        body: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            Container(
                decoration: BoxDecoration(
                  border: Border.all(),
                  borderRadius: BorderRadius.circular(5),
                ),
                width: width *0.90,
                height: height * 0.05,
                child: Row(
                  children: [
                    SizedBox(width: 10),
                    Icon(Icons.add_location),
                    SizedBox(width: 10),
                    TextField(),
                  ],
                ),
              ),

            Container(
              decoration: BoxDecoration(
                border: Border.all(
                  color: Colors.white,
                ),
                borderRadius: BorderRadius.circular(10),
              ),
              width: width * 0.90,
              height: height / 2,
              child: GoogleMap(
                myLocationButtonEnabled: false,
                zoomControlsEnabled: false,
                onMapCreated: onMapCreated,
                markers: markers,
                initialCameraPosition: CameraPosition(
                  target: LatLng(52.5722702, 13.4039918),
                  zoom: 15,
                ),
              ),
            ),
          ],
        ),
      ),

    );
  }
}
 

Комментарии:

1. Вы уже видели этот пакет: pub.dev/пакеты/flutter_google_places ? Если нет, вы можете попробовать это