Add a million focus nodes for good measure
This commit is contained in:
@@ -25,6 +25,13 @@ class _GameCardState extends State<GameCard>
|
|||||||
bool _isLoading = false;
|
bool _isLoading = false;
|
||||||
int _deleteClickCount = 0;
|
int _deleteClickCount = 0;
|
||||||
late TextEditingController _nameController;
|
late TextEditingController _nameController;
|
||||||
|
late TextEditingController _versionRegexController;
|
||||||
|
late TextEditingController _rssFeedUrlController;
|
||||||
|
late TextEditingController _lastPlayedController;
|
||||||
|
late FocusNode _nameFocus;
|
||||||
|
late FocusNode _versionRegexFocus;
|
||||||
|
late FocusNode _rssFeedUrlFocus;
|
||||||
|
late FocusNode _lastPlayedFocus;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -34,12 +41,55 @@ class _GameCardState extends State<GameCard>
|
|||||||
vsync: this,
|
vsync: this,
|
||||||
);
|
);
|
||||||
_nameController = TextEditingController(text: widget.game.name);
|
_nameController = TextEditingController(text: widget.game.name);
|
||||||
|
_versionRegexController = TextEditingController(text: widget.game.versionRegex);
|
||||||
|
_rssFeedUrlController = TextEditingController(text: widget.game.rssFeedUrl);
|
||||||
|
_lastPlayedController = TextEditingController(text: widget.game.lastPlayed);
|
||||||
|
|
||||||
|
_nameFocus = FocusNode();
|
||||||
|
_versionRegexFocus = FocusNode();
|
||||||
|
_rssFeedUrlFocus = FocusNode();
|
||||||
|
_lastPlayedFocus = FocusNode();
|
||||||
|
|
||||||
|
_setupFocusListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _setupFocusListeners() {
|
||||||
|
void updateGame() {
|
||||||
|
widget.onGameUpdated(Game(
|
||||||
|
name: widget.isNameEditable ? _nameController.text : widget.game.name,
|
||||||
|
versionRegex: _versionRegexController.text,
|
||||||
|
lastPlayed: _lastPlayedController.text,
|
||||||
|
rssFeedUrl: _rssFeedUrlController.text,
|
||||||
|
actualVersion: widget.game.actualVersion,
|
||||||
|
lastUpdated: widget.game.lastUpdated,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
_nameFocus.addListener(() {
|
||||||
|
if (!_nameFocus.hasFocus) updateGame();
|
||||||
|
});
|
||||||
|
_versionRegexFocus.addListener(() {
|
||||||
|
if (!_versionRegexFocus.hasFocus) updateGame();
|
||||||
|
});
|
||||||
|
_rssFeedUrlFocus.addListener(() {
|
||||||
|
if (!_rssFeedUrlFocus.hasFocus) updateGame();
|
||||||
|
});
|
||||||
|
_lastPlayedFocus.addListener(() {
|
||||||
|
if (!_lastPlayedFocus.hasFocus) updateGame();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_controller.dispose();
|
_controller.dispose();
|
||||||
_nameController.dispose();
|
_nameController.dispose();
|
||||||
|
_versionRegexController.dispose();
|
||||||
|
_rssFeedUrlController.dispose();
|
||||||
|
_lastPlayedController.dispose();
|
||||||
|
_nameFocus.dispose();
|
||||||
|
_versionRegexFocus.dispose();
|
||||||
|
_rssFeedUrlFocus.dispose();
|
||||||
|
_lastPlayedFocus.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,22 +139,13 @@ class _GameCardState extends State<GameCard>
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: TextField(
|
child: TextField(
|
||||||
controller: _nameController,
|
controller: _nameController,
|
||||||
|
focusNode: _nameFocus,
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
enabled: widget.isNameEditable,
|
enabled: widget.isNameEditable,
|
||||||
decoration: const InputDecoration.collapsed(
|
decoration: const InputDecoration.collapsed(
|
||||||
hintText: 'New Game',
|
hintText: 'New Game',
|
||||||
),
|
),
|
||||||
onChanged:
|
onSubmitted: (_) => _nameFocus.unfocus(),
|
||||||
(value) => widget.onGameUpdated(
|
|
||||||
Game(
|
|
||||||
name: value,
|
|
||||||
versionRegex: widget.game.versionRegex,
|
|
||||||
lastPlayed: widget.game.lastPlayed,
|
|
||||||
rssFeedUrl: widget.game.rssFeedUrl,
|
|
||||||
actualVersion: widget.game.actualVersion,
|
|
||||||
lastUpdated: widget.game.lastUpdated,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
@@ -188,58 +229,22 @@ class _GameCardState extends State<GameCard>
|
|||||||
),
|
),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
TextField(
|
TextField(
|
||||||
controller: TextEditingController(text: widget.game.versionRegex),
|
controller: _versionRegexController,
|
||||||
|
focusNode: _versionRegexFocus,
|
||||||
decoration: const InputDecoration(labelText: 'Version Regex'),
|
decoration: const InputDecoration(labelText: 'Version Regex'),
|
||||||
onChanged:
|
onSubmitted: (_) => _versionRegexFocus.unfocus(),
|
||||||
(value) => widget.onGameUpdated(
|
|
||||||
Game(
|
|
||||||
name:
|
|
||||||
widget.isNameEditable
|
|
||||||
? _nameController.text
|
|
||||||
: widget.game.name,
|
|
||||||
versionRegex: value,
|
|
||||||
lastPlayed: widget.game.lastPlayed,
|
|
||||||
rssFeedUrl: widget.game.rssFeedUrl,
|
|
||||||
actualVersion: widget.game.actualVersion,
|
|
||||||
lastUpdated: widget.game.lastUpdated,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
TextField(
|
TextField(
|
||||||
controller: TextEditingController(text: widget.game.rssFeedUrl),
|
controller: _rssFeedUrlController,
|
||||||
|
focusNode: _rssFeedUrlFocus,
|
||||||
decoration: const InputDecoration(labelText: 'RSS Feed URL'),
|
decoration: const InputDecoration(labelText: 'RSS Feed URL'),
|
||||||
onChanged:
|
onSubmitted: (_) => _rssFeedUrlFocus.unfocus(),
|
||||||
(value) => widget.onGameUpdated(
|
|
||||||
Game(
|
|
||||||
name:
|
|
||||||
widget.isNameEditable
|
|
||||||
? _nameController.text
|
|
||||||
: widget.game.name,
|
|
||||||
versionRegex: widget.game.versionRegex,
|
|
||||||
lastPlayed: widget.game.lastPlayed,
|
|
||||||
rssFeedUrl: value,
|
|
||||||
actualVersion: widget.game.actualVersion,
|
|
||||||
lastUpdated: widget.game.lastUpdated,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
TextField(
|
TextField(
|
||||||
controller: TextEditingController(text: widget.game.lastPlayed),
|
controller: _lastPlayedController,
|
||||||
|
focusNode: _lastPlayedFocus,
|
||||||
decoration: const InputDecoration(labelText: 'Last Played'),
|
decoration: const InputDecoration(labelText: 'Last Played'),
|
||||||
onChanged:
|
onSubmitted: (_) => _lastPlayedFocus.unfocus(),
|
||||||
(value) => widget.onGameUpdated(
|
|
||||||
Game(
|
|
||||||
name:
|
|
||||||
widget.isNameEditable
|
|
||||||
? _nameController.text
|
|
||||||
: widget.game.name,
|
|
||||||
versionRegex: widget.game.versionRegex,
|
|
||||||
lastPlayed: value,
|
|
||||||
rssFeedUrl: widget.game.rssFeedUrl,
|
|
||||||
actualVersion: widget.game.actualVersion,
|
|
||||||
lastUpdated: widget.game.lastUpdated,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Reference in New Issue
Block a user