diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/widgets/badge_motive_list.dart | 67 | ||||
-rw-r--r-- | lib/widgets/device_details.dart | 38 |
2 files changed, 57 insertions, 48 deletions
diff --git a/lib/widgets/badge_motive_list.dart b/lib/widgets/badge_motive_list.dart index a03e174..989b155 100644 --- a/lib/widgets/badge_motive_list.dart +++ b/lib/widgets/badge_motive_list.dart @@ -41,48 +41,33 @@ class _BadgeMotiveListState extends State<BadgeMotiveList> { Widget build(BuildContext context) { var mytheme = Theme.of(context); - return Flexible( - fit: FlexFit.loose, - child: Column( - children: [ - ElevatedButton( - child: Text("Refresh"), - onPressed: () async { - await widget._motiveVM.updateMotives(); - await widget._motiveVM.getCurrentMotive(); + return Expanded( + child: ListenableBuilder( + listenable: widget._motiveVM, + builder: (context, child) { + return ListView.separated( + itemBuilder: (context, index) { + final item = widget._motiveVM.motives[index]; + final selected = widget._motiveVM.currentMotive?.id == item.id; + return ListTile( + title: Text(item.description), + selectedTileColor: mytheme.primaryColorLight, + selectedColor: Colors.black, + onTap: !widget._motiveVM.allowSelection + ? null + : () async { + widget.onItemSelected(item); + await widget._motiveVM.setMotive(item); + }, + selected: selected, + ); }, - ), - Expanded( - child: ListenableBuilder( - listenable: widget._motiveVM, - builder: (context, child) { - return ListView.separated( - itemBuilder: (context, index) { - final item = widget._motiveVM.motives[index]; - final selected = - widget._motiveVM.currentMotive?.id == item.id; - return ListTile( - title: Text(item.description), - selectedTileColor: mytheme.primaryColorLight, - selectedColor: Colors.black, - onTap: !widget._motiveVM.allowSelection - ? null - : () async { - widget.onItemSelected(item); - await widget._motiveVM.setMotive(item); - }, - selected: selected, - ); - }, - separatorBuilder: (context, index) { - return Divider(); - }, - itemCount: widget._motiveVM.motives.length, - ); - }, - ), - ), - ], + separatorBuilder: (context, index) { + return Divider(); + }, + itemCount: widget._motiveVM.motives.length, + ); + }, ), ); } diff --git a/lib/widgets/device_details.dart b/lib/widgets/device_details.dart index 17319f4..0463522 100644 --- a/lib/widgets/device_details.dart +++ b/lib/widgets/device_details.dart @@ -30,14 +30,19 @@ class DeviceDetailsScreen extends StatefulWidget { final Device device; final DeviceConnection deviceConnection; - final BadgeMotiveSelection _motiveSelection; + late final BadgeMotiveSelection _motiveSelection; + late final BadgeMotiveViewModel _motiveVM; DeviceDetailsScreen({ super.key, required this.device, required this.deviceConnection, - }) : _motiveSelection = - BadgeMotiveSelectionFactory.createBadgeMotiveSelection(device); + }) { + _motiveSelection = BadgeMotiveSelectionFactory.createBadgeMotiveSelection( + device, + ); + _motiveVM = BadgeMotiveViewModel(motivSelect: _motiveSelection); + } @override State<StatefulWidget> createState() { @@ -77,11 +82,30 @@ class DeviceDetailsState extends State<DeviceDetailsScreen> { children: [ SizedBox(height: 20), Text("Connection state: ${value.toString()}"), - BadgeMotiveList( - motiveVM: BadgeMotiveViewModel( - motivSelect: widget._motiveSelection, - ), + ElevatedButton( + child: Text("Refresh"), + onPressed: () async { + await widget._motiveVM.updateMotives(); + await widget._motiveVM.getCurrentMotive(); + }, + ), + ListenableBuilder( + listenable: widget._motiveVM, + builder: (errorCtx, child) { + if (widget._motiveVM.errorMessage != null) { + var theme = Theme.of(errorCtx); + return Text( + widget._motiveVM.errorMessage!, + style: TextStyle( + color: theme.colorScheme.error, + fontWeight: FontWeight.bold, + ), + ); + } + return Container(); + }, ), + BadgeMotiveList(motiveVM: widget._motiveVM), ], ); }, |