Support core status check and force restart Optimize proxies page and access page Update flutter and pub dependencies Update go version Optimize more details
57 lines
1.2 KiB
Dart
57 lines
1.2 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:fl_clash/common/constant.dart';
|
|
import 'package:fl_clash/common/system.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/services.dart';
|
|
|
|
abstract mixin class TileListener {
|
|
void onStart() {}
|
|
|
|
void onStop() {}
|
|
|
|
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 _listeners) {
|
|
switch (call.method) {
|
|
case 'start':
|
|
listener.onStart();
|
|
break;
|
|
case 'stop':
|
|
listener.onStop();
|
|
break;
|
|
case 'detached':
|
|
listener.onDetached();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|