每当更改 BottomNavigationBarItem 时,FutureBuilder 都会重新加载

Posted

技术标签:

【中文标题】每当更改 BottomNavigationBarItem 时,FutureBuilder 都会重新加载【英文标题】:FutureBuilder reloading whenever the BottomNavigationBarItem is changed 【发布时间】:2020-06-18 12:24:21 【问题描述】:

我在带有BottomNavigationBar 的屏幕上使用FutureBuilder。但是每当我点击不同的选项卡并返回时,FutureBuilder 会再次重新加载所有内容。我已经在使用AutomaticKeepAliveClientMixin,我无法保存 getLessons(),所以我不必再次加载它。有人可以帮我吗?

  @override
  Widget build(BuildContext context) 
    return FutureBuilder<List<Lesson>>(
        future: getLessons(),
        builder: (context, snapshot) 
          if (snapshot.connectionState == ConnectionState.none) 
           else if (snapshot.connectionState == ConnectionState.waiting) 
           else 
            return Container();
          
        );
  

这是我的 getLessons():

  Future<List<Lesson>> getLessons() async 
    String url = "...";
    http.Response response = await http.get(url);
    var data = json.decode(response.body);
    (...)
    return lessons;
  

如何保持状态不更新?

【问题讨论】:

【参考方案1】:
// Create instance variable
Future myFuture;

@override
void initState() 
  super.initState();

  // assign this variable your Future
  myFuture = getLessons();



@override
  Widget build(BuildContext context) 
    return FutureBuilder<List<Lesson>>(
        future: future, // use your future here
        builder: (context, snapshot) 
          if (snapshot.connectionState == ConnectionState.none) 
           else if (snapshot.connectionState == ConnectionState.waiting) 
           else 
            return Container();
          
        );
  

感谢CopsOnRoad

【讨论】:

我试过这个,但它总是返回连接状态“无”。 Future 加载后不会更新状态。如果我直接使用“getLessons()”,它可以正常工作【参考方案2】:

问题是我在调用屏幕时没有使用PageView。我在build() 之外启动了4 个屏幕,并在PageView 内将它们全部调用,现在它可以工作了。

body: PageView(
    controller: _pageController,
    onPageChanged: (index) 
      setState(() 
        _index = index;
      );
    ,
    children: [_container1, _container2, _container3, _container4],
  ),

【讨论】:

以上是关于每当更改 BottomNavigationBarItem 时,FutureBuilder 都会重新加载的主要内容,如果未能解决你的问题,请参考以下文章

每当我的 json 数据文件更改时如何刷新页面

每当我覆盖UserInterfaceStyle时如何更改状态栏颜色

每当元素 clientWidth 更改时,Vue 都会更新数据道具

每当新请求到来时,如何更改元素的高度

每当我运行 rake db:migrate 时,Rails Schema 都会意外更改

每当我更改 selenium + java 的缩放时,侧边菜单都不会出现