import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; class SystemInsetsService { SystemInsetsService._(); static final instance = SystemInsetsService._(); static const _ch = MethodChannel('com.camelsoft.wanisclient/background'); Future bottomPadding(BuildContext context) async { // fast path: use flutter's insets first final mq = MediaQuery.maybeOf(context); final mqPad = mq?.viewPadding.bottom ?? 0.0; // safe area (ignores keyboard) if (mqPad > 0) return mqPad; // android native fallback try { final res = await _ch.invokeMethod('get_navbar_metrics'); final px = (res?['inset_bottom'] ?? res?['height'] ?? 0) as int; final dpr = View.of(context).devicePixelRatio; return px / dpr; // convert px -> logical } catch (_) { return 0.0; } } }