Unverified Commit 6058e959 authored by Loïc Sharma's avatar Loïc Sharma Committed by GitHub

Add CallbackShortcuts example (#123944)

Add CallbackShortcuts example
parent bc0cbc15
// 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/services.dart';
/// Flutter code sample for [CallbackShortcuts].
void main() => runApp(const CallbackShortcutsApp());
class CallbackShortcutsApp extends StatelessWidget {
const CallbackShortcutsApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('CallbackShortcuts Sample')),
body: const Center(
child: CallbackShortcutsExample(),
),
),
);
}
}
class CallbackShortcutsExample extends StatefulWidget {
const CallbackShortcutsExample({super.key});
@override
State<CallbackShortcutsExample> createState() => _CallbackShortcutsExampleState();
}
class _CallbackShortcutsExampleState extends State<CallbackShortcutsExample> {
int count = 0;
@override
Widget build(BuildContext context) {
return CallbackShortcuts(
bindings: <ShortcutActivator, VoidCallback>{
const SingleActivator(LogicalKeyboardKey.arrowUp): () {
setState(() => count = count + 1);
},
const SingleActivator(LogicalKeyboardKey.arrowDown): () {
setState(() => count = count - 1);
},
},
child: Focus(
autofocus: true,
child: Column(
children: <Widget>[
const Text('Press the up arrow key to add to the counter'),
const Text('Press the down arrow key to subtract from the counter'),
Text('count: $count'),
],
),
),
);
}
}
// 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/services.dart';
import 'package:flutter_api_samples/widgets/shortcuts/callback_shortcuts.0.dart' as example;
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('CallbackShortcutsApp increments and decrements', (WidgetTester tester) async {
await tester.pumpWidget(
const example.CallbackShortcutsApp(),
);
expect(find.text('count: 0'), findsOneWidget);
// Increment the counter.
await tester.sendKeyEvent(LogicalKeyboardKey.arrowUp);
await tester.pump();
expect(find.text('count: 1'), findsOneWidget);
// Decrement the counter.
await tester.sendKeyEvent(LogicalKeyboardKey.arrowDown);
await tester.pump();
expect(find.text('count: 0'), findsOneWidget);
});
}
...@@ -1057,6 +1057,13 @@ class _ShortcutsState extends State<Shortcuts> { ...@@ -1057,6 +1057,13 @@ class _ShortcutsState extends State<Shortcuts> {
/// deletion intent may be to delete a character in a text input, or to delete /// deletion intent may be to delete a character in a text input, or to delete
/// a file in a file menu. /// a file in a file menu.
/// ///
/// {@tool dartpad}
/// This example uses the [CallbackShortcuts] widget to add and subtract
/// from a counter when the up or down arrow keys are pressed.
///
/// ** See code in examples/api/lib/widgets/shortcuts/callback_shortcuts.0.dart **
/// {@end-tool}
///
/// [Shortcuts] and [CallbackShortcuts] can both be used in the same app. As /// [Shortcuts] and [CallbackShortcuts] can both be used in the same app. As
/// with any key handling widget, if this widget handles a key event then /// with any key handling widget, if this widget handles a key event then
/// widgets above it in the focus chain will not receive the event. This means /// widgets above it in the focus chain will not receive the event. This means
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment