Flutter 가 빈 키 보드 를 누 르 면 전체 방법 을 숨 깁 니 다.

네 이 티 브 페이지 를 개발 할 때 키보드 사건 을 처리 하 는 데 있어 서 일반적인 수 요 는 입력 상자 바깥 화면 을 클릭 하여 키 보드 를 숨 기 는 것 이다.마찬가지 로 이러한 수요 도 Flutter 에서 이 루어 져 야 한다.
Android 의 구현 방식 은 기본 Activity 에서 이벤트 배 포 를 실현 하고 터치 위치 가 입력 상자 안에 있 는 지 판단 하 는 것 이다.

 /**
   *       
   */
  @CallSuper
  @Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.MotionEvent ) {
      View view = getCurrentFocus();
      if (isShouldHideKeyBord(view, ev)) {
        hideSoftInput(view.getWindowToken());
      }
    }
    return super.dispatchTouchEvent(ev);
  }

  /**
   *           
   */
  protected boolean isShouldHideKeyBord(View v, MotionEvent ev) {
    if (v != null && (v instanceof EditText)) {
      int[] l = {0, 0};
      v.getLocationInWindow(l);
      int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth();
      return !(ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom);
    }
    return false;
  }

  /**
   *      
   */
  private void hideSoftInput(IBinder token) {
    if (token != null) {
      InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      manager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
    }
  }

그렇다면 플 루 터 에 서 는 어떻게 이 루어 질 까?
많은 글 의 방법 은 다음 과 같 습 니 다.TextField 를 포함 한 화면 마다 Gesture Detector 를 감 싸 고 Focus 를 수 동 으로 제어 합 니 다.초점 을 잃 으 면 키 보드 를 닫 아 달라 고 요청 합 니 다.이것 은 임시 해결 방안 으로 오류 가 발생 하기 쉬 우 며 대량의 코드 를 생 성 한다.

GestureDetector(
  behavior: HitTestBehavior.translucent,
  onTap: () {
    //       
    FocusScope.of(context).requestFocus(FocusNode());
  },
  child: *******
}
일반적으로 이러한 수 요 는 전체 app 에 대응 하 는 것 입 니 다.한 번 고생 하면 영원히 편안 해 지 는 방법 이 있 습 니까?물론 있 습 니 다.MaterialApp 의 builder 방법 을 통 해 Navigator 위 에 있 지만 다른 작은 위 젯 아래 에 작은 위 젯 을 삽입 할 수 있 습 니 다.'전역'Gesture Detector 만 추가 하면 키보드 가 닫 힙 니 다.

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   title: 'Flutter Demo',
   theme: ThemeData(
    primarySwatch: Colors.blue,
    visualDensity: VisualDensity.adaptivePlatformDensity,
   ),
   builder: (context, child) => Scaffold(
    // Global GestureDetector that will dismiss the keyboard
    body: GestureDetector(
     onTap: () {
     hideKeyboard(context);
     },
     child: child,
    ),
   ),
   home: MyHomePage(title: 'Flutter Demo Home Page'),
  );
 }

 void hideKeyboard(BuildContext context) {
  FocusScopeNode currentFocus = FocusScope.of(context);
  if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
   FocusManager.instance.primaryFocus.unfocus();
  }
 }
}


물론 아래 의 이 방법 으로 키 보드 를 닫 을 수도 있다.

SystemChannels.textInput.invokeMethod('TextInput.hide');
이렇게 하면 전체 국면 이 통제 되 고 더 이상 모든 페이지 에 쓸 필요 가 없다.
여기 서 Flutter 가 공백 을 누 르 면 키 보드 를 숨 기 는 전체적인 방법 에 대한 자세 한 내용 을 소개 합 니 다.더 많은 Flutter 가 공백 을 누 르 면 키보드 내용 을 숨 깁 니 다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기