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;
|
||||
int _deleteClickCount = 0;
|
||||
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
|
||||
void initState() {
|
||||
@@ -34,12 +41,55 @@ class _GameCardState extends State<GameCard>
|
||||
vsync: this,
|
||||
);
|
||||
_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
|
||||
void dispose() {
|
||||
_controller.dispose();
|
||||
_nameController.dispose();
|
||||
_versionRegexController.dispose();
|
||||
_rssFeedUrlController.dispose();
|
||||
_lastPlayedController.dispose();
|
||||
_nameFocus.dispose();
|
||||
_versionRegexFocus.dispose();
|
||||
_rssFeedUrlFocus.dispose();
|
||||
_lastPlayedFocus.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -89,22 +139,13 @@ class _GameCardState extends State<GameCard>
|
||||
Expanded(
|
||||
child: TextField(
|
||||
controller: _nameController,
|
||||
focusNode: _nameFocus,
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
enabled: widget.isNameEditable,
|
||||
decoration: const InputDecoration.collapsed(
|
||||
hintText: 'New Game',
|
||||
),
|
||||
onChanged:
|
||||
(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,
|
||||
),
|
||||
),
|
||||
onSubmitted: (_) => _nameFocus.unfocus(),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
@@ -188,58 +229,22 @@ class _GameCardState extends State<GameCard>
|
||||
),
|
||||
const Divider(),
|
||||
TextField(
|
||||
controller: TextEditingController(text: widget.game.versionRegex),
|
||||
controller: _versionRegexController,
|
||||
focusNode: _versionRegexFocus,
|
||||
decoration: const InputDecoration(labelText: 'Version Regex'),
|
||||
onChanged:
|
||||
(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,
|
||||
),
|
||||
),
|
||||
onSubmitted: (_) => _versionRegexFocus.unfocus(),
|
||||
),
|
||||
TextField(
|
||||
controller: TextEditingController(text: widget.game.rssFeedUrl),
|
||||
controller: _rssFeedUrlController,
|
||||
focusNode: _rssFeedUrlFocus,
|
||||
decoration: const InputDecoration(labelText: 'RSS Feed URL'),
|
||||
onChanged:
|
||||
(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,
|
||||
),
|
||||
),
|
||||
onSubmitted: (_) => _rssFeedUrlFocus.unfocus(),
|
||||
),
|
||||
TextField(
|
||||
controller: TextEditingController(text: widget.game.lastPlayed),
|
||||
controller: _lastPlayedController,
|
||||
focusNode: _lastPlayedFocus,
|
||||
decoration: const InputDecoration(labelText: 'Last Played'),
|
||||
onChanged:
|
||||
(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,
|
||||
),
|
||||
),
|
||||
onSubmitted: (_) => _lastPlayedFocus.unfocus(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
Reference in New Issue
Block a user