Erweiterungen

This commit is contained in:
Sven committed 2024-02-12 10:07:26 +01:00
1 parent 1732a634be
commit ce66ed2ba0
2 files changed
+79 -94

No files matched your search

+1 -3
View File
@@ -284,15 +284,13 @@ class _TaskListPageState extends State<TaskListPage> {
} }
_processTakePhotos(TaskInfo taskInfo) { _processTakePhotos(TaskInfo taskInfo) {
_popup = showTakePhotosPopup(context, taskInfo, () { showTakePhotosPopup(context, taskInfo, () {
taskInfo.additionalText = "Fotos aufgenommen"; taskInfo.additionalText = "Fotos aufgenommen";
taskInfo.completed = true; taskInfo.completed = true;
setState(() {}); setState(() {});
_finishTaskProcessing(taskInfo); _finishTaskProcessing(taskInfo);
_popup.dismiss(context);
}); });
} }
+78 -91
View File
@@ -1,85 +1,49 @@
import 'package:carousel_slider/carousel_slider.dart'; import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:kumi_popup_window/kumi_popup_window.dart';
import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/model/task_info.dart';
import 'package:stadtbote/tools/util.dart'; import 'package:stadtbote/tools/util.dart';
KumiPopupWindow showTakePhotosPopup(BuildContext context, TaskInfo taskInfo, Function() onFinished) { Future<void> showTakePhotosPopup(BuildContext context, TaskInfo taskInfo, Function() onFinished) async {
return showPopupWindow( List<Uint8List> imageDataList = [];
context, List<Widget> imageWidgetsList = [];
//childSize:Size(240, MediaQuery.of(context).size.width * 0.8),
gravity: KumiPopupGravity.center,
//curve: Curves.elasticOut,
bgColor: Colors.grey.withOpacity(0.5),
clickOutDismiss: true,
clickBackDismiss: true,
customAnimation: false,
customPop: false,
customPage: false,
// targetRenderBox: (btnKey.currentContext.findRenderObject() as RenderBox),
//needSafeDisplay: true,
underStatusBar: false,
underAppBar: false,
//offsetX: -180,
//offsetY: 50,
duration: const Duration(milliseconds: 200),
onShowStart: (pop) {},
onShowFinish: (pop) {},
onDismissStart: (pop) {},
onDismissFinish: (pop) {},
onClickOut: (pop) {},
onClickBack: (pop) {},
childFun: (pop) {
List<Uint8List> imageList = [];
List<Widget> imageWidgetsList = [];
ValueNotifier<List<Widget>> imageWidgetsListNotifier = ValueNotifier<List<Widget>>([]); ValueNotifier<List<Widget>> imageWidgetsListNotifier = ValueNotifier<List<Widget>>([]);
void capturePhoto() async { await showDialog<void>(
var photo = await Util.capturePhoto(); context: context,
builder: (BuildContext context) {
return AlertDialog(
contentPadding: EdgeInsets.zero,
shadowColor: Colors.transparent,
backgroundColor: Colors.white,
content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
void capturePhoto() async {
var photo = await Util.capturePhoto();
if (photo != null) { if (photo != null) {
var imageData = await photo.readAsBytes(); var imageData = await photo.readAsBytes();
photo.delete(); photo.delete();
imageList.add(imageData); imageDataList.add(imageData);
imageWidgetsList.clear(); imageWidgetsList.add(GestureDetector(
for(var image in imageList) { onTap: () {},
imageWidgetsList.add(GestureDetector( child: Image.memory(imageData),
onTap: () { ));
},
child: Image.memory(image),
));
}
imageWidgetsListNotifier.value = imageWidgetsList; imageWidgetsListNotifier.value = imageWidgetsList;
imageWidgetsListNotifier.notifyListeners();
}
}
return SizedBox( setState(() {});
key: GlobalKey(), }
height: 530, }
width: MediaQuery.of(context).size.width * 0.8,
child: Container( return SizedBox(
height: 100, key: GlobalKey(),
decoration: BoxDecoration( height: 545,
borderRadius: BorderRadius.circular(10), width: MediaQuery.of(context).size.width * 0.8,
color: Colors.white, child: Container(
border: Border.all( height: 100,
color: Colors.grey,
width: 0.5,
),
),
child: Padding(
padding: const EdgeInsets.all(35.0),
child: Column(
children: [
const Text('Aufgenommene Fotos'),
const SizedBox(height: 20),
Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
color: Colors.white, color: Colors.white,
@@ -88,27 +52,50 @@ KumiPopupWindow showTakePhotosPopup(BuildContext context, TaskInfo taskInfo, Fun
width: 0.5, width: 0.5,
), ),
), ),
height: 300, child: Padding(
child: ValueListenableBuilder<List<Widget>>( padding: const EdgeInsets.all(35.0),
valueListenable: imageWidgetsListNotifier, child: Column(
builder: (context, value, child) { children: [
return CarouselSlider( const Text('Aufgenommene Fotos'),
options: CarouselOptions( const SizedBox(height: 20),
disableCenter: false, Container(
enableInfiniteScroll: false, decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
border: Border.all(
color: Colors.grey,
width: 0.5,
),
), ),
items: imageWidgetsList.toList() height: 300,
); child: ValueListenableBuilder<List<Widget>>(
}, valueListenable: imageWidgetsListNotifier,
builder: (context, value, child) {
return CarouselSlider(
options: CarouselOptions(
disableCenter: false,
enableInfiniteScroll: false,
),
items: imageWidgetsList.toList());
},
),
),
const SizedBox(height: 20),
Visibility(visible: imageDataList.length < taskInfo.task.max!, child: getDefaultButton('Hinzufügen', buttonHeight: 50, () => {capturePhoto()})),
const SizedBox(height: 12),
getDefaultButton(
'Übernehmen',
buttonHeight: 50,
() => {
if (imageDataList.length == taskInfo.task.min! && imageDataList.length <= taskInfo.task.max!)
{Navigator.of(context).pop(), onFinished()}
else
{showAlertDialog(context, 'Fehler', 'Sie müssen mindestens ${taskInfo.task.min} Foto(s) aufnehmen')}
})
],
),
), ),
), ));
const SizedBox(height: 20), }));
getDefaultButton('Hinzufügen', buttonHeight: 50, () => {capturePhoto()}), });
getDefaultButton('Übernehmen', buttonHeight: 50, () => {onFinished()})
],
),
),
));
},
);
} }