Я не могу понять, почему код ниже печатается built
три раза (звонит State.build
) после того, как вы нажмете кнопку, чтобы показать Overlay
и сфокусировать Textfield
.
* 1006.* Теперь я знаю, что
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();
}
)
);
}
)
);
}
}