GardenPlanner/garden_planner/lib/content.dart

216 lines
5.4 KiB
Dart
Raw Normal View History

2023-06-25 10:13:39 +02:00
import 'package:flutter/material.dart';
import 'beet.dart';
import 'plant.dart';
class Content extends StatefulWidget {
final bool showSpaceRequirement;
const Content({
Key? key,
required this.showSpaceRequirement,
}) : super(key: key);
@override
_ContentState createState() => _ContentState();
}
class _ContentState extends State<Content> {
Beet beet = Beet();
List<Widget> getRows(Beet beet) {
List<Widget> displayedRows = [];
List<Widget> verticalSpaceContainers = [];
verticalSpaceContainers=getVerticalSpaceContainers(beet);
for(int i =0; i<beet.beetrows.length;i++) {
var beetRow = beet.beetrows[i];
Widget? verticalSpace = null;
if (widget.showSpaceRequirement && beetRow.plants.isNotEmpty) {
displayedRows.add(getHorizontalSpaceRow(beetRow));
verticalSpace=verticalSpaceContainers[i];
}
displayedRows.add(getPlantRow(beetRow, verticalSpace));
}
return displayedRows;
}
List<double> getHorizontalSpaceValue(BeetRow beetRow) {
double preUsedSpace = 0;
List<double> spaceElements = [];
for (var plant in beetRow.plants) {
spaceElements.add(preUsedSpace + (plant.horizontalSpace / 2));
preUsedSpace += plant.horizontalSpace;
}
return spaceElements;
}
List<double> getVerticalSpaceValue(Beet beet) {
double preUsedSpace = 0;
List<double> spaceElements = [];
for (var rows in beet.beetrows) {
spaceElements.add(preUsedSpace + (rows.verticalSpace / 2));
preUsedSpace += rows.verticalSpace;
}
return spaceElements;
}
Widget getHorizontalSpaceRow(BeetRow beetRow) {
var requiredSpaceValues = getHorizontalSpaceValue(beetRow);
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.all(8),
margin: EdgeInsets.all(4),
height: 100,
width: 150,
color: Colors.green[200],
child: Column(
children: const [
Text("-")
]
),
),
for (var item in requiredSpaceValues)
Container(
padding: EdgeInsets.all(8),
margin: EdgeInsets.all(4),
height: 100,
width: 150,
color: Colors.green[200],
child: Column(
children: [
Text(item.toString()),
],
),
),
],
);
}
List<Container> getVerticalSpaceContainers(Beet beet) {
var requiredSpaceValues = getVerticalSpaceValue(beet);
List<Container> containers= [];
for (var item in requiredSpaceValues) {
containers.add(
Container(
padding: EdgeInsets.all(8),
margin: EdgeInsets.all(4),
height: 100,
width: 150,
color: Colors.green[200],
child: Column(
children: [
Text(item.toString()),
],
),
));
}
return containers;
}
Widget getPlantRow(BeetRow beetRow, Widget? verticalSpaceContainers) {
int plantNumber=0;
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if(verticalSpaceContainers!=null)
Container(
padding: EdgeInsets.all(8),
margin: EdgeInsets.all(4),
height: 100,
width: 150,
color: Colors.green[200],
child: Column(
children: [
verticalSpaceContainers
]
),
),
for (var plant in beetRow.plants)
Container(
padding: const EdgeInsets.all(8),
margin: const EdgeInsets.all(4),
height: 100,
width: 150,
color: Colors.green[200],
child: Column(
children: [
Text(plant.name),
Text('Wasserbedarf: ${plant.waterRequirement}'),
Text('Platz: ${plant.horizontalSpace}'),
],
),
),
DragTarget<Plant>(
onAccept: (droppedItem) {
setState(() {
beetRow.Add(droppedItem);
});
},
builder: (context, candidateData, rejectedData) {
return Container(
padding: const EdgeInsets.all(8),
margin: const EdgeInsets.all(4),
height: 100,
width: 100,
color: Colors.grey[200],
child: const Center(
child: Text('Drop Plant here'),
),
);
},
),
],
);
}
final scrollController = ScrollController();
@override
Widget build(BuildContext context) {
return Expanded(
child: Scrollbar(
thumbVisibility: true,
controller: scrollController,
child: ListView(
scrollDirection: Axis.horizontal,
controller: scrollController,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...getRows(beet),
ElevatedButton(
onPressed: () {
setState(() {
beet.Add(BeetRow());
});
},
child: Text('Neue Reihe'),
),
],
),
],
),
),
);
}
}