import 'package:flutter/material.dart'; import 'input.dart'; abstract class Toggle extends Input { const Toggle({ this.value = false, String? title, String? description, OnInputChange? onChange, List> inputValidators = const [], super.key, }) : super( inputValidators: inputValidators, description: description, title: title, onChange: onChange, ); final bool value; @override InputState createState() => ToggleState(value); } class ToggleState extends InputState { ToggleState(bool initialValue) : super(initialValue); @override Widget build(BuildContext context) { return GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { requestFocus(); setState(() { value = !value; }); widget.change( value, validate(), ); }, child: widget.createInputShell( context, input: Switch( value: value, focusNode: focusNode, onChanged: (value) { setState(() { this.value = value; }); widget.change( value, validate(), ); }, ), error: createErrorLabel(), title: createTitle(), description: createDescription(), focused: focusNode.hasFocus, ), ); } }