[dart] 화면 키보드를 닫으려면 어떻게합니까?

나는 사용자 입력을 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()

이에 대한 PR에 대한 의견 :

이제 # 31909 (be75fb3)가 도착
했으므로 s는
이고 올바르게 처리해야 하므로 FocusScope.of(context).unfocus()대신을
사용해야합니다.FocusScope.of(context).requestFocus(FocusNode())FocusNodeChangeNotifiers

-> 더 이상 사용 하지 마십시오̶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 덕분에