build method
- @override
- BuildContext context,
- ViewsModel model
override
Builds the UI according to the state in model
.
Implementation
@override
Widget build(BuildContext context, ViewsModel model) => switch (model.views.length) {
1 => Column(
children: [
Expanded(child: model.children[0].child),
],
),
2 => ResizableContainer(
key: const ValueKey(1),
direction: switch (models.settings.dashboard.splitMode) {
SplitMode.horizontal => Axis.vertical,
SplitMode.vertical => Axis.horizontal,
},
divider: divider,
controller: switch (models.settings.dashboard.splitMode) {
SplitMode.horizontal => model.verticalController1,
SplitMode.vertical => model.horizontalController1,
},
children: model.children.sublist(0, 2),
),
3 || 4 => ResizableContainer(
key: const ValueKey(2),
controller: model.verticalController1,
direction: Axis.vertical,
divider: divider,
children: [
nestChild(
controller: model.horizontalController1,
children: model.children.sublist(0, 2),
axis: Axis.horizontal,
),
if (model.views.length == 3)
model.children[2]
else
nestChild(
controller: model.horizontalController2,
children: model.children.sublist(2, 4),
axis: Axis.horizontal,
),
],
),
8 => Row(
children: [
Expanded( // left page
child: ResizableContainer(
key: const ValueKey(3),
controller: model.verticalController1,
direction: Axis.vertical,
divider: divider,
children: [
nestChild( // top row
controller: model.horizontalController1,
axis: Axis.horizontal,
children: model.children.sublist(0, 2),
),
nestChild( // bottom row
controller: model.horizontalController2,
axis: Axis.horizontal,
children: model.children.sublist(2, 4),
),
],
),
),
const VerticalDivider(
width: 8,
color: Colors.black,
thickness: 8,
),
Expanded( // right page
child: ResizableContainer(
key: const ValueKey(4),
controller: model.verticalController2,
direction: Axis.vertical,
divider: divider,
children: [
nestChild( // top row
controller: model.horizontalController3,
axis: Axis.horizontal,
children: model.children.sublist(4, 6),
),
nestChild( // bottom row
controller: model.horizontalController4,
axis: Axis.horizontal,
children: model.children.sublist(6, 8),
),
],
),
),
],
),
_ => throw StateError("Too many views: ${model.views.length}"),
};