[Flutter] 선택된 위젯을 관리하는 Focusnode

2020. 9. 24. 12:42·Flutter/Flutter Tech
목차
  1. textfield에 focusnode 할당
  2. focusnode를 제거하여 아무것도 선택되지 않은 상태로 한다.
  3. 포커스 이동에 따른 액션 (focus listener)

- textfield를 선택했을 때, 다른 위젯이 변하거나 생성되게 하는 경우

- textfield에 데이터를 입력 후 키보드의 next, done 버튼을 터치했을 때 다음 textfield로 자동으로 넘어가게 할 경우

 

 

주로 textfield에서 사용되며 말 그대로 focus가 어디에 있는지를 관리한다.

controller와 마찬가지로 textfield 하나 당 하나의 focusnode를 할당해주면 된다.

textfield가 선택되면 해당 focusnode는 포커스를 획득하는 단순한 구조이다.

 

 

textfield에 focusnode 할당

  FocusNode _focusNode = FocusNode();
  
  ..
  
  
	TextField(
                            focusNode: _focusNode,
                            ..
                            

 

focusnode를 제거하여 아무것도 선택되지 않은 상태로 한다.

//가상의 포커스를 생성
FocusScope.of(context).requestFocus(FocusNode());

혹은

//이전 포커스의 포커스를 삭제
FocusManager.instance.primaryFocus.unfocus();

예를 들어 텍스트필드에서 뒤로가기 버튼을 눌러 키보드가 닫히는 경우에 focusnode를 제거하는 용도로 사용가능하다.

두 함수 모두 동일한 기능을 한다.

FocusScope에 대해서는 포스팅 예정.

 

 

포커스 이동에 따른 액션 (focus listener)

void initState(){
	_focusListen(); //생성자에서 리스너가 선언되어야함.

..



_focusListen() { //여러 focusnode의 리스너를 이 곳에서 생성시킨다.
    _focusNode.addListener(() {  
      if (_focusNode.hasFocus) { //포커스노드가 포커스를 가지고 있을 때
        
        
        
        });
      } else if (!_searchFocus.hasFocus) { //포커스노드가 포커스를 가지고 있지 않을 때
        
        
        
      }
    });
  }

 

 

각 포커스노드마다 리스너를 지정해주면 각 포커스들이 포커스를 획득했을 때, 해당 리스너들을 호출하여 발동한다.

저작자표시 비영리 변경금지 (새창열림)

'Flutter > Flutter Tech' 카테고리의 다른 글

[플러터] 파일을 cache 저장소에 저장하기  (0) 2020.12.25
[플러터] 이미지를 cache 저장소에 저장하기  (0) 2020.12.22
[플러터] 위젯의 크기&위치를 반환받는 법  (0) 2020.12.15
[플러터] 자식 클래스에서 부모 클래스에 데이터 전달  (0) 2020.11.19
[Flutter] 키보드 팝업 상태에서 뒤로가기 이벤트 처리  (0) 2020.09.24
  1. textfield에 focusnode 할당
  2. focusnode를 제거하여 아무것도 선택되지 않은 상태로 한다.
  3. 포커스 이동에 따른 액션 (focus listener)
'Flutter/Flutter Tech' 카테고리의 다른 글
  • [플러터] 이미지를 cache 저장소에 저장하기
  • [플러터] 위젯의 크기&위치를 반환받는 법
  • [플러터] 자식 클래스에서 부모 클래스에 데이터 전달
  • [Flutter] 키보드 팝업 상태에서 뒤로가기 이벤트 처리
코딩으로세계정복
코딩으로세계정복
Connecting the dots
  • 코딩으로세계정복
    코딩으로 세계정복
    코딩으로세계정복
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    useState
    flutter web
    플러터 웹
    Firebase
    JavaScript
    플러터
    포트폴리오
    리액트
    웹
    DP
    TypeScript
    react
    CSS
    탐욕법
    Redux
    map
    링고리
    Flutter
    useRef
    파이썬
    github
    JSON
    Lingory
    Python
    DART
    프로그래머스
    알고리즘
    자바스크립트
    HTML
    useTranslation
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩으로세계정복
[Flutter] 선택된 위젯을 관리하는 Focusnode

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.