Files
2026-10-28 12:32:49 +01:00

67 lines
2.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controller/bauteil_controller.dart';
import 'bauteil_photo.dart';
class BauteilPhotoPicker extends StatelessWidget {
const BauteilPhotoPicker({super.key, required this.controller});
final BauteilController controller;
@override
Widget build(BuildContext context) => LayoutBuilder(
builder: (context, constraints) => Obx(() {
final photo = BauteilPhoto(bytes: controller.foto.value);
final controls = Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Bauteilfoto (optional)',
style: TextStyle(fontWeight: FontWeight.w600),
),
const SizedBox(height: 8),
Wrap(
spacing: 8,
runSpacing: 8,
children: [
OutlinedButton.icon(
onPressed:
controller.isPickingPhoto.value || controller.isSaving.value
? null
: controller.pickPhoto,
icon: const Icon(Icons.add_photo_alternate_outlined),
label: Text(
controller.isPickingPhoto.value
? 'Wird geladen …'
: 'Foto auswählen',
),
),
if (controller.foto.value != null)
TextButton(
onPressed: controller.isSaving.value
? null
: controller.removePhoto,
child: const Text('Foto entfernen'),
),
],
),
],
);
if (constraints.maxWidth < 400) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [photo, const SizedBox(height: 12), controls],
);
}
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
photo,
const SizedBox(width: 16),
Expanded(child: controls),
],
);
}),
);
}