og1_map 0.0.7
og1_map: ^0.0.7 copied to clipboard
OG1 Map package project.
example/lib/main.dart
import 'dart:convert';
import 'package:example/models/fuel_station.dart';
import 'package:example/widgets/place_content.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:og1_map/og1_map.dart';
import 'package:og1_system/og1_system.dart';
import 'package:collection/collection.dart';
void main() {
runApp(const Og1MapExample());
}
class Og1MapExample extends StatefulWidget {
const Og1MapExample({Key? key}) : super(key: key);
@override
_Og1MapExampleState createState() => _Og1MapExampleState();
}
class _Og1MapExampleState extends State<Og1MapExample> {
Place? placeDetails;
late List<FuelStation>? fuelStations;
@override
void initState() {
super.initState();
fuelStations = null;
_readJson();
}
@override
Widget build(BuildContext context) {
List<MarkerPoint> markerPoints = [];
if (fuelStations != null) {
markerPoints = fuelStationMarkerPoints(fuelStations!);
}
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: ThemeMode.system,
home: Scaffold(
resizeToAvoidBottomInset: false,
body: Og1Map(
markerPoints: markerPoints,
panelContent: placeDetails != null
? SnappingSheetContent(
draggable: true,
child: PlaceContent(
place: placeDetails!,
fuelStation: findFuelStationByPlace(placeDetails),
))
: null,
onPlaceTap: (place) {
setState(() {
placeDetails = place;
});
},
)));
}
Future<void> _readJson() async {
final String response =
await rootBundle.loadString('lib/mocks/fuel_stations.json');
dynamic jsonResponse = await json.decode(response);
fuelStations = FuelStation.parseFuelStations(jsonResponse);
setState(() => fuelStations = fuelStations);
}
List<MarkerPoint> fuelStationMarkerPoints(List<FuelStation> fuelStations) {
return fuelStations
.map((station) => MarkerPoint(
latitude: station.latitude,
longitude: station.longitude,
icon: Icon(
Icons.local_gas_station,
color: Colors.teal[700],
),
))
.toList();
}
FuelStation? findFuelStationByPlace(Place? place) {
if (place != null && fuelStations != null) {
return fuelStations!.firstWhereOrNull((station) =>
_round(station.latitude, 3) == _round(place.lat, 3) &&
_round(station.longitude, 3) == _round(place.lon, 3));
}
return null;
}
double _round(double number, int decimals) {
return double.parse(number.toStringAsFixed(decimals));
}
}