216 lines
5.4 KiB
Dart
216 lines
5.4 KiB
Dart
|
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'),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|