Я хотел бы показать hintText в textField, пока пользователь не коснется другого места.
Точка касания может находиться глубоко в дереве виджетов, и я не знаю, как получить текущий сфокусированный узел где-нибудь в дереве виджетов для вызова несфокусированным, чтобы показать неактивное текстовое поле и скрыть клавиатуру. Это может быть просто проблема с моим пониманием флаттера или с документацией, в которой отсутствует пример и не объясняется, как использовать шаблоны.
В примере кода показан GestureDetector, который вызывает расфокусировку на узле. Здесь это просто, потому что focusNode легко доступен в том же виджете. Вопрос в том, как сделать то же самое во вложенном дереве виджетов. Каков рекомендуемый шаблон для этого?
<strong i="9">@override</strong>
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Stack(children: <Widget>[
new GestureDetector(
excludeFromSemantics: true,
onTapDown: (_) {
_focusNode.unfocus();
}),
new Column(children: <Widget>[
new TextField(
focusNode: _focusNode,
decoration: new InputDecoration(
border: null,
hintText: _focusNode.hasFocus ? 'FOCUS' : 'no focus')),
new RaisedButton(
child: new Text('Remove Focus'),
onPressed: () => _focusNode.unfocus())
])
]));
}
final FocusNode _focusNode = new FocusNode();
<strong i="10">@override</strong>
void initState() {
super.initState();
_focusNode.addListener(() {
setState(() {});
print('Has focus: $_focusNode.hasFocus');
});
}
[√] Flutter (on Microsoft Windows [Version 10.0.16299.192], locale en-US, channel dev)
• Flutter version 0.0.21 at c:\sdks\flutter
• Framework revision 2e449f06f0 (2 days ago), 2018-01-29 14:26:51 -0800
• Engine revision 6921873c71
• Tools Dart version 2.0.0-dev.16.0
• Engine Dart version 2.0.0-edge.da1f52592ef73fe3afa485385cb995b9aec0181a
[√] Android toolchain - develop for Android devices (Android SDK 27.0.2)
• Android SDK at C:\Users\ride4\AppData\Local\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.2
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
[√] Android Studio (version 3.0)
• Android Studio at C:\Program Files\Android\Android Studio
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
[√] IntelliJ IDEA Community Edition (version 2017.2)
• Flutter plugin version 19.1
• Dart plugin version 172.4343.25
[√] Connected devices
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 7.1.1 (API 25) (emulator)
Я думаю, это сводится к
FocusScope.of(context).requestFocus(new FocusNode());
Закрытие как дубликат № 7247
возможно также # 20227
Самый полезный комментарий
Я думаю, это сводится к
Закрытие как дубликат № 7247
возможно также # 20227