build method

  1. @override
Widget build(
  1. BuildContext context,
  2. 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}"),
};