geolite_flutter_sdk 0.0.3
geolite_flutter_sdk: ^0.0.3 copied to clipboard
Flutter package for Geolite SDK integrating native Android and iOS implementations
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:geolite_flutter_sdk/geolite_flutter_sdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Geolite SDK Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const MyHomePage(title: 'Geolite SDK Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController _apiKeyController = TextEditingController();
final TextEditingController _cipherKeyController = TextEditingController();
final TextEditingController _userIdController = TextEditingController();
String _sdkStatus = 'Not initialized';
bool _isTracking = false;
Future<void> _requestLocationPermission() async {
try {
final result = await GeoliteFlutterSdk.requestLocationPermission();
setState(() {
_sdkStatus =
result
? 'Location permission granted'
: 'Location permission denied';
});
} catch (e) {
setState(() {
_sdkStatus = 'Error requesting permission: $e';
});
}
}
Future<void> _initializeSDK() async {
if (_apiKeyController.text.isEmpty ||
_cipherKeyController.text.isEmpty ||
_userIdController.text.isEmpty) {
setState(() {
_sdkStatus = 'Error: All fields are required';
});
return;
}
try {
final result = await GeoliteFlutterSdk.initialiseSDK(
_apiKeyController.text,
_cipherKeyController.text,
_userIdController.text,
);
setState(() {
if (result['success'] == true) {
_sdkStatus = 'SDK initialized successfully';
_isTracking = true; // SDK starts tracking on initialization
} else {
_sdkStatus = 'SDK initialization failed: ${result['errormessage']}';
}
});
} catch (e) {
setState(() {
_sdkStatus = 'Error: $e';
});
}
}
Future<void> _stopTracking() async {
try {
final result = await GeoliteFlutterSdk.stopTracking();
setState(() {
if (result['success'] == true) {
_isTracking = false;
_sdkStatus = 'Tracking stopped successfully';
} else {
_sdkStatus = 'Failed to stop tracking: ${result['errormessage']}';
}
});
} catch (e) {
setState(() {
_sdkStatus = 'Error: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextField(
controller: _apiKeyController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'API Key',
hintText: 'Enter your Geolite SDK API Key',
),
),
const SizedBox(height: 10),
TextField(
controller: _cipherKeyController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Cipher Key',
hintText: 'Enter your Geolite SDK Cipher Key',
),
),
const SizedBox(height: 10),
TextField(
controller: _userIdController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'User ID',
hintText: 'Enter your User ID',
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _requestLocationPermission,
child: const Text('Request Location Permission'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: _initializeSDK,
child: const Text('Initialize SDK'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: _isTracking ? _stopTracking : null,
style: ElevatedButton.styleFrom(
backgroundColor: _isTracking ? Colors.red : Colors.grey,
),
child: const Text('Stop Tracking'),
),
const SizedBox(height: 20),
Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.grey[200],
borderRadius: BorderRadius.circular(5),
),
child: Text(
'Status: $_sdkStatus',
style: Theme.of(context).textTheme.bodyLarge,
),
),
],
),
),
),
);
}
@override
void dispose() {
_apiKeyController.dispose();
_cipherKeyController.dispose();
_userIdController.dispose();
super.dispose();
}
}