forui_place_picker_google 1.0.2
forui_place_picker_google: ^1.0.2 copied to clipboard
ForUI 0.25 place picker for Google Maps, written in Dart for Flutter.
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_config/flutter_config.dart';
import 'package:forui/forui.dart';
import 'package:forui_place_picker_google/forui_place_picker_google.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (!kIsWeb) {
await FlutterConfig.loadEnvVariables();
}
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return WidgetsApp(
color: const Color(0xFF171717),
debugShowCheckedModeBanner: false,
localizationsDelegates: FLocalizations.localizationsDelegates,
supportedLocales: FLocalizations.supportedLocales,
pageRouteBuilder: <T>(RouteSettings settings, WidgetBuilder builder) {
return PageRouteBuilder<T>(
settings: settings,
pageBuilder: (context, animation, secondaryAnimation) =>
builder(context),
);
},
builder: (context, child) => FTheme(
data: FTheme.neutral.light.touch,
child: child ?? const SizedBox.shrink(),
),
home: const GooglePlacePickerExample(),
);
}
}
class GooglePlacePickerExample extends StatefulWidget {
const GooglePlacePickerExample({super.key});
@override
State<GooglePlacePickerExample> createState() =>
_GooglePlacePickerExampleState();
}
class _GooglePlacePickerExampleState extends State<GooglePlacePickerExample> {
GoogleMapController? mapController;
bool _useFreeGeocoding = false;
@override
Widget build(BuildContext context) {
return FScaffold(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FSwitch(
label: const Text('Use Free Geocoding'),
value: _useFreeGeocoding,
onChange: (value) {
setState(() {
_useFreeGeocoding = value;
});
},
),
const SizedBox(height: 16),
FButton(
onPress: showPlacePicker,
child: const Text('Pick Delivery location'),
),
],
),
);
}
void showPlacePicker() {
Navigator.of(context).push(
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) {
return PlacePicker(
useFreeGeocoding: _useFreeGeocoding,
mapsBaseUrl: kIsWeb
? 'https://cors-anywhere.herokuapp.com/https://maps.googleapis.com/maps/api/'
: 'https://maps.googleapis.com/maps/api/',
usePinPointingSearch: true,
apiKey: kIsWeb
? 'GOOGLE_MAPS_API_KEY_WEB'
: Platform.isAndroid
? FlutterConfig.get('GOOGLE_MAPS_API_KEY_ANDROID')
: FlutterConfig.get('GOOGLE_MAPS_API_KEY_IOS'),
onPlacePicked: (LocationResult result) {
debugPrint('Place picked: ${result.formattedAddress}');
Navigator.of(context).pop();
},
enableNearbyPlaces: false,
showSearchInput: true,
initialLocation: const LatLng(29.378586, 47.990341),
myLocationEnabled: true,
myLocationButtonEnabled: true,
onMapCreated: (controller) {
mapController = controller;
},
searchInputConfig: const SearchInputConfig(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
autofocus: false,
textDirection: TextDirection.ltr,
),
searchInputDecorationConfig: const SearchInputDecorationConfig(
hintText: 'Search for a building, street or ...',
),
autocompletePlacesSearchRadius: 150,
);
},
),
);
}
}