Change Mouse Cursor - wurzelsand/flutter-memos GitHub Wiki
Change Mouse Cursor
Der Mauszeiger soll sich ändern, sobald er über dem Container schwebt. Nach einem Klick, soll der Container den Fokus erhalten. Der Container soll das über eine grüne Füllung zeigen.
Ausführung
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: ExampleWidget(),
),
);
}
}
class ExampleWidget extends StatefulWidget {
const ExampleWidget({super.key});
@override
State createState() => _ExampleWidgetState();
}
class _ExampleWidgetState extends State<ExampleWidget> {
Color _color = Colors.transparent;
void _fillWith(Color color) {
setState(() => _color = color);
}
final _focusNode = FocusNode();
@override
Widget build(BuildContext context) {
return MouseRegion( // #1
cursor: SystemMouseCursors.click,
// Request focus when clicked
child: GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(_focusNode); // #2
},
child: Focus(
focusNode: _focusNode,
onFocusChange: (focus) => _fillWith(focus ? Colors.green : Colors.transparent),
child: Container(
width: 300,
height: 100,
decoration: BoxDecoration(
color: _color,
border: Border.all(
color: Colors.black,
),
),
),
),
),
);
}
}
Anmerkungen:
-
Die Größe von
MouseRegion
ist die Größe seines Childs, bzw. dessen Child usw. -
FocusScope.of(context)
istFocus.of(context)
ähnlich, sucht aber zusätzlich bei seinen Abkömmlingen nach einem Fokusbereich.