initial commit
This commit is contained in:
106
lib/app/view/app.dart
Normal file
106
lib/app/view/app.dart
Normal file
@@ -0,0 +1,106 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_blue_plus_windows/flutter_blue_plus_windows.dart';
|
||||
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';
|
||||
import 'package:xiao_pet_tracker/l10n/l10n.dart';
|
||||
|
||||
class AppView extends StatefulWidget {
|
||||
const AppView({super.key});
|
||||
|
||||
@override
|
||||
State<AppView> createState() => _AppState();
|
||||
}
|
||||
|
||||
class _AppState extends State<AppView> {
|
||||
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) {
|
||||
// Widget screen = _adapterState == BluetoothAdapterState.on
|
||||
// ? const HomePage()
|
||||
// : BluetoothOffScreen(
|
||||
// adapterState: _adapterState,
|
||||
// );
|
||||
|
||||
// only allow portrait orientations
|
||||
SystemChrome.setPreferredOrientations([
|
||||
DeviceOrientation.portraitUp,
|
||||
DeviceOrientation.portraitDown,
|
||||
]);
|
||||
|
||||
return MaterialApp.router(
|
||||
title: 'Xiao Pet Tracker',
|
||||
localizationsDelegates: const [
|
||||
AppLocalizations.delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
// localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
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!,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
_adapterStateSubscription ??= FlutterBluePlus.adapterState.listen(
|
||||
(state) {
|
||||
if (state != BluetoothAdapterState.on) {
|
||||
// Pop the current route if Bluetooth is off
|
||||
navigator?.pop();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void didPop(Route route, Route? previousRoute) {
|
||||
super.didPop(route, previousRoute);
|
||||
// Cancel the subscription when the route is popped
|
||||
_adapterStateSubscription?.cancel();
|
||||
_adapterStateSubscription = null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user