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) => Padding(
  padding: const EdgeInsets.all(8),
  child: switch (model.views.length) {
    1 => Column(children: [Expanded(child: model.children[0].child)]),
    2 => ResizableContainer(
      key: ValueKey("1-${models.settings.dashboard.splitMode.name}"),
      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: 12,
          color: Colors.transparent,
          thickness: 0,
        ),
        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}"),
  },
);