Files
stadtbote-app/lib/content_views/task_list_page.dart
T
2023-11-14 11:38:44 +01:00

170 lines
4.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:isar/isar.dart';
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
import 'package:stadtbote/content_views/utils/header_info.dart';
import 'package:stadtbote/model/job_tour.dart';
import '../main.dart';
import '../model/task_info.dart';
import '../tools/util.dart';
class TaskListPage extends ContentViewWidget {
const TaskListPage({super.key, required this.tour});
final JobTour tour;
@override
State<TaskListPage> createState() => _TaskListPageState();
@override
Future<HeaderInfo> getHeaderInfo(BuildContext context) async {
return HeaderInfo(
titleWidget: const Text(
'Liste der Aufgaben',
style: TextStyle(
color: Colors.white,
fontSize: 24.0,
),
),
rightButtonEnabled: false,
rightButtonVisible: false,
rightButtonImage: null,
rightButtonOnPressed: () async {
//BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: EmployeeEditProfileWidget());
});
}
}
class _TaskListPageState extends State<TaskListPage> {
late bool _initCompleted = false;
late List<TaskInfo> _taskList;
@override
void initState() {
Future.delayed(const Duration(seconds: 0), () async {
_taskList = await _fetchTaskList();
_initCompleted = true;
setState(() {});
});
super.initState();
}
@override
Widget build(BuildContext context) {
if (!_initCompleted) {
return Util.getWaitWidget(context);
}
var steps = _initSteps();
return Padding(
padding: const EdgeInsets.all(8.0),
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
padding: const EdgeInsets.all(0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: steps,
),
),
);
}
List<Widget> _initSteps() {
List<Widget> steps = [];
for (int i=0; i<_taskList.length; i++) {
var taskInfo = _taskList[i];
steps.add(
ListTile(
minVerticalPadding: 0,
title: Container(
padding: const EdgeInsets.all(0),
height: 60,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Stack(
children: [
Positioned(
left: 16.5,
top: i == 0 ? 5 : 0,
child: Container(
height: i == widget.tour.tasks.length - 1 ? 1: 60,
width: 6,
color: Colors.green
),
),
Column(
children: [
Container(
width: 40,
height: 40,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.grey,
),
child: const Icon(Icons.check, size: 30.0, color: Colors.white),
),
],
),
],
),
const SizedBox(width: 20),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
taskInfo.task.topic,
textAlign: TextAlign.left,
style: const TextStyle(
color: Colors.blue,
fontSize: 15.0,
),
),
Text(
taskInfo.additionalText ?? '',
textAlign: TextAlign.left,
style: const TextStyle(
color: Colors.blue,
fontSize: 12.0,
),
),
],
),
],
),
),
onTap: () {
print('1');
},
),
);
}
return steps;
}
Future<List<TaskInfo>> _fetchTaskList() async {
List<TaskInfo> taskList = [];
for(var task in widget.tour.tasks) {
var taskInfo = await MyApp.isarInstance.taskInfos.filter().sIdEqualTo(task.sId).findFirst();
taskInfo ??= TaskInfo();
taskInfo.task = task;
taskInfo.answer = null;
taskInfo.additionalText = null;
taskList.add(taskInfo);
}
return taskList;
}
}