代码之家  ›  专栏  ›  技术社区  ›  footurist

颤振:覆盖触发重建的文本字段

  •  1
  • footurist  · 技术社区  · 6 年前

    我好像不明白下面的代码为什么会打印出来 built 三次(电话 State.build )当你按下按钮显示 Overlay 把注意力集中在 Textfield .

    现在,我知道 MaterialApp 在另一个里面 材料聚丙烯 不是个好主意,这是问题的第二部分:为什么 Keyboard (在物理设备上测试 Android 8.1.0 )当我移除 材料聚丙烯 包裹在 Scaffold 试着集中注意力 单行文本 ? 有一个 材料聚丙烯 在根上 覆盖 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();
                    }
                  )
                );
              }
            )
          );
        }
    }
    
    0 回复  |  直到 6 年前