geolocator 5.3.0 copy "geolocator: ^5.3.0" to clipboard
geolocator: ^5.3.0 copied to clipboard

outdated

Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.) functions.

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';

import 'pages/lookup_address_widget.dart';
import 'pages/calculate_distance_widget.dart';
import 'pages/current_location_widget.dart';
import 'pages/location_stream_widget.dart';

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

enum TabItem {
  singleLocation,
  singleFusedLocation,
  locationStream,
  distance,
  geocode
}

class GeolocatorExampleApp extends StatefulWidget {
  @override
  State<GeolocatorExampleApp> createState() => BottomNavigationState();
}

class BottomNavigationState extends State<GeolocatorExampleApp> {
  TabItem _currentItem = TabItem.singleLocation;
  final List<TabItem> _bottomTabs = [
    TabItem.singleLocation,
    if (Platform.isAndroid) TabItem.singleFusedLocation,
    TabItem.locationStream,
    TabItem.distance,
    TabItem.geocode,
  ];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Geolocator Example App'),
        ),
        body: _buildBody(),
        bottomNavigationBar: _buildBottomNavigationBar(),
      ),
    );
  }

  Widget _buildBody() {
    switch (_currentItem) {
      case TabItem.locationStream:
        return LocationStreamWidget();
      case TabItem.distance:
        return CalculateDistanceWidget();
      case TabItem.singleFusedLocation:
        return CurrentLocationWidget(androidFusedLocation: true);
      case TabItem.geocode:
        return LookupAddressWidget();
      case TabItem.singleLocation:
      default:
        return CurrentLocationWidget(androidFusedLocation: false);
    }
  }

  Widget _buildBottomNavigationBar() {
    return BottomNavigationBar(
      type: BottomNavigationBarType.fixed,
      items: _bottomTabs
          .map((tabItem) =>
              _buildBottomNavigationBarItem(_icon(tabItem), tabItem))
          .toList(),
      onTap: _onSelectTab,
    );
  }

  BottomNavigationBarItem _buildBottomNavigationBarItem(
      IconData icon, TabItem tabItem) {
    final String text = _title(tabItem);
    final Color color =
        _currentItem == tabItem ? Theme.of(context).primaryColor : Colors.grey;

    return BottomNavigationBarItem(
      icon: Icon(
        icon,
        color: color,
      ),
      title: Text(
        text,
        style: TextStyle(
          color: color,
        ),
      ),
    );
  }

  void _onSelectTab(int index) {
    TabItem selectedTabItem = _bottomTabs[index];

    setState(() {
      _currentItem = selectedTabItem;
    });
  }

  String _title(TabItem item) {
    switch (item) {
      case TabItem.singleLocation:
        return 'Single';
      case TabItem.singleFusedLocation:
        return 'Single (Fused)';
      case TabItem.locationStream:
        return 'Stream';
      case TabItem.distance:
        return 'Distance';
      case TabItem.geocode:
        return 'Geocode';
      default:
        throw 'Unknown: $item';
    }
  }

  IconData _icon(TabItem item) {
    switch (item) {
      case TabItem.singleLocation:
        return Icons.location_on;
      case TabItem.singleFusedLocation:
        return Icons.location_on;
      case TabItem.locationStream:
        return Icons.clear_all;
      case TabItem.distance:
        return Icons.redo;
      case TabItem.geocode:
        return Icons.compare_arrows;
      default:
        throw 'Unknown: $item';
    }
  }
}
5563
likes
0
pub points
100%
popularity

Publisher

verified publisherbaseflow.com

Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.) functions.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

equatable, flutter, google_api_availability, location_permissions, meta, vector_math

More

Packages that depend on geolocator