我有 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(),
);
}
}
FocusScope.of(context).unfocus() 當我將小部件從 main.dart 拆分到另一個檔案(在本例中為 home_page.dart)時不起作用,因此專案將整潔。
但是,當我直接將HomePage() return(Scaffold) 放入 main.dart時它是有效的,(我說它有效是因為當從文本欄位中未聚焦時,android 鍵盤會消失)
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
),
);
}
}
我認為這是背景關系錯誤,我不知道背景關系屬性和方法。
uj5u.com熱心網友回復:
把你的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為您提供了新的背景關系,該背景關系用于onTap您的GestureDetector. 與您之前使用的背景關系(來自 build 方法引數)相比,這個新背景關系包含有關小部件樹中位置的更多具體細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/391676.html
