From 888bdcac255f9e7ad23320c6e4b062ac9627b264 Mon Sep 17 00:00:00 2001 From: Harsh Yadav Date: Tue, 19 May 2026 11:07:51 +0530 Subject: [PATCH 1/2] Fix GuessInput focus persistence using StatefulWidget --- examples/fwe/birdle/lib/main.dart | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/examples/fwe/birdle/lib/main.dart b/examples/fwe/birdle/lib/main.dart index 062a1c6a716..67144ad8681 100644 --- a/examples/fwe/birdle/lib/main.dart +++ b/examples/fwe/birdle/lib/main.dart @@ -69,20 +69,33 @@ class _GamePageState extends State { // #enddocregion GamePage // #docregion GuessInput -class GuessInput extends StatelessWidget { - GuessInput({super.key, required this.onSubmitGuess}); +class GuessInput extends StatefulWidget { + const GuessInput({super.key, required this.onSubmitGuess}); final void Function(String) onSubmitGuess; + @override + State createState() => _GuessInputState(); +} + +class _GuessInputState extends State { final TextEditingController _textEditingController = TextEditingController(); + final FocusNode _focusNode = FocusNode(); void _onSubmit() { - onSubmitGuess(_textEditingController.text.trim()); + widget.onSubmitGuess(_textEditingController.text.trim()); _textEditingController.clear(); _focusNode.requestFocus(); } + @override + void dispose() { + _textEditingController.dispose(); + _focusNode.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return Row( From 0eca84d53355d8e6270fd0d6142766d9ee4fee40 Mon Sep 17 00:00:00 2001 From: Harsh Yadav Date: Tue, 19 May 2026 11:13:34 +0530 Subject: [PATCH 2/2] Prevent invalid guess submissions in GuessInput --- examples/fwe/birdle/lib/main.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/examples/fwe/birdle/lib/main.dart b/examples/fwe/birdle/lib/main.dart index 67144ad8681..626dcee1895 100644 --- a/examples/fwe/birdle/lib/main.dart +++ b/examples/fwe/birdle/lib/main.dart @@ -84,8 +84,13 @@ class _GuessInputState extends State { final FocusNode _focusNode = FocusNode(); void _onSubmit() { - widget.onSubmitGuess(_textEditingController.text.trim()); - _textEditingController.clear(); + final text = _textEditingController.text.trim(); + + if (text.length == 5) { + widget.onSubmitGuess(text); + _textEditingController.clear(); + } + _focusNode.requestFocus(); }