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
140
points
4
downloads

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)

Documentation

API reference

License

unknown (license)

Dependencies

flutter, location

More

Packages that depend on naeil_location