og1_map 0.0.7 copy "og1_map: ^0.0.7" to clipboard
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));
  }
}