diff options
Diffstat (limited to 'lib/widgets/badge_motive_list.dart')
-rw-r--r-- | lib/widgets/badge_motive_list.dart | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/widgets/badge_motive_list.dart b/lib/widgets/badge_motive_list.dart new file mode 100644 index 0000000..989b155 --- /dev/null +++ b/lib/widgets/badge_motive_list.dart @@ -0,0 +1,74 @@ +// 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 <https://www.gnu.org/licenses/>. + +import 'package:flutter/material.dart'; +import 'package:uvok_epaper_badge/model/badge_motive.dart'; +import 'package:uvok_epaper_badge/view_model/badge_motive_view_model.dart'; +import 'package:uvok_epaper_badge/widgets/notifying_list_widget.dart'; + +class BadgeMotiveList extends NotifyingListWidget<BadgeMotive> { + final BadgeMotiveViewModel _motiveVM; + + const BadgeMotiveList({super.key, required BadgeMotiveViewModel motiveVM}) + : _motiveVM = motiveVM, + super(items: const []); + + @override + State<StatefulWidget> createState() => _BadgeMotiveListState(); +} + +class _BadgeMotiveListState extends State<BadgeMotiveList> { + @override + void initState() { + // I have no idea about the connection state here... + //widget._motiveVM.getCurrentMotive().ignore(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + var mytheme = Theme.of(context); + + 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, + ); + }, + separatorBuilder: (context, index) { + return Divider(); + }, + itemCount: widget._motiveVM.motives.length, + ); + }, + ), + ); + } +} |