getCameraDrawer method

Drawer getCameraDrawer()

Implementation

Drawer getCameraDrawer() {
  return Drawer(
    child: ListView(
      padding: EdgeInsets.zero,
      children: <Widget>[
        const DrawerHeader(
          decoration: BoxDecoration(
            color: Colors.blue,
          ),
          child: Text('Camera Settings',
            style: TextStyle(color: Colors.white, fontSize: 24),
            ),
        ),
        ListTile(
          title: const Text('Quality'),
          subtitle: Slider(
            value: qualityIndex.toDouble(),
            min: 0,
            max: qualityValues.length - 1,
            divisions: qualityValues.length - 1,
            label: qualityValues[qualityIndex],
            onChanged: (value) {
              setState(() {
                qualityIndex = value.toInt();
              });
            },
          ),
        ),
        ListTile(
          title: const Text('Resolution'),
          subtitle: Slider(
            value: resolution.toDouble(),
            min: 256,
            max: 720,
            divisions: (720 - 256) ~/ 16, // even numbers only
            label: resolution.toString(),
            onChanged: (value) {
              setState(() {
                resolution = value.toInt();
              });
            },
          ),
        ),
        ListTile(
          title: const Text('Pan'),
          subtitle: Slider(
            value: pan.toDouble(),
            min: -140,
            max: 140,
            divisions: 280,
            label: pan.toString(),
            onChanged: (value) {
              setState(() {
                pan = value.toInt();
              });
            },
          ),
        ),
        SwitchListTile(
          title: const Text('Auto Exposure/Gain'),
          value: _isAutoExposure,
          onChanged: (bool value) async {
            setState(() {
              _isAutoExposure = value;
            });
          },
          subtitle: Text(_isAutoExposure ? 'Auto' : 'Manual'),
        ),
        if (_isAutoExposure) ...[
          // Widgets visible in Auto mode
          ListTile(
            title: const Text('Metering'),
            subtitle: DropdownButton<int>(
              value: meteringIndex,
              onChanged: (int? newValue) async {
                setState(() {
                  meteringIndex = newValue!;
                });
              },
              items: meteringValues
                  .map<DropdownMenuItem<int>>((String value) {
                return DropdownMenuItem<int>(
                  value: meteringValues.indexOf(value),
                  child: Text(value),
                );
              }).toList(),
            ),
          ),
          ListTile(
            title: const Text('Exposure'),
            subtitle: Slider(
              value: exposure,
              min: 0,
              max: 1,
              divisions: 20,
              label: exposure.toString(),
              onChanged: (value) {
                setState(() {
                  exposure = value;
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Exposure Speed'),
            subtitle: Slider(
              value: exposureSpeed,
              min: 0,
              max: 1,
              divisions: 20,
              label: exposureSpeed.toString(),
              onChanged: (value) {
                setState(() {
                  exposureSpeed = value;
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Shutter Limit'),
            subtitle: Slider(
              value: shutterLimit.toDouble(),
              min: 4,
              max: 16383,
              divisions: 16,
              label: shutterLimit.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  shutterLimit = value.toInt();
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Analog Gain Limit'),
            subtitle: Slider(
              value: analogGainLimit.toDouble(),
              min: 1,
              max: 248,
              divisions: 16,
              label: analogGainLimit.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  analogGainLimit = value.toInt();
                });
              },
            ),
          ),
          ListTile(
            title: const Text('White Balance Speed'),
            subtitle: Slider(
              value: whiteBalanceSpeed,
              min: 0,
              max: 1,
              divisions: 20,
              label: whiteBalanceSpeed.toString(),
              onChanged: (value) {
                setState(() {
                  whiteBalanceSpeed = value;
                });
              },
            ),
          ),
          ListTile(
            title: const Text('RGB Gain Limit'),
            subtitle: Slider(
              value: rgbGainLimit.toDouble(),
              min: 0,
              max: 1023,
              divisions: 32,
              label: rgbGainLimit.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  rgbGainLimit = value.toInt();
                });
              },
            ),
          ),
        ] else ...[
          // Widgets visible in Manual mode
          ListTile(
            title: const Text('Manual Shutter'),
            subtitle: Slider(
              value: manualShutter.toDouble(),
              min: 4,
              max: 16383,
              divisions: 32,
              label: manualShutter.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  manualShutter = value.toInt();
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Manual Analog Gain'),
            subtitle: Slider(
              value: manualAnalogGain.toDouble(),
              min: 1,
              max: 248,
              divisions: 50,
              label: manualAnalogGain.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  manualAnalogGain = value.toInt();
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Red Gain'),
            subtitle: Slider(
              value: manualRedGain.toDouble(),
              min: 0,
              max: 1023,
              divisions: 50,
              label: manualRedGain.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  manualRedGain = value.toInt();
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Green Gain'),
            subtitle: Slider(
              value: manualGreenGain.toDouble(),
              min: 0,
              max: 1023,
              divisions: 50,
              label: manualGreenGain.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  manualGreenGain = value.toInt();
                });
              },
            ),
          ),
          ListTile(
            title: const Text('Blue Gain'),
            subtitle: Slider(
              value: manualBlueGain.toDouble(),
              min: 0,
              max: 1023,
              divisions: 50,
              label: manualBlueGain.toStringAsFixed(0),
              onChanged: (value) {
                setState(() {
                  manualBlueGain = value.toInt();
                });
              },
            ),
          ),
        ],
      ],
    ),
  );
}