100 lines
3.0 KiB
Dart
Raw Normal View History

2024-10-28 20:10:55 +01:00
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_blue_plus_windows/flutter_blue_plus_windows.dart';
2024-11-12 13:57:14 +01:00
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:forui/forui.dart';
import 'package:xiao_pet_tracker/app_router/app_router.dart';
import 'package:xiao_pet_tracker/bootstrap.dart';
2024-10-28 20:10:55 +01:00
import 'package:xiao_pet_tracker/l10n/l10n.dart';
2024-11-12 13:57:14 +01:00
class AppView extends StatefulWidget {
const AppView({super.key});
2024-10-28 20:10:55 +01:00
@override
2024-11-12 13:57:14 +01:00
State<AppView> createState() => _AppState();
2024-10-28 20:10:55 +01:00
}
2024-11-12 13:57:14 +01:00
class _AppState extends State<AppView> {
2024-10-28 20:10:55 +01:00
BluetoothAdapterState _adapterState = BluetoothAdapterState.unknown;
late StreamSubscription<BluetoothAdapterState> _adapterStateStateSubscription;
@override
void initState() {
super.initState();
_adapterStateStateSubscription =
FlutterBluePlus.adapterState.listen((state) {
_adapterState = state;
if (mounted) {
setState(() {});
}
});
}
@override
void dispose() {
_adapterStateStateSubscription.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
2024-11-13 21:22:29 +01:00
// Widget screen = _adapterState == BluetoothAdapterState.on
// ? const HomePage()
// : BluetoothOffScreen(
// adapterState: _adapterState,
// );
2024-10-28 20:10:55 +01:00
2024-11-12 13:57:14 +01:00
return MaterialApp.router(
title: 'Xiao Pet Tracker',
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
// localizationsDelegates: AppLocalizations.localizationsDelegates,
2024-10-28 20:10:55 +01:00
supportedLocales: AppLocalizations.supportedLocales,
2024-11-12 13:57:14 +01:00
routerConfig: getIt<AppRouter>().config(),
theme: ThemeData(),
darkTheme: ThemeData.dark(),
builder: (context, child) => FTheme(
data: MediaQuery.of(context).platformBrightness == Brightness.light
? FThemes.zinc.light
: FThemes.zinc.dark,
child: child!,
),
2024-10-28 20:10:55 +01:00
);
}
}
// This observer listens for Bluetooth Off and dismisses the DeviceScreen
class BluetoothAdapterStateObserver extends NavigatorObserver {
StreamSubscription<BluetoothAdapterState>? _adapterStateSubscription;
@override
void didPush(Route route, Route? previousRoute) {
super.didPush(route, previousRoute);
if (route.settings.name == '/DeviceScreen') {
// Start listening to Bluetooth state changes when a new route is pushed
2024-11-12 13:57:14 +01:00
_adapterStateSubscription ??= FlutterBluePlus.adapterState.listen(
(state) {
if (state != BluetoothAdapterState.on) {
// Pop the current route if Bluetooth is off
navigator?.pop();
}
},
);
2024-10-28 20:10:55 +01:00
}
}
@override
void didPop(Route route, Route? previousRoute) {
super.didPop(route, previousRoute);
// Cancel the subscription when the route is popped
_adapterStateSubscription?.cancel();
_adapterStateSubscription = null;
}
}