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 { Beet beet = Beet(); List getRows(Beet beet) { List displayedRows = []; List verticalSpaceContainers = []; verticalSpaceContainers=getVerticalSpaceContainers(beet); for(int i =0; i getHorizontalSpaceValue(BeetRow beetRow) { double preUsedSpace = 0; List spaceElements = []; for (var plant in beetRow.plants) { spaceElements.add(preUsedSpace + (plant.horizontalSpace / 2)); preUsedSpace += plant.horizontalSpace; } return spaceElements; } List getVerticalSpaceValue(Beet beet) { double preUsedSpace = 0; List 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 getVerticalSpaceContainers(Beet beet) { var requiredSpaceValues = getVerticalSpaceValue(beet); List 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( 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: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ...getRows(beet), ElevatedButton( onPressed: () { setState(() { beet.Add(BeetRow()); }); }, child: Text('Neue Reihe'), ), ], ), ], ), ), ); } }