allinone_location 1.0.6
allinone_location: ^1.0.6 copied to clipboard
Unified Flutter package for permission handling, multi-sample high-accuracy location, and screen-off background location tracking.
import 'package:flutter/material.dart';
import 'package:allinone_location/allinone_location.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'AllInOne Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _status = 'Idle';
AllInOneLocation? _currentLocation;
bool _isTracking = false;
Future<void> _requestPermissions() async {
setState(() => _status = 'Requesting permissions...');
final results = await AllInOnePermission.requestAllPermissions();
final bool anyGranted = results.values.any((status) => status.isGranted);
setState(() {
_status = anyGranted ? 'Permissions Granted' : 'Permissions Denied';
});
}
Future<void> _getLocation() async {
setState(() => _status = 'Fetching location...');
try {
final location = await AllInOneLocationService.getCurrentLocation();
setState(() {
_currentLocation = location;
_status = 'Location obtained';
});
} catch (e) {
setState(() => _status = 'Location Error: $e');
}
}
Future<void> _toggleTracking() async {
if (_isTracking) {
await AllInOneBackground.stopTracking();
setState(() {
_isTracking = false;
_status = 'Tracking Stopped';
});
} else {
await AllInOneBackground.initializeService();
await AllInOneBackground.startTracking();
setState(() {
_isTracking = true;
_status = 'Tracking Started';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('AllInOne Package Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Text('Status: $_status', style: Theme.of(context).textTheme.titleMedium),
const SizedBox(height: 8),
if (_currentLocation != null) ...[
Text('Lat: ${_currentLocation!.latitude}'),
Text('Lng: ${_currentLocation!.longitude}'),
Text('Accuracy: ${_currentLocation!.accuracy} m'),
],
],
),
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _requestPermissions,
child: const Text('Request Permissions'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: _getLocation,
child: const Text('Get Current Location'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: _toggleTracking,
child: Text(_isTracking ? 'Stop Background Tracking' : 'Start Background Tracking'),
),
],
),
),
);
}
}