如何取消对 TextField 的关注 什么时候在 flutter 中关闭键盘

How to unfocus TextFiled When id dismis the keyboard in flutter

我有 textField 并通过按钮触发焦点,但是当我关闭键盘并尝试第二次单击按钮时,键盘没有出现,因为文本字段仍然聚焦

  onTap: () {
    FocusScope.of(context).requestFocus(controller.textFieldFocus); 
  },

我想我找到了一个可行的解决方案,(目前仅在 android 模拟器上测试过)。

这是一个小的工作示例:

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late FocusNode node;

  @override
  void initState() {
    super.initState();
    node = FocusNode();
  }

  @override
  void dispose() {
    node.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark(),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Focus Demo'),
          actions: [
            TextButton(
              onPressed: () {
                node.unfocus();
                WidgetsBinding.instance?.addPostFrameCallback((_) {
                  FocusScope.of(context).requestFocus(node);
                });
              },
              child: Text(
                'Focus',
                style: Theme.of(context).primaryTextTheme.bodyText1,
              ),
            ),
          ],
        ),
        body: TextField(
          focusNode: node,
        ),
      ),
    );
  }
}

我能够通过使用 WidgetsBinding.instance?.addPostFrameCallback 在散焦和重新聚焦之间添加延迟来使其工作。

在你的情况下应该翻译成这样:

  onTap: () {
    controller.textFieldFocus.unfocus();
    WidgetsBinding.instance?.addPostFrameCallback((_) {
      FocusScope.of(context).requestFocus(controller.textFieldFocus); 
    });
  },