我有 textField 并通過按鈕觸發焦點,但是當我關閉鍵盤并嘗試第二次單擊該按鈕時,鍵盤沒有顯示,因為文本欄位仍然處于焦點
onTap: () {
FocusScope.of(context).requestFocus(controller.textFieldFocus);
},
uj5u.com熱心網友回復:
我想我找到了一個可行的解決方案(目前僅在 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);
});
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387077.html
