This repository has been archived on 2023-09-08. You can view files and clone it, but cannot push or open issues or pull requests.
moxplatform/packages/moxplatform_android/lib/src/service_android.dart

65 lines
1.8 KiB
Dart

import 'dart:convert';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:logging/logging.dart';
import 'package:meta/meta.dart';
import 'package:moxlib/moxlib.dart';
import 'package:moxplatform/moxplatform.dart';
import 'package:uuid/uuid.dart';
class AndroidBackgroundService extends BackgroundService {
AndroidBackgroundService()
: _log = Logger('AndroidBackgroundService'),
super();
@internal
static const MethodChannel channel =
MethodChannel('me.polynom.moxplatform_android_bg');
final Logger _log;
@override
void setNotification(String title, String body) {
channel.invokeMethod<void>(
'setNotificationBody',
[body],
);
}
@override
void sendEvent(BackgroundEvent event, {String? id}) {
final data = DataWrapper(
id ?? const Uuid().v4(),
event,
);
// NOTE: *S*erver to *F*oreground
_log.fine('S2F: ${data.toJson()}');
channel.invokeMethod<void>('sendData', jsonEncode(data.toJson()));
}
@override
void init(
Future<void> Function(String initialLocale) entrypoint,
Future<void> Function(Map<String, dynamic>? data) handleEvent,
String initialLocale,
) {
WidgetsFlutterBinding.ensureInitialized();
// Ensure that all native plugins are registered against this FlutterEngine, so that
// we can use path_provider, notifications, ...
DartPluginRegistrant.ensureInitialized();
// Register the event handler
channel.setMethodCallHandler((MethodCall call) async {
final args = call.arguments! as String;
await handleEvent(jsonDecode(args) as Map<String, dynamic>);
});
setNotification('Moxxy', 'Preparing...');
_log.finest('Running...');
entrypoint(initialLocale);
}
}