import 'dart:async'; import 'package:diplomaticquarterapp/core/viewModels/er/rrt-view-model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_material_pickers/flutter_material_pickers.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class RRTRequestPickupAddressPage extends StatefulWidget{ @override State createState() => RRTRequestPickupAddressPageState(); } class RRTRequestPickupAddressPageState extends State with SingleTickerProviderStateMixin{ bool acceptTerms = false; bool mapIdle = true; Completer mapController = Completer(); CameraPosition mapCameraPosition = CameraPosition( target: LatLng(24.7114693, 46.67469582), zoom: 14.4746, ); List myAdresses = ["One","Two","Three",]; dynamic selectedAddress; @override void initState(){ super.initState(); goToCurrentLocation(); } @override Widget build(BuildContext context) { return BaseView( onModelReady: (viewModel){ }, builder: (ctx, vm, widget) => AppScaffold( appBarTitle: TranslationBase.of(context).pickupLocation, isShowAppBar: true, body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ selectAddress(), Expanded( child: Stack( children: [ GoogleMap( myLocationEnabled: true, onTap: moveToLocation, mapType: MapType.normal, initialCameraPosition: mapCameraPosition, onCameraIdle: (){ mapIdle = true; setState((){}); }, onCameraMove: (camPosition){ mapCameraPosition = camPosition; }, onCameraMoveStarted: (){ mapIdle = false; setState((){}); }, onMapCreated: (controller){ mapController.complete(controller); }, ), centerTargetPoint() ], ) ), continueButton() ], ) ) ); } Widget centerTargetPoint(){ double size = mapIdle ? 20 : 30; double margin = mapIdle ? 3 : 10; return Center( child: Container( width: size, height: size, decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), border: Border.all(width: 2, color: Theme.of(context).appBarTheme.color) ), child: Container( margin: EdgeInsets.all(margin), decoration: BoxDecoration( color: Theme.of(context).appBarTheme.color, borderRadius: BorderRadius.circular(20)) ), ), ); } Widget selectAddress(){ var text = selectedAddress == null ? TranslationBase.of(context).selectAddress : selectedAddress; return Container( margin: EdgeInsets.all(15), child: Expanded( child: MaterialButton( height: 50, color: Colors.white, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ), onPressed: openAddressSelectDialog, child: Row( children: [ Text(text, style: TextStyle(color: Colors.grey, fontSize: 13, letterSpacing: 1),), Spacer(), Icon(Icons.keyboard_arrow_down, size: 20, color: Colors.grey,) ], ), ), ), ); } Widget continueButton(){ return Padding( padding: const EdgeInsets.all(15), child: MaterialButton( height: 50, color: Theme.of(context).appBarTheme.color, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ), onPressed: () { }, child: Text(TranslationBase.of(context).continues, style: TextStyle(color: Colors.white, fontSize: 15, letterSpacing: 1),), ), ); } openAddressSelectDialog(){ showMaterialResponsiveDialog( hideButtons: true, context: context, title: "Select Address", child: ListView.separated( shrinkWrap: true, padding: EdgeInsets.all(10), itemCount: myAdresses.length, itemBuilder: (ctx,idx) { var itm = myAdresses[idx]; return ListTile( title: Text(itm.toString()), onTap: (){ setState(() { selectedAddress = itm; Navigator.pop(context); }); }, ); }, separatorBuilder: (ctx,idx) => Container(height: 0.25, color: Colors.grey.withOpacity(0.7),) ) ); } moveToLocation(LatLng location, {bool animate = true}) async{ await Future.delayed(Duration(milliseconds: 200)); mapCameraPosition = CameraPosition(target: location, zoom: 16.4746,); if(animate) (await mapController.future).animateCamera(CameraUpdate.newCameraPosition(mapCameraPosition),); else (await mapController.future).moveCamera(CameraUpdate.newCameraPosition(mapCameraPosition),); } goToCurrentLocation() async{ var location = await Geolocator.getLastKnownPosition(); if(location == null){ Geolocator.getCurrentPosition().then((value){ moveToLocation(LatLng(value.latitude, value.longitude)); }); return; } moveToLocation(LatLng(location.latitude, location.longitude), animate: false); } }