map_plugin 0.0.3 map_plugin: ^0.0.3 copied to clipboard
A Flutter plugin for integrating Maps in Android applications with Multiple Markers.
map_plugin #
A new flutter plugin for displaying google maps on Android with Multiple Markers
Getting Started #
Generate your API Key #
- Go to: https://console.developers.google.com/
- Choose the project that you want to enable Google Maps on
- Enable
Maps SDK for Android
- Under
Credentials
, chooseCreate Credential
.
- More detailed instructions for Android can be found here: https://developers.google.com/maps/documentation/android-sdk/signup
Specify your API key in the application manifest android/app/src/main/AndroidManifest.xml
:
<manifest ...
<application ...
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="YOUR KEY HERE"/>
Ensure the following permission is present in your Android Manifest file, located in
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Add this to your package's pubspec.yaml file:
dependencies:
map_plugin: any # or the latest version on Pub
Now in your Dart code, you can use:
import 'package:map_plugin/map_plugin.dart';
Example #
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:map_plugin/map_plugin.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class HomePage extends StatefulWidget {
@override
HomePageState createState() => HomePageState();
}
class HomePageState extends State<HomePage> {
Completer<MapController> _controller = Completer();
@override
void initState() {
super.initState();
}
double zoomVal=5.0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Map"),
),
body: Stack(
children: <Widget>[
_GoogleMap(context),
_zoomminusfunction(),
_zoomplusfunction(),
_buildContainer(),
],
),
);
}
Widget _zoomminusfunction() {
return Align(
alignment: Alignment.topLeft,
child: IconButton(
icon: Icon(FontAwesomeIcons.searchMinus,color:Colors.red),
onPressed: () {
zoomVal--;
_minus( zoomVal);
}),
);
}
Widget _zoomplusfunction() {
return Align(
alignment: Alignment.topRight,
child: IconButton(
icon: Icon(FontAwesomeIcons.searchPlus,color:Colors.red),
onPressed: () {
zoomVal++;
_plus(zoomVal);
}),
);
}
Future<void> _minus(double zoomVal) async {
final MapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(40.712776, -74.005974), zoom: zoomVal)));
}
Future<void> _plus(double zoomVal) async {
final MapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(40.712776, -74.005974), zoom: zoomVal)));
}
Widget _buildContainer() {
return Align(
alignment: Alignment.bottomLeft,
child: Container(
margin: EdgeInsets.symmetric(vertical: 20.0),
height: 150.0,
child: ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
SizedBox(width: 10.0),
Padding(
padding: const EdgeInsets.all(8.0),
child: _boxes(
"https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no",
40.738380, -73.988426,"Gramercy Tavern"),
),
SizedBox(width: 10.0),
Padding(
padding: const EdgeInsets.all(8.0),
child: _boxes(
"https://lh5.googleusercontent.com/p/AF1QipMKRN-1zTYMUVPrH-CcKzfTo6Nai7wdL7D8PMkt=w340-h160-k-no",
40.761421, -73.981667,"Le Bernardin"),
),
SizedBox(width: 10.0),
Padding(
padding: const EdgeInsets.all(8.0),
child: _boxes(
"https://images.unsplash.com/photo-1504940892017-d23b9053d5d4?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60",
40.732128, -73.999619,"Blue Hill"),
),
],
),
),
);
}
Widget _boxes(String _image, double lat,double long,String restaurantName) {
return GestureDetector(
onTap: () {
_gotoLocation(lat,long);
},
child:Container(
child: new FittedBox(
child: Material(
color: Colors.white,
elevation: 14.0,
borderRadius: BorderRadius.circular(24.0),
shadowColor: Color(0x802196F3),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
width: 180,
height: 200,
child: ClipRRect(
borderRadius: new BorderRadius.circular(24.0),
child: Image(
fit: BoxFit.fill,
image: NetworkImage(_image),
),
),),
Container(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: myDetailsContainer1(restaurantName),
),
),
],)
),
),
),
);
}
Widget myDetailsContainer1(String restaurantName) {
return Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 8.0),
child: Container(
child: Text(restaurantName,
style: TextStyle(
color: Colors.blue,
fontSize: 24.0,
fontWeight: FontWeight.bold),
)),
),
],
);
}
Widget _GoogleMap(BuildContext context) {
return Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: MyMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: LatLng(40.712776, -74.005974), zoom: 12),
onMapCreated: (MapController controller) {
_controller.complete(controller);
},
markers: {
newyork1Marker,newyork2Marker,newyork3Marker,gramercyMarker,bernardinMarker,blueMarker
},
),
);
}
Future<void> _gotoLocation(double lat,double long) async {
final MapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(lat, long), zoom: 15,tilt: 50.0,
bearing: 45.0,)));
}
}
Marker gramercyMarker = Marker(
markerId: MarkerId('gramercy'),
position: LatLng(40.738380, -73.988426),
infoWindow: InfoWindow(title: 'Gramercy Tavern'),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueRed,
),
);
Marker bernardinMarker = Marker(
markerId: MarkerId('bernardin'),
position: LatLng(40.761421, -73.981667),
infoWindow: InfoWindow(title: 'Le Bernardin'),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueRed,
),
);
Marker blueMarker = Marker(
markerId: MarkerId('bluehill'),
position: LatLng(40.732128, -73.999619),
infoWindow: InfoWindow(title: 'Blue Hill'),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueRed,
),
);
//New York Marker
Marker newyork1Marker = Marker(
markerId: MarkerId('newyork1'),
position: LatLng(40.742451, -74.005959),
infoWindow: InfoWindow(title: 'Los Tacos'),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueRed,
),
);
Marker newyork2Marker = Marker(
markerId: MarkerId('newyork2'),
position: LatLng(40.729640, -73.983510),
infoWindow: InfoWindow(title: 'Tree Bistro'),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueRed,
),
);
Marker newyork3Marker = Marker(
markerId: MarkerId('newyork3'),
position: LatLng(40.719109, -74.000183),
infoWindow: InfoWindow(title: 'Le Coucou'),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueRed,
),
);