Skip to main content

CallbackShortcuts | Flutter

  • CallbackShortcuts | Flutter

No Flutter, CallbackShortcuts é um widget que faz parte do sistema de atalhos de teclado e ações (Shortcuts and Actions), introduzido para permitir a construção de interfaces reativas a comandos de teclado, o que é especialmente útil em apps desktop ou web, mas também pode ser aproveitado em contextos mobile com teclados físicos.


📌 O que é CallbackShortcuts?

CallbackShortcuts permite mapear combinações de teclas diretamente para funções de callback, sem a necessidade de criar uma Intent e uma Action separadas (o que seria necessário com Shortcuts e Actions tradicionais).


✅ Exemplo simples

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {

Widget build(BuildContext context) {
return MaterialApp(
home: CallbackShortcutsExample(),
);
}
}

class CallbackShortcutsExample extends StatefulWidget {

State<CallbackShortcutsExample> createState() => _CallbackShortcutsExampleState();
}

class _CallbackShortcutsExampleState extends State<CallbackShortcutsExample> {
String _message = 'Pressione Ctrl + K';

void _handleShortcut() {
setState(() {
_message = 'Atalho Ctrl + K pressionado!';
});
}


Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('CallbackShortcuts Example')),
body: Center(
child: CallbackShortcuts(
bindings: <ShortcutActivator, VoidCallback>{
LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyK): _handleShortcut,
},
child: Focus(
autofocus: true,
child: Text(_message),
),
),
),
);
}
}

🔍 Comparando com Shortcuts + Actions

Antes do CallbackShortcuts, seria necessário algo assim:

  • Criar uma Intent
  • Criar uma Action para essa Intent
  • Usar Shortcuts para mapear tecla → Intent
  • Usar Actions para mapear IntentAction

Com CallbackShortcuts, tudo isso é reduzido para apenas um mapeamento direto entre tecla e função.


🚨 Importante

  • O widget filho precisa estar dentro de um Focus ou FocusableActionDetector e estar focado para que os atalhos funcionem.
  • Funciona melhor em plataformas com teclado: web, desktop (Windows, macOS, Linux).

Quer que eu monte um exemplo com múltiplos atalhos ou integração com comandos mais complexos?