|
|
|
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<StatefulWidget> createState() => RRTRequestPickupAddressPageState();
|
|
|
|
|
|
|
|
}
|
|
|
|
class RRTRequestPickupAddressPageState extends State<RRTRequestPickupAddressPage> with SingleTickerProviderStateMixin{
|
|
|
|
bool acceptTerms = false;
|
|
|
|
|
|
|
|
bool mapIdle = true;
|
|
|
|
Completer<GoogleMapController> mapController = Completer();
|
|
|
|
CameraPosition mapCameraPosition = CameraPosition(
|
|
|
|
target: LatLng(24.7114693, 46.67469582),
|
|
|
|
zoom: 14.4746,
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
List<dynamic> myAdresses = ["One","Two","Three",];
|
|
|
|
dynamic selectedAddress;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState(){
|
|
|
|
super.initState();
|
|
|
|
goToCurrentLocation();
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return BaseView<RRTViewModel>(
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|