build method

  1. @override
Widget build(
  1. BuildContext context,
  2. SubsystemsViewModel model
)
override

Builds the UI according to the state in model.

Implementation

@override
Widget build(BuildContext context, SubsystemsViewModel model) => LayoutBuilder(
  builder:
      (context, constraints) => Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          PageHeader(
            pageIndex: index,
            children: [
              const SizedBox(width: 8),
              Text("Subsystems", style: context.textTheme.headlineMedium),
              const Spacer(),
            ],
          ),
          Row(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Flexible(
                child: SizedBox(
                  height: constraints.maxHeight - 48,
                  child: SingleChildScrollView(
                    child: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: [
                        Card(
                          elevation: 5,
                          child: Padding(
                            padding: const EdgeInsets.all(8),
                            child: RelaysView(model: model),
                          ),
                        ),
                        Card(
                          elevation: 5,
                          child: Padding(
                            padding: const EdgeInsets.all(8),
                            child: Wrap(
                              runSpacing: 5,
                              alignment: WrapAlignment.center,
                              spacing: 15,
                              runAlignment: WrapAlignment.center,
                              crossAxisAlignment: WrapCrossAlignment.center,
                              children: [
                                FilledButton(
                                  onPressed: () => model.zeroImu(),
                                  child: const Text("Zero IMU"),
                                ),
                                sensorConnectionStatus("GPS", model.subsystems.gpsConnected),
                                sensorConnectionStatus("IMU", model.subsystems.imuConnected),
                              ],
                            ),
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
              ),
              if (model.subsystems.connectedDevices.isNotEmpty) ...[
                const SizedBox(width: 10),
                SizedBox(
                  width: 225,
                  height: min(
                    constraints.maxHeight - 48,
                    model.subsystems.connectedDevices.length * 100,
                  ),
                  child: FirmwareStatuses(model: model),
                ),
              ],
            ],
          ),
        ],
      ),
);