要让 TextField 在点击空白处时失去焦点,可以通过使用 GestureDetector 或通过添加一个透明的 InkWell 或 GestureDetector 包装器来实现。然后,您可以使用 FocusScope.of(context).unfocus(); 方法来取消焦点。
示例:
import 'package:flutter/material.dart';
class MyTextField extends StatefulWidget {
@override
_MyTextFieldState createState() => _MyTextFieldState();
}
class _MyTextFieldState extends State<MyTextField> {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: Container(
padding: EdgeInsets.all(16.0),
child: TextField(
controller: _controller,
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'Enter text',
),
),
),
);
}
}
或者,您可以使用 InkWell 包装器:
import 'package:flutter/material.dart';
class MyTextField extends StatefulWidget {
@override
_MyTextFieldState createState() => _MyTextFieldState();
}
class _MyTextFieldState extends State<MyTextField> {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
FocusScope.of(context).unfocus();
},
child: Container(
padding: EdgeInsets.all(16.0),
child: TextField(
controller: _controller,
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'Enter text',
),
),
),
);
}
}