import 'dart:async'; 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('tile'); Tile._() { _channel.setMethodCallHandler(_methodCallHandler); } static final Tile instance = Tile._(); final ObserverList _listeners = ObserverList(); Future _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;