GardenPlanner/lib/widgets/sidebar.dart

139 lines
5.2 KiB
Dart

import 'package:flutter/material.dart';
import '../entities/plant.dart';
import '../repositories/beet.repositories.dart';
class Sidebar extends StatelessWidget {
final BeetRepository beetRepository;
const Sidebar({required this.beetRepository, Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
margin: const EdgeInsets.only(top: 20),
padding: const EdgeInsets.all(15),
child: const Text(
"Verfügbare Pflanzen",
style: TextStyle(
fontSize: 20,
color: Colors.white,
),
),
),
Container(
padding: const EdgeInsets.all(15),
child: const Text(
"Platziere das Bild auf dem Beet",
textDirection: TextDirection.ltr,
style: TextStyle(
fontSize: 16,
color: Colors.white,
),
),
),
const Divider(),
Expanded(
child: FutureBuilder<Iterable<Plant>>(
future: beetRepository.getAllPlants(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return const Text("Fehler beim Laden");
} else if (snapshot.hasData) {
final plants = snapshot.data!;
return Scrollbar(
child: ListView.builder(
scrollDirection: Axis.vertical,
itemCount: plants.length,
itemBuilder: (context, index) {
final plant = plants.elementAt(index);
return Container(
padding: const EdgeInsets.all(5),
margin: const EdgeInsets.only(
bottom: 10,
top: 10,
right: 10,
),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10),
),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Draggable<Plant>(
data: plant,
feedback: Container(
padding: const EdgeInsets.all(8),
margin: const EdgeInsets.all(4),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.asset(
plant.image.toString(),
width: 100,
),
],
),
),
child: Image.asset(
plant.image.toString(),
width: 100,
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.only(
right: 8,
left: 8,
top: 8,
),
child: Text(
'${plant.name} \n ${plant.supType ?? ''}',
style: const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
),
),
),
Container(
padding: const EdgeInsets.all(8),
child: Text(
'${plant.horizontalSpace} x ${plant.verticalSpace} m',
style: const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
),
),
),
],
),
],
),
);
},
),
);
} else if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
return const Text('Keine Pflanzen gefunden');
}
},
),
),
],
);
}
}