Flutter 是否可以缓存要恢复的小部件?

Flutter 是否可以缓存要恢复的小部件?,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我正在使用getbody()方法获取应用程序body,如果我更改getbody()的变量ct count,getbody()将返回一个小部件将返回不同的窗口小部件,每个窗口小部件在列表队列中排序如果我将变量ct值设置为1,它将从列表中的位置1返回窗口小部件,如果我将变量ct设置为2,它将返回相应的窗口小部件 但问题在于我在每个小部件中调用api,但当我重用该小部件时,它会再次调用api调用,以及为什么在第一次调用后会调用api,以及在重用小部件时如何停止调用api 注意:所有小部件都是有状态

我正在使用getbody()方法获取应用程序body,如果我更改getbody()的变量ct count,getbody()将返回一个小部件
将返回不同的窗口小部件,每个窗口小部件在
列表队列中排序

如果我将变量ct值设置为1,它将从列表中的位置1返回窗口小部件,如果我将变量ct设置为2,它将返回相应的窗口小部件


但问题在于我在每个小部件中调用api,但当我重用该小部件时,它会再次调用api调用,以及为什么在第一次调用后会调用api,以及在重用小部件时如何停止调用api






注意:所有小部件都是有状态的小部件

一般来说,不可能重用这些小部件

通过比较缓存小部件的新旧状态,可以手动重用缓存小部件。这很长,我认为你不应该遵循它

有很多类似于提供商、BLOC、MOBX等,可以很好地管理您的应用程序。它们用于提高应用程序性能、减少小部件重新渲染、管理整个应用程序的数据流等

您还可以尽可能使用const关键字,使有状态小部件更具影响力

就像下面的小部件一样

Column(
        children: <Widget>[
          // Widget 1
          Center(child: Text(dynamic_value),),
          // Widget 2
          Container(
            child: const Center(
              child: const Padding(
                padding: const EdgeInsets.all(10),
                child: Text("Hello"),
              ),
            ),
          ),
        ],
      )
列(
儿童:[
//小部件1
居中(子项:文本(动态_值),),
//小部件2
容器(
孩子:康斯特中心(
子:常量填充(
填充:常量边集。全部(10),
孩子:文本(“你好”),
),
),
),
],
)
在上面的小部件1示例中,不能使用“const关键字”,因为它取决于“动态值”


对于小部件2,可以使用“const关键字”,如果构建方法再次被调用,这将非常有用,“中心”、“填充”和“文本”小部件将不会再次被调用,因为它们被声明为常量小部件。

创建一个列表,并为其添加值,无论是否调用api!例如,如果用户在小部件3(索引)上调用api。现在将boolList[3]=赋值为false。当用户重新选择小部件时,然后使用存储的bool列表调用api或不调用!每次都会重建小部件,它们需要呈现,或者存在状态更改,因此如果您在小部件中存储触发api调用的某些属性,则每次呈现小部件时,都会发生api调用,以避免发生这种情况,将影响您的状态的所有内容都保留在state类而不是widget类中。为什么您要“重用”您的widget?你是说你想把它们藏在什么地方?如果是,请勾选“是”,如果我一次调用小部件A,之后我将在再次调用小部件A后调用另一个B小部件,如果调用小部件A,我不需要再次调用api调用。我使用底部导航,如果用户选择了不在底部导航栏中的任何小部件,则我将新小部件添加到该小部件的顶部(第1页、第2页等)
     Widget getBody() {
 //This code is solved my 50% issue but renaming 50% is there. How to solve this issue?
        return IndexedStack(
          index: _selectedIndex,
          children: <Widget>[
          page1.last.widget,
          page2.last.widget,
          page3.last.widget,
          page4.last.widget
        ],);<br>
//This is the code i used first time 
        switch (_selectedIndex) {
          case 0:
            return page1.last.widget;
          case 1:
            return page2.last.widget;
          case 2:
            return page3.last.widget;
          case 3:
            return page4.last.widget;
        }
      }
class Page{
  Widget widget;
  String title;
  Page({this.title,this.widget});
}
Column(
        children: <Widget>[
          // Widget 1
          Center(child: Text(dynamic_value),),
          // Widget 2
          Container(
            child: const Center(
              child: const Padding(
                padding: const EdgeInsets.all(10),
                child: Text("Hello"),
              ),
            ),
          ),
        ],
      )