Skip to content

Commit

Permalink
Add example for CupertinoCheckbox (#151779)
Browse files Browse the repository at this point in the history
  • Loading branch information
victorsanni authored Jul 16, 2024
1 parent ba57fa3 commit cb4ba2f
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 0 deletions.
55 changes: 55 additions & 0 deletions examples/api/lib/cupertino/checkbox/cupertino_checkbox.0.dart
Original file line number Diff line number Diff line change
@@ -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;
});
},
);
}
}
Original file line number Diff line number Diff line change
@@ -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);
});
}
6 changes: 6 additions & 0 deletions packages/flutter/lib/src/cupertino/checkbox.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit cb4ba2f

Please sign in to comment.