Commit cc30009

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-04-01 21:04:17
clean up todos
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 10cf3ed
Changed files (2)
app
lib
app/lib/components/ble_input/ble_input.dart
@@ -7,22 +7,37 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
 
 /// An interactive way to add measurements over bluetooth.
-class BleInput extends StatelessWidget{
+class BleInput extends StatefulWidget {
   /// Create an interactive bluetooth measurement adder.
-  BleInput({super.key});
+  const BleInput({super.key, this.bloc});
 
-  final _bloc = BleInputBloc();
+  /// Logic implementation of this input form.
+  final BleInputBloc? bloc; // Configurable for testing.
+
+  @override
+  State<BleInput> createState() => _BleInputState();
+}
+
+class _BleInputState extends State<BleInput> {
+
+  late final BleInputBloc bloc;
+
+  @override
+  void initState() {
+    super.initState();
+    bloc = widget.bloc ?? BleInputBloc();
+  }
 
   @override
   Widget build(BuildContext context) => SizeChangedLayoutNotifier(
     child: BlocBuilder<BleInputBloc, BleInputState>(
-      bloc: _bloc,
+      bloc: bloc,
       builder: (BuildContext context, BleInputState state) {
         final localizations = AppLocalizations.of(context)!;
         return switch (state) {
           BleInputClosed() => IconButton(
             icon: const Icon(Icons.bluetooth),
-            onPressed: () => _bloc.add(OpenBleInput()),
+            onPressed: () => bloc.add(OpenBleInput()),
           ),
           BleInputLoadInProgress() => _buildTwoElementCard(context,
             const CircularProgressIndicator(),
@@ -31,13 +46,13 @@ class BleInput extends StatelessWidget{
           BleInputLoadFailure() => _buildTwoElementCard(context,
             const Icon(Icons.bluetooth_disabled),
             Text(localizations.errBleCantOpen),
-            onTap: () => _bloc.add(OpenBleInput()),
+            onTap: () => bloc.add(OpenBleInput()),
           ),
           BleInputLoadSuccess() => state.availableDevices.isEmpty
               ? _buildTwoElementCard(context,
             const Icon(Icons.info),
             Text(localizations.errBleNoDev),
-            onTap: () => _bloc.add(OpenBleInput()),
+            onTap: () => bloc.add(OpenBleInput()),
           ) : _buildMainCard(context, ListView.builder(
             itemCount: state.availableDevices.length,
             itemBuilder: (context, idx) => ListTile(
@@ -45,13 +60,13 @@ class BleInput extends StatelessWidget{
               trailing: state.availableDevices[idx].connectable == Connectable.available
                   ? const Icon(Icons.bluetooth_audio)
                   : const Icon(Icons.bluetooth_disabled),
-              onTap: () => _bloc.add(BleInputDeviceSelected(state.availableDevices[idx])),
+              onTap: () => bloc.add(BleInputDeviceSelected(state.availableDevices[idx])),
             ),
           ),),
           BleInputPermissionFailure() => _buildTwoElementCard(context,
             const Icon(Icons.bluetooth_disabled),
             Text(localizations.errBleNoPerms),
-            onTap: () => _bloc.add(OpenBleInput()),
+            onTap: () => bloc.add(OpenBleInput()),
           ),
           BleConnectInProgress() => _buildTwoElementCard(context,
             const CircularProgressIndicator(),
@@ -60,7 +75,7 @@ class BleInput extends StatelessWidget{
           BleConnectFailed() => _buildTwoElementCard(context,
             const Icon(Icons.bluetooth_disabled),
             Text(localizations.errBleCouldNotConnect),
-            onTap: () => _bloc.add(OpenBleInput()),
+            onTap: () => bloc.add(OpenBleInput()),
           ),
           BleConnectSuccess() => _buildTwoElementCard(context,
             const Icon(Icons.bluetooth_connected),
@@ -104,7 +119,7 @@ class BleInput extends StatelessWidget{
           alignment: Alignment.topRight,
           child: IconButton(
             icon: const Icon(Icons.close),
-            onPressed: () => _bloc.add(CloseBleInput()),
+            onPressed: () => bloc.add(CloseBleInput()),
           ),
         ),
       ],
@@ -126,4 +141,4 @@ class BleInput extends StatelessWidget{
       ),
     ),),
   );
-}
\ No newline at end of file
+}
app/lib/components/ble_input/ble_input_bloc.dart
@@ -8,29 +8,11 @@ import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
 import 'package:permission_handler/permission_handler.dart';
 
-// TODO: docs
+/// Logic for bluetooth measurement input.
 class BleInputBloc extends Bloc<BleInputEvent, BleInputState> {
-  final _ble = FlutterReactiveBle();
-  final Set<DiscoveredDevice> _availableDevices = {};
-
-  final _requiredServices = [
-    Uuid.parse('1810'),
-  ];
-  // TODO: use repo
-
+  /// Create logic component for bluetooth measurement input.
   BleInputBloc(): super(BleInputClosed()) {
-    on<BleInputOpened>((event, emit) async {
-      /* testing widget
-      emit(BleMeasurementSuccess(BloodPressureRecord(DateTime.now(), 123, 456, 578, 'test'),
-        bodyMoved: null,
-        cuffLoose: false,
-        irregularPulse: true,
-        improperMeasurementPosition: true,
-        measurementStatus: MeasurementStatus.ok,
-      ),);
-      return;
-      */
-
+    on<OpenBleInput>((event, emit) async {
       emit(BleInputLoadInProgress());
       if (await Permission.bluetoothConnect.isDenied) {
         emit(BleInputPermissionFailure());
@@ -54,8 +36,6 @@ class BleInputBloc extends Bloc<BleInputEvent, BleInputState> {
           return BleInputLoadSuccess(_availableDevices.toList());
         },);
       } catch (e) {
-        // TODO: check its really this type of exception
-        print(e);
         emit(BleInputLoadFailure());
       }
     });
@@ -120,8 +100,6 @@ class BleInputBloc extends Bloc<BleInputEvent, BleInputState> {
       ),);
     });
 
-    // TODO: use _ble.statusStream ?
-
     // TODO: show capabilities during testing:
     // _ble.getDiscoveredServices()
 
@@ -134,4 +112,12 @@ class BleInputBloc extends Bloc<BleInputEvent, BleInputState> {
 
   }
 
+  final _ble = FlutterReactiveBle();
+
+  final Set<DiscoveredDevice> _availableDevices = {};
+
+  final _requiredServices = [
+    Uuid.parse('1810'),
+  ];
+
 }