@@ -50,6 +50,7 @@ class _UtilitiesViewState extends State<_UtilitiesView>
5050 with TickerProviderStateMixin {
5151 late final TabController _tabController;
5252 final TextEditingController _descriptionController = TextEditingController ();
53+ final FocusNode _descriptionFocusNode = FocusNode ();
5354
5455 @override
5556 void initState () {
@@ -62,10 +63,11 @@ class _UtilitiesViewState extends State<_UtilitiesView>
6263
6364 @override
6465 void dispose () {
65- super .dispose ();
66-
6766 _tabController.dispose ();
6867 _descriptionController.dispose ();
68+ _descriptionFocusNode.dispose ();
69+
70+ super .dispose ();
6971 }
7072
7173 @override
@@ -84,7 +86,8 @@ class _UtilitiesViewState extends State<_UtilitiesView>
8486 final state = bloc.state;
8587 if (state is ! DocumentLoadSuccess ) return const SizedBox .shrink ();
8688 final metadata = state.metadata;
87- if (_descriptionController.text != metadata.description) {
89+ if (! _descriptionFocusNode.hasFocus &&
90+ _descriptionController.text != metadata.description) {
8891 _descriptionController.text = metadata.description;
8992 }
9093 void submitDescription (String ? value) {
@@ -130,16 +133,23 @@ class _UtilitiesViewState extends State<_UtilitiesView>
130133 builder: (context) => [
131134 Column (
132135 children: [
133- TextFormField (
134- minLines: 3 ,
135- maxLines: 5 ,
136- controller: _descriptionController,
137- decoration: InputDecoration (
138- labelText: AppLocalizations .of (context).description,
139- border: const OutlineInputBorder (),
136+ Focus (
137+ onFocusChange: (hasFocus) {
138+ if (! hasFocus) submitDescription (null );
139+ },
140+ child: TextFormField (
141+ minLines: 3 ,
142+ maxLines: 5 ,
143+ controller: _descriptionController,
144+ focusNode: _descriptionFocusNode,
145+ decoration: InputDecoration (
146+ labelText: AppLocalizations .of (context).description,
147+ border: const OutlineInputBorder (),
148+ ),
149+ onTapOutside: (_) => submitDescription (null ),
150+ onFieldSubmitted: submitDescription,
151+ onSaved: submitDescription,
140152 ),
141- onFieldSubmitted: submitDescription,
142- onSaved: submitDescription,
143153 ),
144154 const SizedBox (height: 8 ),
145155 ListTile (
0 commit comments