geofence_foreground_service 1.0.5 copy "geofence_foreground_service: ^1.0.5" to clipboard
geofence_foreground_service: ^1.0.5 copied to clipboard

A Flutter project that creates a foreground service to handle geofencing.

example/lib/main.dart

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:geofence_foreground_service/constants/geofence_event_type.dart';
import 'package:geofence_foreground_service/exports.dart';
import 'dart:async';

import 'package:geofence_foreground_service/geofence_foreground_service.dart';
import 'package:geofence_foreground_service/models/zone.dart';
import 'package:permission_handler/permission_handler.dart';

@pragma('vm:entry-point')
void callbackDispatcher() async {
  GeofenceForegroundService().handleTrigger(
    backgroundTriggerHandler: (zoneID, triggerType) {
      log(zoneID, name: 'zoneID');

      if (triggerType == GeofenceEventType.enter) {
        log('enter', name: 'triggerType');
      } else if (triggerType == GeofenceEventType.exit) {
        log('exit', name: 'triggerType');
      } else if (triggerType == GeofenceEventType.dwell) {
        log('dwell', name: 'triggerType');
      } else {
        log('unknown', name: 'triggerType');
      }

      return Future.value(true);
    },
  );
}

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final GeofenceForegroundService _geofenceForegroundServicePlugin =
      GeofenceForegroundService();

  final List<LatLng> timesSquarePolygon = [
    const LatLng(40.758078, -73.985640),
    const LatLng(40.757983, -73.985417),
    const LatLng(40.757881, -73.985493),
    const LatLng(40.757956, -73.985688),
  ];

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    await Permission.location.request();
    await Permission.locationAlways.request();
    await Permission.notification.request();

    bool hasServiceStarted =
        await _geofenceForegroundServicePlugin.startGeofencingService(
      contentTitle: 'Test app is running in the background',
      contentText:
          'Test app will be running to ensure seamless integration with ops team',
      notificationChannelId: 'com.app.geofencing_notifications_channel',
      serviceId: 525600,
      isInDebugMode: true,
      callbackDispatcher: callbackDispatcher,
    );

    if (hasServiceStarted) {
      await _geofenceForegroundServicePlugin.addGeofenceZone(
        zone: Zone(
          id: 'zone#1_id',
          radius: 10000,
          coordinates: timesSquarePolygon,
        ),
      );
    }

    log(hasServiceStarted.toString(), name: 'hasServiceStarted');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
      ),
    );
  }
}
20
likes
0
pub points
79%
popularity

Publisher

verified publisher525k.io

A Flutter project that creates a foreground service to handle geofencing.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, latlng, plugin_platform_interface

More

Packages that depend on geofence_foreground_service