簡體   English   中英

Flutter:疊加層中的文本字段觸發重建

[英]Flutter: Textfield in overlay triggering rebuilds

我似乎無法找出為什么下面打印的代碼built三次(電話State.build )你打的按鈕顯示后Overlay和聚焦Textfield

現在,我知道一個MaterialApp另一個里面MaterialApp是不是一個好主意,這就是問題的第二部分:為什么不會在Keyboard (帶有物理設備上測試Android 8.1.0 )出現時,我刪除MaterialAppScaffold並嘗試聚焦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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM