Flutter: текстовое поле в наложении вызывает перестройку - PullRequest
0 голосов
/ 24 октября 2018

Я не могу понять, почему код ниже печатается 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();
                }
              )
            );
          }
        )
      );
    }
}
...