将小部件拆分到另一个文件时,unfocus 不起作用
unfocus doesn't work when split widget to another file
我有main.dart
part 'home_page.dart';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _judul = 'Private Chat';
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: MaterialApp(
title: _judul,
home: HomePage(), // Using separated file
),
);
}
}
和home_page.dart
part of 'main.dart';
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: TextField(),
);
}
}
当我将小部件从 main.dart 拆分到另一个文件(在本例中为 home_page.dart)时,FocusScope.of(context).unfocus()
不起作用,因此项目会很整洁。
但是,当我直接将 HomePage() return
(脚手架)放到 main.dart 时,它是有效的(我说有效是因为 android keybord 在文本字段未聚焦时消失)
part 'home_page.dart';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _judul = 'Private Chat';
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: MaterialApp(
title: _judul,
home: Scaffold(...), //Directly put textfield
),
);
}
}
我怀疑这是上下文错误,我不知道上下文属性和方法。
将你的 GestureDetector
放在 MaterialApp
下(交换它们)并用 Builder
包裹起来,像这样:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _judul = 'Private Chat';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _judul,
home: Builder(
builder: (context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: HomePage(),
);
},
),
);
}
}
之所以有效,是因为 Builder
为您提供了新的上下文,该上下文在 GestureDetector
的 onTap
函数中使用。这个新上下文包含比您之前使用的那个(来自构建方法参数)更具体的关于小部件树中位置的详细信息。
我有main.dart
part 'home_page.dart';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _judul = 'Private Chat';
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: MaterialApp(
title: _judul,
home: HomePage(), // Using separated file
),
);
}
}
和home_page.dart
part of 'main.dart';
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: TextField(),
);
}
}
当我将小部件从 main.dart 拆分到另一个文件(在本例中为 home_page.dart)时,FocusScope.of(context).unfocus()
不起作用,因此项目会很整洁。
但是,当我直接将 HomePage() return
(脚手架)放到 main.dart 时,它是有效的(我说有效是因为 android keybord 在文本字段未聚焦时消失)
part 'home_page.dart';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _judul = 'Private Chat';
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: MaterialApp(
title: _judul,
home: Scaffold(...), //Directly put textfield
),
);
}
}
我怀疑这是上下文错误,我不知道上下文属性和方法。
将你的 GestureDetector
放在 MaterialApp
下(交换它们)并用 Builder
包裹起来,像这样:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _judul = 'Private Chat';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _judul,
home: Builder(
builder: (context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: HomePage(),
);
},
),
);
}
}
之所以有效,是因为 Builder
为您提供了新的上下文,该上下文在 GestureDetector
的 onTap
函数中使用。这个新上下文包含比您之前使用的那个(来自构建方法参数)更具体的关于小部件树中位置的详细信息。