簡體   English   中英

在Flutter中延遲重繪窗口小部件

[英]Redraw widget with Delay in Flutter

我想根據條件邏輯從窗口小部件中刪除內容。

下面是我的小部件樹,

return MaterialApp(
    home: Scaffold(
    body: Container(
    margin: EdgeInsets.all(120.0),
    child: Align(
      alignment: Alignment.center,
      child: Column(
        children: <Widget>[
          Text("Loading...");
        ],
      ),
    ),
  ),
));

可以說我有一個變量,該變量從SharePreferences中獲取值,如果該值是“ Hide”,則必須隱藏封裝在其中的Text小部件。 否則,它將顯示從SP獲取的文本。

這里要注意的是,文本最初將在特定持續時間內顯示“正在加載...”,然后在此之后必須根據條件動態地運行。

我已經嘗試過使用TimersetState()但無法真正使其工作。 如果有人對此有解決方案,請提供幫助。

喬丹·戴維斯是對的。 您需要一個FutureBuilderStreamBuilder

return MaterialApp(
        home: Scaffold(
      body: Container(
        margin: EdgeInsets.all(120.0),
        child: Center(
            child: FutureBuilder(
                future: Future.delayed(Duration(seconds: 3)),
                builder: (c, s) => s.connectionState == ConnectionState.done
                    ? Text("Loaded")
                    : Text("Loading..."))),
      ),
    ));

只需將Future.delayed替換為您的函數即可。

我終於找到了將@ olexa.le的Future.Delayed方法與一些修改結合在一起的解決方案。

 main() {
    runApp(MyPrimaryWidgetBuilder());

    Future.delayed(const Duration(seconds: 5), () async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    String appRunStatus = sharedPreferences.getString("appStartStatus");

    if( appRunStatus == null || appRunStatus == "" ){
        //Redraw new Widget
    }
}

現在,我的第一個Widget將被繪制到視口,然后由於Future設置的延遲, main()方法將等待5秒。 然后條件塊將檢查sharedPreferences.getString()返回的值

如果該值為NULL,那么我的目標是繪制一個新的小部件來替換現有的小部件。 在條件模塊內部,我只是使用新的小部件再次調用runApp()方法。

if( appRunStatus == null || appRunStatus == "" ){
      runApp(
         new MaterialApp(
             home: Scaffold(
                 body: Container(
                    child: Text("You Are running the app for the first time..."),
                 ),
             ),
      );
}

假定最初顯示的布局將包含文本“正在加載...”,並且將保持原樣5秒鍾。 根據SharePreferences返回的值5秒鍾后,將使用新的小部件重新繪制整個應用程序的視圖。

我已經重繪了大約6個新的小部件,並且還包含了一些適合我的用例的動畫。 Text小部件只是一個示例,您可以將其替換為所需的任何名稱,這將起作用。 它適用於重新繪制帶有新子代的窗口小部件而無需導航到新頁面。

這對我很有用,如果有更好的解決方案可以更有效地實現相同目標,那么請分享一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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