Add example for CupertinoCheckbox (#151779)

This commit is contained in:
Victor Sanni 2024-07-16 09:54:02 -07:00 committed by GitHub
parent ba57fa3821
commit cb4ba2fddc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 102 additions and 0 deletions

View File

@ -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<CupertinoCheckboxExample> createState() => _CupertinoCheckboxExampleState();
}
class _CupertinoCheckboxExampleState extends State<CupertinoCheckboxExample> {
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;
});
},
);
}
}

View File

@ -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);
});
}

View File

@ -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.