189 lines
7.0 KiB
Dart

//import 'dart:async';
import 'dart:convert';
// 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
// 'package:flutter/services.dart';
//import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:manager_api_new/api.dart';
import 'package:mymuseum_visitapp/Models/visitContext.dart';
import 'package:mymuseum_visitapp/Screens/Sections/Map/flutter_map_view.dart';
import 'package:mymuseum_visitapp/Screens/Sections/Map/geo_point_filter.dart';
import 'package:mymuseum_visitapp/Screens/Sections/Map/map_box_view.dart';
import 'package:mymuseum_visitapp/Screens/Sections/Map/marker_view.dart';
import 'package:mymuseum_visitapp/app_context.dart';
import 'package:mymuseum_visitapp/constants.dart';
import 'package:provider/provider.dart';
/*import 'package:tablet_app/Components/loading.dart';
import 'package:tablet_app/Components/loading_common.dart';*/
//import 'dart:ui' as ui;
import 'package:flutter/widgets.dart';
//import 'package:http/http.dart' as http;
import 'google_map_view.dart';
//import 'package:image/image.dart' as IMG;
//Set<Marker> markers = {};
List<GeoPointDTO> markersList = [];
class MapPage extends StatefulWidget {
final MapDTO section;
final List<Map<String, dynamic>> icons;
MapPage({Key? key, required this.section, required this.icons}) : super(key: key);
@override
_MapPage createState() => _MapPage();
}
class _MapPage extends State<MapPage> {
MapDTO? mapDTO;
//Completer<GoogleMapController> _controller = Completer();
//Uint8List? selectedMarkerIcon;
late ValueNotifier<List<GeoPointDTO>> _geoPoints = ValueNotifier<List<GeoPointDTO>>([]);
/*Future<Uint8List> getBytesFromAsset(ByteData data, int width) async {
//ByteData data = await rootBundle.load(path);
ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(),
targetWidth: width);
ui.FrameInfo fi = await codec.getNextFrame();
return (await fi.image.toByteData(format: ui.ImageByteFormat.png))
!.buffer
.asUint8List();
}*/
@override
void initState() {
//mapDTO = MapDTO.fromJson(jsonDecode(widget.section.data!));
mapDTO = widget.section;
_geoPoints.value = mapDTO!.points!;
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
/*static final CameraPosition _kLake = CameraPosition(
bearing: 192.8334901395799,
target: LatLng(37.43296265331129, -122.08832357078792),
tilt: 59.440717697143555,
zoom: 59.151926040649414);*/
@override
Widget build(BuildContext context) {
//final mapContext = Provider.of<MapContext>(context);
final appContext = Provider.of<AppContext>(context);
VisitAppContext visitAppContext = appContext.getContext() as VisitAppContext;
var primaryColor = visitAppContext.configuration != null ? visitAppContext.configuration!.primaryColor != null ? Color(int.parse(visitAppContext.configuration!.primaryColor!.split('(0x')[1].split(')')[0], radix: 16)) : kSecondColor : kSecondColor;
/*return FutureBuilder(
future: getByteIcon(mapDTO!.iconSource),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
} else if (snapshot.connectionState == ConnectionState.none) {
return Text("No data");
} else {
return Center(
child: Container(
child: LoadingCommon()
)
);
}
}
);*/
return MediaQuery.removeViewInsets(
context: context,
removeBottom: true,
child: Stack(
fit: StackFit.passthrough,
children: <Widget>[
ValueListenableBuilder<List<GeoPointDTO>>(
valueListenable: _geoPoints,
builder: (context, value, _) {
switch(mapDTO!.mapProvider) {
case MapProvider.Google:
return GoogleMapView(language: appContext.getContext().language, geoPoints: value, mapDTO: mapDTO!, icons: widget.icons);
case MapProvider.MapBox:
return MapBoxView(language: appContext.getContext().language, geoPoints: value, mapDTO: mapDTO, icons: widget.icons);
// If mapbox bug as 3.24 flutter, we can test via this new widget
return FlutterMapView(language: appContext.getContext().language, geoPoints: value, mapDTO: mapDTO, icons: widget.icons);
default:
// By default google
return GoogleMapView(language: appContext.getContext().language, geoPoints: value, mapDTO: mapDTO!, icons: widget.icons);
}
}
),
GeoPointFilter(
language: visitAppContext.language!,
geoPoints: mapDTO!.points!,
categories: mapDTO!.categories!,
provider: mapDTO!.mapProvider == null ? MapProvider.Google : mapDTO!.mapProvider!,
filteredPoints: (value) {
_geoPoints.value = value!;
}),
MarkerViewWidget(),
Positioned(
top: 35,
left: 10,
child: SizedBox(
width: 50,
height: 50,
child: InkWell(
onTap: () {
Navigator.of(context).pop();
},
child: Container(
decoration: BoxDecoration(
color: primaryColor,
shape: BoxShape.circle,
),
child: const Icon(Icons.arrow_back, size: 23, color: Colors.white)
),
)
),
),
]
/*floatingActionButton: FloatingActionButton.extended(
onPressed: _goToTheLake,
label: Text('To the lake!'),
icon: Icon(Icons.directions_boat),
),*/
),
);
}
/*getByteIcon(String? source) async {
if(source != null) {
if(kIsWeb) {
Uint8List fileData = await http.readBytes(Uri.parse(source));
selectedMarkerIcon = resizeImage(fileData, 40);
} else {
final ByteData imageData = await NetworkAssetBundle(Uri.parse(source)).load("");
selectedMarkerIcon = await getBytesFromAsset(imageData, 50);
}
} else {
// default icon
final ByteData bytes = await rootBundle.load('assets/icons/marker.png');
selectedMarkerIcon = await getBytesFromAsset(bytes, 25);
}
}*/
/*Uint8List resizeImage(Uint8List data, int width) {
Uint8List resizedData = data;
IMG.Image img = IMG.decodeImage(data)!;
IMG.Image resized = IMG.copyResize(img, width: width);
resizedData = Uint8List.fromList(IMG.encodeJpg(resized));
return resizedData;
}*/
/*Future<void> _goToTheLake() async {
final GoogleMapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(_kLake));
}*/
}