nb_navigation_flutter 3.4.0 copy "nb_navigation_flutter: ^3.4.0" to clipboard
nb_navigation_flutter: ^3.4.0 copied to clipboard

A Flutter plugin for Nextbillion.ai Navigation SDK, providing turn-by-turn navigation.

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:nb_navigation_flutter_example/custom_navigation_style.dart';
import 'package:nb_navigation_flutter_example/draw_route_line.dart';
import 'package:nb_navigation_flutter_example/launch_embedded_navigation_view.dart';
import 'package:nb_navigation_flutter_example/launch_navigation.dart';
import 'package:nb_navigation_flutter_example/map_view_style.dart';
import 'package:nb_navigation_flutter_example/navigation_theme_mode.dart';
import 'package:nb_navigation_flutter_example/route_line_style.dart';
import 'package:nb_navigation_flutter_example/track_current_location.dart';
import 'package:nb_navigation_flutter/nb_navigation_flutter.dart';

import 'custom_view_on_navigation_view.dart';
import 'draw_route_line_with_raw_json.dart';
import 'embedded_navigation_view_integration.dart';
import 'full_navigation_example.dart';
import 'launch_preview_screen.dart';

final Map<String, Widget> _allPages = <String, Widget>{
  FullNavigationExample.title: const FullNavigationExample(),
  LaunchEmbeddedNavigationView.title: const LaunchEmbeddedNavigationView(),
  CustomViewOnNavigationView.title: const CustomViewOnNavigationView(),
  LaunchNavigation.title: const LaunchNavigation(),
  DrawRouteLine.title: const DrawRouteLine(),
  DrawRouteLineWithRawJson.title: const DrawRouteLineWithRawJson(),
  TrackCurrentLocation.title: const TrackCurrentLocation(),
  RouteLineStyle.title: const RouteLineStyle(),
  CustomNavigationStyle.title: const CustomNavigationStyle(),
  MapViewStyle.title: const MapViewStyle(),
  NavigationTheme.title: const NavigationTheme(),
  EmbeddedNavigationViewIntegration.title:
      const EmbeddedNavigationViewIntegration(),
  LaunchPreviewScreen.title: const LaunchPreviewScreen(),
};

class NavigationDemo extends StatefulWidget {
  static const String accessKey = String.fromEnvironment("ACCESS_KEY");

  const NavigationDemo({super.key});

  @override
  State<NavigationDemo> createState() => _NavigationDemoState();
}

class _NavigationDemoState extends State<NavigationDemo> {
  static const MethodChannel _permissionChannel = MethodChannel(
    'nb_navigation_flutter_example/permissions',
  );

  @override
  void initState() {
    super.initState();
    // NBNavigation.initNextBillion(NavigationDemo.accessKey);

    NBNavigation.initNextBillionWithTileServer(accessKey: NavigationDemo.accessKey, server: WellKnownTileServer.nbTomtom);

    // Set user ID If needed
    NBNavigation.setUserId("123344").then((value) {});

    // Check user ID If needed
    NBNavigation.getUserId().then((value) {});

    // Get NB ID If needed
    NBNavigation.getNBId().then((value) {});

    _requestLocationPermission(showDeniedMessage: false);
  }

  Future<bool> _requestLocationPermission({
    required bool showDeniedMessage,
  }) async {
    if (!Platform.isAndroid && !Platform.isIOS) {
      return true;
    }

    try {
      final bool granted =
          await _permissionChannel.invokeMethod<bool>('requestLocationPermission') ??
              false;
      if (!granted && showDeniedMessage && mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(
            content: Text('Location permission is required for navigation.'),
          ),
        );
      }
      return granted;
    } on PlatformException {
      if (showDeniedMessage && mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(
            content: Text('Unable to request location permission.'),
          ),
        );
      }
      return false;
    }
  }

  Future<void> _pushPage(BuildContext context, Widget page) async {
    if (!mounted) {
      return;
    }

    final bool hasPermission = await _requestLocationPermission(
      showDeniedMessage: true,
    );
    if (!hasPermission || !mounted) {
      return;
    }

    WidgetsBinding.instance.addPostFrameCallback((_) {
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => Builder(
            builder: (newContext) => page,
          ),
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('NBNavigation examples')),
      body: NavigationDemo.accessKey.isEmpty
          ? buildAccessTokenWarning()
          : ListView.separated(
              itemCount: _allPages.length,
              separatorBuilder: (BuildContext context, int index) =>
                  const Divider(height: 1),
              itemBuilder: (_, int index) => ListTile(
                  title: Text(_allPages.keys.toList()[index]),
                  onTap: () {
                    _pushPage(context, _allPages.values.toList()[index]);
                  }),
            ),
    );
  }

  Widget buildAccessTokenWarning() {
    return Container(
      color: Colors.red[900],
      child: SizedBox.expand(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            "Using MapView requires calling Nextbillion.initNextbillion(String accessKey) "
                "before inflating or creating NBMap Widget. ",
          ]
              .map((text) => Padding(
                    padding: const EdgeInsets.all(8),
                    child: Text(text,
                        textAlign: TextAlign.center,
                        style: const TextStyle(
                            fontSize: 14,
                            fontWeight: FontWeight.bold,
                            color: Colors.white)),
                  ))
              .toList(),
        ),
      ),
    );
  }
}

void main() {
  runApp(const MaterialApp(home: NavigationDemo()));
}
4
likes
160
points
913
downloads

Documentation

API reference

Publisher

verified publishernextbillion.ai

Weekly Downloads

A Flutter plugin for Nextbillion.ai Navigation SDK, providing turn-by-turn navigation.

Homepage
Repository (GitHub)
View/report issues

License

BSD-3-Clause (license)

Dependencies

flutter, nb_maps_flutter, plugin_platform_interface

More

Packages that depend on nb_navigation_flutter

Packages that implement nb_navigation_flutter