나는 사용자 입력을 a로 수집 TextFormField
하고 있으며 사용자 FloatingActionButton
가 완료되었음을 나타내는 a 를 누르면 화면 키보드를 닫고 싶습니다.
키보드를 자동으로 없애려면 어떻게합니까?
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
MyHomePageState createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
TextEditingController _controller = new TextEditingController();
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.send),
onPressed: () {
setState(() {
// send message
// dismiss on screen keyboard here
_controller.clear();
});
},
),
body: new Container(
alignment: FractionalOffset.center,
padding: new EdgeInsets.all(20.0),
child: new TextFormField(
controller: _controller,
decoration: new InputDecoration(labelText: 'Example Text'),
),
),
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
void main() {
runApp(new MyApp());
}
답변
Flutter v1.7.8 + hotfix.2 현재 방법은 다음과 같습니다.
FocusScope.of(context).unfocus()
이제 # 31909 (be75fb3)가 도착
했으므로 s는
이고 올바르게 처리해야 하므로FocusScope.of(context).unfocus()
대신을
사용해야합니다.FocusScope.of(context).requestFocus(FocusNode())
FocusNode
ChangeNotifiers
-> 더 이상 사용 하지 마십시오̶r̶e̶q̶u̶e̶s̶t̶F̶o̶c̶u̶s̶(̶F̶o̶c̶u̶s̶N̶o̶d̶e̶(̶)̶
.
F̶o̶c̶u̶s̶S̶c̶o̶p̶e̶.̶o̶f̶(̶c̶o̶n̶t̶e̶x̶t̶)̶.̶r̶e̶q̶u̶e̶s̶t̶F̶o̶c̶u̶s̶(̶F̶o̶c̶u̶s̶N̶o̶d̶e̶(̶)̶)̶;̶
답변
참고 : 이 답변은 구식입니다. 최신 버전의 Flutter에 대한 답변을 참조하십시오 .
의 포커스 TextFormField
를 제거하고 사용하지 않는 사용자에게 제공 하여 키보드를 닫을 수 있습니다 FocusNode
.
FocusScope.of(context).requestFocus(FocusNode());
답변
FocusScope 솔루션이 작동하지 않습니다. 다른 것을 찾았습니다.
import 'package:flutter/services.dart';
SystemChannels.textInput.invokeMethod('TextInput.hide');
그것은 내 문제를 해결했습니다.
답변
Flutter 1.17.3 (2020 년 6 월 현재 안정적인 채널)의 경우
FocusManager.instance.primaryFocus.unfocus();
답변
위의 솔루션 중 어느 것도 나를 위해 작동하지 않습니다.
Flutter는 이것을 제안합니다- 탭이 키보드를 숨기고 onTap이 FocusScope.of (context) .requestFocus (new FocusNode ())를 사용하는 새 GestureDetector () 안에 위젯을 넣습니다.
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
var widget = new MaterialApp(
home: new Scaffold(
body: new Container(
height:500.0,
child: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: new Container(
color: Colors.white,
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
new TextField( ),
new Text("Test"),
],
)
)
)
)
),
);
return widget;
}}
답변
다음 코드는 키보드를 숨기는 데 도움이되었습니다.
void initState() {
SystemChannels.textInput.invokeMethod('TextInput.hide');
super.initState();
}
답변
목록을 스크롤 할 때 키보드를 자동으로 숨기는 .unfocus () 구현 예제
FocusScope.of(context).unfocus();
당신은에서 찾을 수 있습니다
https://github.com/flutter/flutter/issues/36869#issuecomment-518118441
szotp 덕분에
