[英]Flutter: Textfield in overlay triggering rebuilds
我似乎無法找出為什么下面打印的代碼built
三次(電話State.build
)你打的按鈕顯示后Overlay
和聚焦Textfield
。
現在,我知道一個MaterialApp
另一個里面MaterialApp
是不是一個好主意,這就是問題的第二部分:為什么不會在Keyboard
(帶有物理設備上測試Android 8.1.0
)出現時,我刪除MaterialApp
纏Scaffold
並嘗試聚焦Textfield
? 根目錄下有一個MaterialApp
,它的Overlay
Overlay.of(context)
應該可以找到。
import "package:flutter/material.dart";
import "package:flutter/services.dart";
void main() {
SystemChrome.setEnabledSystemUIOverlays([]);
runApp(
MaterialApp(
home: Scaffold(
body: MyOtherApp()
)
)
);
}
class MyAppState extends State<MyApp> {
TextEditingController controller = TextEditingController();
@override
Widget build(BuildContext context) {
controller.text = "placeholder";
return MaterialApp(
home: Scaffold(
body: (){
print("built");
return TextField(
controller: controller,
);
}()
)
);
}
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MyAppState();
}
}
class MyOtherApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: FlatButton(
child: Text(
"show overlay",
),
onPressed: () {
Overlay.of(context).insert(
OverlayEntry(
builder: (context) {
return MyApp();
}
)
);
}
)
);
}
}
在我的情況下,我把 SystemChrome.setEnabledSystemUIOverlays([]); 在構建下而不是在主要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.