blob: fad7ff4ebafb2e93923270cc8af28b36cf7a2fed [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
import 'controls_constants.dart';
export 'controls_constants.dart';
/// A test page with a checkbox, three radio buttons, and a switch.
class SelectionControlsPage extends StatefulWidget {
const SelectionControlsPage({super.key});
@override
State<StatefulWidget> createState() => _SelectionControlsPageState();
}
class _SelectionControlsPageState extends State<SelectionControlsPage> {
static const ValueKey<String> checkbox1Key = ValueKey<String>(checkboxKeyValue);
static const ValueKey<String> checkbox2Key = ValueKey<String>(disabledCheckboxKeyValue);
static const ValueKey<String> radio1Key = ValueKey<String>(radio1KeyValue);
static const ValueKey<String> radio2Key = ValueKey<String>(radio2KeyValue);
static const ValueKey<String> radio3Key = ValueKey<String>(radio3KeyValue);
static const ValueKey<String> switchKey = ValueKey<String>(switchKeyValue);
static const ValueKey<String> labeledSwitchKey = ValueKey<String>(labeledSwitchKeyValue);
bool _isChecked = false;
bool _isOn = false;
bool _isLabeledOn = false;
int _radio = 0;
void _updateCheckbox(bool? newValue) {
setState(() {
_isChecked = newValue!;
});
}
void _updateRadio(int? newValue) {
setState(() {
_radio = newValue!;
});
}
void _updateSwitch(bool newValue) {
setState(() {
_isOn = newValue;
});
}
void _updateLabeledSwitch(bool newValue) {
setState(() {
_isLabeledOn = newValue;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(leading: const BackButton(key: ValueKey<String>('back'))),
body: Material(
child: Column(children: <Widget>[
Row(
children: <Widget>[
Checkbox(
key: checkbox1Key,
value: _isChecked,
onChanged: _updateCheckbox,
),
const Checkbox(
key: checkbox2Key,
value: false,
// TODO(scheglov): Requires linter fix, https://github.com/dart-lang/sdk/issues/49596.
// ignore: avoid_redundant_argument_values
onChanged: null,
),
],
),
const Spacer(),
Row(children: <Widget>[
Radio<int>(key: radio1Key, value: 0, groupValue: _radio, onChanged: _updateRadio),
Radio<int>(key: radio2Key, value: 1, groupValue: _radio, onChanged: _updateRadio),
Radio<int>(key: radio3Key, value: 2, groupValue: _radio, onChanged: _updateRadio),
]),
const Spacer(),
Switch(
key: switchKey,
value: _isOn,
onChanged: _updateSwitch,
),
const Spacer(),
MergeSemantics(
child: Row(
children: <Widget>[
const Text(switchLabel),
Switch(
key: labeledSwitchKey,
value: _isLabeledOn,
onChanged: _updateLabeledSwitch,
),
],
),
),
]),
),
);
}
}