首页 > 解决方案 > 每当底部导航栏项目更改时,FutureBuilder 都会重新加载

问题描述

FutureBuilder在屏幕上使用BottomNavigationBar. 但是,每当我单击不同的选项卡并返回时,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;
  }

如何维护状态以免更新?

标签: flutterdart

解决方案


// 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


推荐阅读