navigine_sdk 1.2.6 copy "navigine_sdk: ^1.2.6" to clipboard
navigine_sdk: ^1.2.6 copied to clipboard

A plugin to indoor navigate using navigine.

example/lib/main.dart

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

import 'package:navigine_sdk_example/image_view.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  NavigationThread? thread;
  Location? location;
  num progress = 0.0;

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  NavigineSDK? navigine;

  Future<void> initPlatformState() async {
    navigine = NavigineSDK.initializeSDK(
      userHash: "8367-95A0-958E-F488",
    );
    location = await navigine?.loadLocation(locationId: 107989);
    print(location);
    startNotificationListener();
    setState(() {
      subLocation = location!.subLocations[0];
    });
  }

  DeviceInfo? deviceInfo;

  startNotificationListener() async {
    subscriptions.add(location!.notificationStream().listen((event) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text(event.title),
        ),
      );
    }));
  }

  _startNavigation() async {
    thread = await location?.startNavigation();
    subscriptions.add(thread!.getDeviceInfoListener().listen((d) {
      setState(() {
        deviceInfo = d;
        deviceInfo?.paths.forEach((element) {
          print(element.points);
        });
      });
    }));
  }

  List<StreamSubscription> subscriptions = [];
  Location? l;
  SubLocation? subLocation;
  @override
  void dispose() {
    _cancelLocation();
    super.dispose();
  }

  _cancelLocation() {
    subscriptions.forEach((sub) {
      sub.cancel();
      subscriptions.remove(sub);
    });
    setState(() {
      deviceInfo = null;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Stack(
          children: <Widget>[
            LinearProgressIndicator(),
            if (subLocation != null)
              SubLocationWidget(
                subLocation: subLocation!,
                deviceInfo: deviceInfo,
                onVenueTapped: (v) {
                  print(v.name);
                },
              ),
            Column(
              children: [
                FlatButton(
                  child: Text("Get Location"),
                  onPressed: () async {
                    showDialog(
                      context: context,
                      builder: (_) => SimpleDialog(
                        children: location?.subLocations
                            .map(
                              (e) => ListTile(
                                title: Text(e.name),
                                onTap: () {
                                  setState(() {
                                    subLocation = e;
                                  });
                                  Navigator.pop(context);
                                },
                              ),
                            )
                            .toList(),
                      ),
                    );
                  },
                ),
                FlatButton(
                  child: Text("Start Locating"),
                  onPressed: () {
                    _startNavigation();
                  },
                ),
                FlatButton(
                  child: Text("Stop Locating"),
                  onPressed: () {
                    _cancelLocation();
                  },
                ),
                FlatButton(
                  child: Text("Get Route"),
                  onPressed: () {
                    thread?.cancelTarget();
                  },
                ),
                FlatButton(
                  child: Text("Add Target"),
                  onPressed: () {
                    print(subLocation!.width);
                    print(subLocation!.height);
                    thread?.addTarget(LocationPoint.fromData(
                      subLocation!.location,
                      subLocation!.id,
                      100,
                      100,
                    ));
                  },
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}
3
likes
110
pub points
36%
popularity

Publisher

verified publisheraawaz.dev

A plugin to indoor navigate using navigine.

Homepage

Documentation

API reference

License

BSD-3-Clause (LICENSE)

Dependencies

collection, flutter, meta

More

Packages that depend on navigine_sdk