diff --git a/examples/api/lib/cupertino/checkbox/cupertino_checkbox.0.dart b/examples/api/lib/cupertino/checkbox/cupertino_checkbox.0.dart new file mode 100644 index 00000000000..2aa040c405b --- /dev/null +++ b/examples/api/lib/cupertino/checkbox/cupertino_checkbox.0.dart @@ -0,0 +1,55 @@ +// 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/cupertino.dart'; + +/// Flutter code sample for [CupertinoCheckbox]. + +void main() => runApp(const CupertinoCheckboxApp()); + +class CupertinoCheckboxApp extends StatelessWidget { + const CupertinoCheckboxApp({super.key}); + + @override + Widget build(BuildContext context) { + return const CupertinoApp( + theme: CupertinoThemeData(brightness: Brightness.light), + home: CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('CupertinoCheckbox Example'), + ), + child: SafeArea( + child: CupertinoCheckboxExample(), + ), + ), + ); + } +} + +class CupertinoCheckboxExample extends StatefulWidget { + const CupertinoCheckboxExample({super.key}); + + @override + State createState() => _CupertinoCheckboxExampleState(); +} + +class _CupertinoCheckboxExampleState extends State { + bool? isChecked = true; + + @override + Widget build(BuildContext context) { + return CupertinoCheckbox( + checkColor: CupertinoColors.white, + // Set tristate to true to make the checkbox display a null value + // in addition to the default true and false values. + tristate: true, + value: isChecked, + onChanged: (bool? value) { + setState(() { + isChecked = value; + }); + }, + ); + } +} diff --git a/examples/api/test/cupertino/checkbox/cupertino_checkbox.0_test.dart b/examples/api/test/cupertino/checkbox/cupertino_checkbox.0_test.dart new file mode 100644 index 00000000000..1337e4ceb29 --- /dev/null +++ b/examples/api/test/cupertino/checkbox/cupertino_checkbox.0_test.dart @@ -0,0 +1,41 @@ +// 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/cupertino.dart'; +import 'package:flutter_api_samples/cupertino/checkbox/cupertino_checkbox.0.dart' as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('Checkbox can be checked', (WidgetTester tester) async { + await tester.pumpWidget( + const example.CupertinoCheckboxApp(), + ); + + CupertinoCheckbox checkbox = tester.widget(find.byType(CupertinoCheckbox)); + + // Verify the initial state of the checkbox. + expect(checkbox.value, isTrue); + expect(checkbox.tristate, isTrue); + + // Tap the checkbox and verify the state change. + await tester.tap(find.byType(CupertinoCheckbox)); + await tester.pump(); + checkbox = tester.widget(find.byType(CupertinoCheckbox)); + + expect(checkbox.value, isNull); + + // Tap the checkbox and verify the state change. + await tester.tap(find.byType(CupertinoCheckbox)); + await tester.pump(); + checkbox = tester.widget(find.byType(CupertinoCheckbox)); + + expect(checkbox.value, isFalse); + + await tester.tap(find.byType(CupertinoCheckbox)); + await tester.pump(); + checkbox = tester.widget(find.byType(CupertinoCheckbox)); + + expect(checkbox.value, isTrue); + }); +} diff --git a/packages/flutter/lib/src/cupertino/checkbox.dart b/packages/flutter/lib/src/cupertino/checkbox.dart index a5d6e307246..9eaf17a152b 100644 --- a/packages/flutter/lib/src/cupertino/checkbox.dart +++ b/packages/flutter/lib/src/cupertino/checkbox.dart @@ -41,6 +41,12 @@ const double _kCupertinoFocusColorSaturation = 0.835; /// ([CupertinoSwitch] in Flutter) instead, or to find a creative custom /// solution. /// +/// {@tool dartpad} +/// This example shows a toggleable [CupertinoCheckbox]. +/// +/// ** See code in examples/api/lib/cupertino/checkbox/cupertino_checkbox.0.dart ** +/// {@end-tool} +/// /// See also: /// /// * [Checkbox], the Material Design equivalent.