it-swarm.dev

플러터에서 다음 텍스트 필드로 포커스를 이동하는 방법은 무엇입니까?

나는 Flutter를 처음 사용합니다.

Form, TextFormField 위젯을 사용하여 여러 텍스트 입력으로 양식을 작성하고 있습니다. 표시되는 키보드는 "다음"(포커스를 다음 필드로 이동해야 함) 필드 동작을 표시하지 않고 "완료"동작 (키보드를 숨 깁니다)입니다.

나는 공식 문서에서 힌트를 찾았고 직접 할 수있는 것은 아무것도 없었습니다. FocusNode ( cookbook , api doc )에 착륙했지만. 앱의 일부 버튼이나 다른 작업으로 포커스를 이동하는 메커니즘을 제공하지만 키보드 에 있기를 원합니다.

9
Harsh Bhikadia

그것을 달성 할 수있는 방법을 찾았습니다.

  1. 완료 대신 다음 아이콘 표시-textInputAction 매개 변수를 TextInputAction.next

  2. onFieldSubmitted 콜백을 사용하여 다음 필드의 포커스 노드를 요청합니다.

    class FormWidget extends StatelessWidget{    
       final focus = FocusNode();
       @override
       Widget build(BuildContext context) {
        return Form(
          child: SingleChildScrollView(
            padding: EdgeInsets.symmetric(horizontal: 16.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                TextFormField(
                  textInputAction: TextInputAction.next,
                  autofocus: true,
                  decoration: InputDecoration(labelText: "Input 1"),
                  onFieldSubmitted: (v){
                    FocusScope.of(context).requestFocus(focus);
                  },
                ),
                TextFormField(
                  focusNode: focus,
                  decoration: InputDecoration(labelText: "Input 2"),
                ),
              ],
            ),
          ),
        );
      }
    }
    

편집 : 설명서 (flutter.io/docs/cookbook/forms/focus)에 명시된대로 FocusNode 수명 주기도 관리해야합니다. 따라서 init () 메소드에서 FocusNode를 초기화하고 상위 위젯의 dispose ()에 배치하십시오. [email protected]

25
Harsh Bhikadia