mk_offline_geolocator 0.0.1-dev copy "mk_offline_geolocator: ^0.0.1-dev" to clipboard
mk_offline_geolocator: ^0.0.1-dev copied to clipboard

discontinued
PlatformAndroidiOS

A flutter plugin to support offline geolocator feature on MK operate road network.

example/lib/main.dart

import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:async';

import 'package:mk_offline_geolocator/mk_offline_geolocator.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(
    const MyApp(),
  );
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isTrackingEnabled = false;
  bool showCurrentPosition = false;
  bool showCaptureImage = false;
  bool showImagePreview = false;
  bool showLoadingIndicator = false;
  MkOfflineGeolocator geolocator = MkOfflineGeolocator(
    config: Configuration(
      gpkgInfoUrl: 'http://kira-lite-dev.kozut.local/api/gpkg/info',
      gpkgDownloadUrl: 'http://kira-lite-dev.kozut.local/api/gpkg/download',
    ),
  );
  late StreamSubscription geolocatorSubscriptor;
  late SectionLocationData currentLocationData;
  final List<SectionLocationData> _initialSectionLocation = [
    SectionLocationData(
      kszam: '0',
      km: 0,
      m: 0,
      pkod: 0,
      szakLabel: '0',
      leiras: '0',
      wgs84X: 0,
      wgs84Y: 0,
    )
  ];
  final ImagePicker _picker = ImagePicker();
  late XFile? _cameraImage;
  late Uint8List _subtitledImageBytes;

  @override
  void initState() {
    super.initState();
    geolocator.trackNearRoadsList().listen((event) {
      print(event);
    });
    printTopoInfo();
  }

  Future<void> printTopoInfo() async {
    try {
      print(await geolocator.getRemoteTopologyInfo());
      geolocator.updateTopologyGpkg().listen((event) {
        print(event);
      });
    } catch (e) {
      print(e);
    }
  }

  @override
  void dispose() {
    // Dispose of the controller when the widget is disposed.

    super.dispose();
  }

  void getCurrentLocation() async {
    bool newStatus = !showCurrentPosition;

    if (newStatus) {
      List<SectionLocationData> geocodedLocation =
          await geolocator.getLocationData();
      setState(() {
        currentLocationData = geocodedLocation[0];
        showCurrentPosition = newStatus;
      });
    } else {
      setState(() {
        showCurrentPosition = newStatus;
      });
    }
  }

  void toggleLocationTracking() {
    setState(() {
      isTrackingEnabled = !isTrackingEnabled;
    });
  }

  void _getImageFromCamera() async {
    _cameraImage = await _picker.pickImage(
      source: ImageSource.camera,
    );

    setState(() {
      showCaptureImage = true;
      showLoadingIndicator = true;
    });

    print(_cameraImage!.path);
    _subtitledImageBytes =
        await geolocator.getSubtitledImage(_cameraImage!.path, resize: true);
    setState(() {
      showLoadingIndicator = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('MK Offline Geolocator Tester'),
        ),
        body: Column(
          children: [
            Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                ElevatedButton(
                  onPressed: getCurrentLocation,
                  child: Text(showCurrentPosition
                      ? "Hide current position"
                      : "Get current position"),
                ),
                ElevatedButton(
                  onPressed: toggleLocationTracking,
                  child: Text(
                    isTrackingEnabled
                        ? "Stop location tracking"
                        : "Start location tracking",
                  ),
                )
              ],
            ),
            Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                isTrackingEnabled
                    ? StreamBuilder<List<SectionLocationData>>(
                        stream: geolocator.trackLocation(),
                        initialData: _initialSectionLocation,
                        builder: (
                          BuildContext context,
                          AsyncSnapshot<List<SectionLocationData>> snapshot,
                        ) {
                          if (snapshot.connectionState ==
                              ConnectionState.waiting) {
                            return Column(
                              crossAxisAlignment: CrossAxisAlignment.center,
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                Visibility(
                                  visible: snapshot.hasData,
                                  child: Column(
                                    children: [
                                      Text(
                                        "Útszám: ${snapshot.data![0].kszam} (${snapshot.data![0].pkod}): ${snapshot.data![0].km} + ${snapshot.data![0].m}",
                                      ),
                                      Text(
                                          "Közeli utak száma: ${snapshot.data!.length}")
                                    ],
                                  ),
                                ),
                              ],
                            );
                          } else if (snapshot.connectionState ==
                                  ConnectionState.active ||
                              snapshot.connectionState ==
                                  ConnectionState.done) {
                            if (snapshot.hasError) {
                              return Text(snapshot.error.toString());
                            } else if (snapshot.hasData) {
                              return Column(
                                children: [
                                  Text(
                                    "Útszám: ${snapshot.data![0].kszam} (${snapshot.data![0].pkod}): ${snapshot.data![0].km} + ${snapshot.data![0].m}",
                                  ),
                                  Text(
                                      "Közeli utak száma: ${snapshot.data!.length}")
                                ],
                              );
                            } else {
                              return const Text('Empty data');
                            }
                          } else {
                            return Text('State: ${snapshot.connectionState}');
                          }
                        },
                      )
                    : const Text("Location tracking is disabled"),
              ],
            ),
            showCurrentPosition
                ? Row(
                    crossAxisAlignment: CrossAxisAlignment.center,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      const Text("Actual position: "),
                      const SizedBox(width: 20),
                      Text(
                        "Útszám: ${currentLocationData.kszam} (${currentLocationData.pkod}): ${currentLocationData.km} + ${currentLocationData.m}",
                      )
                    ],
                  )
                : const Text("Current location unknown"),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                ElevatedButton.icon(
                  onPressed: _getImageFromCamera,
                  icon: const Icon(Icons.camera_alt),
                  label: const Text(
                    "Take picture",
                  ),
                ),
              ],
            ),
            showCaptureImage
                ? Expanded(
                    child: showLoadingIndicator
                        ? const CircularProgressIndicator()
                        : Image.memory(_subtitledImageBytes),
                  )
                : const Center(
                    child: Text(
                      "No image to show",
                    ),
                  ),
          ],
        ),
      ),
    );
  }
}
0
likes
100
points
3
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A flutter plugin to support offline geolocator feature on MK operate road network.

Homepage

License

unknown (license)

Dependencies

dart_hydrologis_db, dart_jts, flutter, flutter_geopackage, geolocator, http, image, path, path_provider, proj4dart, sqlite3_flutter_libs

More

Packages that depend on mk_offline_geolocator

Packages that implement mk_offline_geolocator