// Copyright (C) 2025, uvok cheetah // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'dart:ui'; import 'package:uvok_epaper_badge/model/device/device.dart'; import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; import 'package:uvok_epaper_badge/model/connection/device_connection.dart'; import 'package:uvok_epaper_badge/widgets/badge_template_list.dart'; var logger = Logger(); class DeviceDetailsScreen extends StatefulWidget { final Device device; final DeviceConnection deviceConnection; const DeviceDetailsScreen({ super.key, required this.device, required this.deviceConnection, }); @override State createState() { return DeviceDetailsState(); } } class DeviceDetailsState extends State { late final AppLifecycleListener appLL; /// Whether the back button should be active. bool backActive = false; DeviceDetailsState() { appLL = AppLifecycleListener( onExitRequested: () async { logger.i("Exit requested"); dispose(); return AppExitResponse.exit; }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text("Device details"), ), body: Center( child: ValueListenableBuilder( valueListenable: widget.deviceConnection.status, builder: (connCtx, ConnectionStatus value, child) { return Column( spacing: 20, children: [ SizedBox(height: 20), Text("Connection state: ${value.toString()}"), BadgeMotiveList(items: []), ], ); }, ), ), ); } @override void initState() { super.initState(); _doConnect(); } @override void deactivate() { logger.i("(widget deactivate)"); // widget.device.disconnect().ignore(); super.deactivate(); } @override void dispose() { logger.i("(widget dispose)"); widget.deviceConnection.disconnect().ignore(); super.dispose(); } void _doConnect() async { try { logger.i("Try to connect..."); await widget.deviceConnection.connect(); } catch (e) { logger.e(e); await widget.deviceConnection.disconnect(); } finally { backActive = true; } } }