Files
FlClash/lib/plugins/tile.dart
T
chen08209 d3fa2252b0 feat(android): add launcher shortcuts and one-step on-demand access
Changelog: Launcher shortcuts and one-step on-demand access
2026-10-11 12:28:52 +08:00

59 lines
1.3 KiB
Dart

import 'dart:async';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
abstract mixin class TileListener {
void onStart() {}
void onDetached() {}
}
class Tile {
final MethodChannel _channel = const MethodChannel('$packageName/tile');
Tile._() {
_channel.setMethodCallHandler(_methodCallHandler);
}
static final Tile instance = Tile._();
final ObserverList<TileListener> _listeners = ObserverList<TileListener>();
Future<void> _methodCallHandler(MethodCall call) async {
for (final TileListener listener in List.of(_listeners)) {
try {
switch (call.method) {
case 'start':
listener.onStart();
break;
case 'detached':
listener.onDetached();
break;
}
} catch (error) {
commonPrint.log(
'Unable to dispatch Tile event ${call.method}: $error',
logLevel: LogLevel.error,
);
}
}
}
bool get hasListeners {
return _listeners.isNotEmpty;
}
void addListener(TileListener listener) {
_listeners.add(listener);
}
void removeListener(TileListener listener) {
_listeners.remove(listener);
}
}
final tile = system.isAndroid ? Tile.instance : null;