diff --git a/examples/api/lib/material/badge/badge.0.dart b/examples/api/lib/material/badge/badge.0.dart new file mode 100644 index 00000000000..bf0e177baa2 --- /dev/null +++ b/examples/api/lib/material/badge/badge.0.dart @@ -0,0 +1,54 @@ +// 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'; + +/// Flutter code sample for [Badge]. + +void main() => runApp(const BadgeExampleApp()); + +class BadgeExampleApp extends StatelessWidget { + const BadgeExampleApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + appBar: AppBar(title: const Text('Badge Sample')), + body: const BadgeExample(), + ), + ); + } +} + +class BadgeExample extends StatelessWidget { + const BadgeExample({super.key}); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: const Badge( + label: Text('Your label'), + backgroundColor: Colors.blueAccent, + child: Icon(Icons.receipt), + ), + onPressed: () {}, + ), + const SizedBox(height: 20), + IconButton( + icon: Badge.count( + count: 9999, + child: const Icon(Icons.notifications), + ), + onPressed: () {}, + ), + ], + ), + ); + } +} diff --git a/examples/api/test/material/badge/badge.0_test.dart b/examples/api/test/material/badge/badge.0_test.dart new file mode 100644 index 00000000000..f91ed9d6276 --- /dev/null +++ b/examples/api/test/material/badge/badge.0_test.dart @@ -0,0 +1,23 @@ +// 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 'package:flutter_api_samples/material/badge/badge.0.dart' as example; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('Verify Badges have label and count', (WidgetTester tester) async { + await tester.pumpWidget( + const example.BadgeExampleApp(), + ); + // Verify that two Badge(s) are present + expect(find.byType(Badge), findsNWidgets(2)); + + // Verify that Badge.count displays label 999+ when count is greater than 999 + expect(find.text('999+'), findsOneWidget); + + // Verify that Badge displays custom label + expect(find.text('Your label'), findsOneWidget); + }); +} diff --git a/packages/flutter/lib/src/material/badge.dart b/packages/flutter/lib/src/material/badge.dart index fe3f6bd733d..2f93d61e6bb 100644 --- a/packages/flutter/lib/src/material/badge.dart +++ b/packages/flutter/lib/src/material/badge.dart @@ -24,6 +24,13 @@ import 'theme.dart'; /// or a button's icon, as in [TextButton.icon]. The badge's default /// configuration is intended to work well with a default sized (24) /// [Icon]. +/// +/// {@tool dartpad} +/// This example shows how to create a [Badge] with label and count +/// wrapped on an icon in an [IconButton]. +/// +/// ** See code in examples/api/lib/material/badge/badge.0.dart ** +/// {@end-tool} class Badge extends StatelessWidget { /// Create a Badge that stacks [label] on top of [child]. ///