Skip to main content

naeil_location 0.0.3 copy "naeil_location: ^0.0.3" to clipboard
naeil_location: ^0.0.3 copied to clipboard

A high-performance Flutter package for retrieving current GPS location and matching it with Korean administrative address data.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:naeil_location/naeil_location.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Naeil Location Example',
      theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), useMaterial3: true),
      home: const LocationPage(),
    );
  }
}

class LocationPage extends StatefulWidget {
  const LocationPage({super.key});

  @override
  State<LocationPage> createState() => _LocationPageState();
}

class _LocationPageState extends State<LocationPage> {
  LocationData? _locationData;
  String _status = 'Press the button to get location';
  bool _isLoading = false;

  Future<void> _getLocation() async {
    setState(() {
      _isLoading = true;
      _status = 'Getting location...';
    });

    try {
      // Check permission first
      final hasPermission = await NaeilLocation.requestPermission();
      if (!hasPermission) {
        setState(() {
          _status = 'Permission denied';
          _isLoading = false;
        });
        return;
      }

      // Get location with address
      final data = await NaeilLocation.getCurrentLocationWithAddress();

      setState(() {
        _locationData = data;
        _status = 'Success';
        _isLoading = false;
      });
    } catch (e) {
      setState(() {
        _status = 'Error: $e';
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Naeil Location Example'), backgroundColor: Theme.of(context).colorScheme.inversePrimary),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(20.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              if (_isLoading)
                const CircularProgressIndicator()
              else ...[
                Text(_status, textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyLarge),
                const SizedBox(height: 20),
                if (_locationData != null) ...[
                  Card(
                    elevation: 4,
                    child: Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          _buildInfoRow('Address', _locationData!.fullAddress),
                          const Divider(),
                          _buildInfoRow('Level 1', _locationData!.address.level1 ?? '-'),
                          _buildInfoRow('Level 2', _locationData!.address.level2 ?? '-'),
                          _buildInfoRow('Level 3', _locationData!.address.level3 ?? '-'),
                          const Divider(),
                          _buildInfoRow('Latitude', _locationData!.latitude.toStringAsFixed(6)),
                          _buildInfoRow('Longitude', _locationData!.longitude.toStringAsFixed(6)),
                          const Divider(),
                          _buildInfoRow('Grid X', _locationData!.gridX?.toString() ?? '-'),
                          _buildInfoRow('Grid Y', _locationData!.gridY?.toString() ?? '-'),
                          _buildInfoRow('Distance', '${_locationData!.distanceMeters?.toStringAsFixed(1)}m'),
                        ],
                      ),
                    ),
                  ),
                ],
                const SizedBox(height: 30),
                FilledButton.icon(
                  onPressed: _getLocation,
                  icon: const Icon(Icons.location_on),
                  label: const Text('Get Current Location'),
                ),
              ],
            ],
          ),
        ),
      ),
    );
  }

  Widget _buildInfoRow(String label, String value) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 4.0),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          SizedBox(
            width: 80,
            child: Text(label, style: const TextStyle(fontWeight: FontWeight.bold)),
          ),
          Expanded(child: Text(value)),
        ],
      ),
    );
  }
}
0
likes
120
points
14
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A high-performance Flutter package for retrieving current GPS location and matching it with Korean administrative address data.

Repository (GitHub)

License

unknown (license)

Dependencies

flutter, location

More

Packages that depend on naeil_location