summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/device_scan_select.dart45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/device_scan_select.dart b/lib/device_scan_select.dart
new file mode 100644
index 0000000..a44bf4f
--- /dev/null
+++ b/lib/device_scan_select.dart
@@ -0,0 +1,45 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_blue_plus/flutter_blue_plus.dart';
+
+abstract class NotifyingListWidget<T> extends StatefulWidget {
+ final List<T> items;
+ final ValueChanged<T?> onItemSelected;
+
+ const NotifyingListWidget({
+ super.key,
+ required this.items,
+ required this.onItemSelected,
+ });
+}
+
+class DeviceScanSelection extends NotifyingListWidget<ScanResult> {
+ const DeviceScanSelection({
+ super.key,
+ required super.items,
+ required super.onItemSelected,
+ });
+
+ @override
+ State<DeviceScanSelection> createState() => _DeviceScanSelectionState();
+}
+
+class _DeviceScanSelectionState extends State<DeviceScanSelection> {
+ @override
+ Widget build(BuildContext context) {
+ return Expanded(
+ child: ListView.separated(
+ itemBuilder: (c, idx) {
+ final ScanResult item = widget.items[idx];
+ return ListTile(
+ title: Text(item.toString()),
+ onTap: () {
+ widget.onItemSelected(item);
+ },
+ );
+ },
+ separatorBuilder: (c, i) => Divider(),
+ itemCount: widget.items.length,
+ ),
+ );
+ }
+}