본문 바로가기
Flutter/Flutter FAQ

flutter 화면 키보드를 어떻게 해제할 수 있나요?, How can I dismiss the on screen keyboard?

by 베타코드 2023. 5. 8.
반응형

질문


저는 TextFormField를 사용하여 사용자 입력을 수집하고, 사용자가 완료를 나타내는 FloatingActionButton을 누르면 화면 키보드를 해제하고 싶습니다.

키보드를 자동으로 사라지게하는 방법은 무엇인가요?

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: '예제 텍스트'),
        ),
      ),
    );
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new MyHomePage(),
    );
  }
}

void main() {
  runApp(new MyApp());
}

답변


Flutter 버전 2 이상 :

Flutter 2에서 널 안전성을 제공하므로 다음이 최선의 방법입니다:

FocusManager.instance.primaryFocus?.unfocus();

참고: 예전 방식을 사용하면 상태를 다시 빌드하는 문제가 발생합니다.


Flutter 버전 2 미만 :

Flutter v1.7.8+hotfix.2부터 다음 방식을 사용하세요:

FocusScope.of(context).unfocus();

PR에 대한 코멘트:

#31909 (be75fb3)이 머지되었으므로 FocusNodeChangeNotifiers이므로 제대로 폐기되어야 합니다. 이제 FocusScope.of(context).requestFocus(FocusNode()) 대신 FocusScope.of(context).unfocus()를 사용해야 합니다.

-> 이제 ̶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 문서에서 FocusScope 클래스에 대해 더 알아보세요.

반응형

댓글