首页 > 解决方案 > 尝试在滚动上附加新元素时 ListVIew 项目被重复

问题描述

我想要达到的目标

当滚动控制器到达底部时,我正在尝试从 json 数据生成一个列表并将下一页数据附加到当前列表中。

问题

当滚动控制器到达底部时会生成这些项目,但它也会将一些先前的元素添加到列表中并随机制作重复的项目

例如:https ://streamable.com/5n01f

我的代码

    List<MovieJson> movielist = [];

  ScrollController _scrollController = new ScrollController();
  int pageindex = 1;
  _MoviePageState() {
    fetchdata(pageindex);
  }

  void initState() {
    super.initState();

 //SCROLLCONTROLLER LOGIC

    _scrollController.addListener(() {
      if (_scrollController.position.pixels ==
          _scrollController.position.maxScrollExtent) {
        pageindex += 1;
        print(_scrollController.position.pixels.toString());
        setState(() {
          fetchdata(pageindex);
        });
      }
    });
  }

  Future<List<MovieJson>> fetchdata(int index) async {

    final response = await http.get('${tmdb.url_v3}' +
        'trending/movie/week' + //path_param
        '?' + //query_string_options
        '${tmdb.api_key_url}' + //api_key=api_key
        '&page=' + //page
        '$index');

    final jsonData = json.decode(response.body);
    for (var item in jsonData['results']) {
      MovieJson movie = MovieJson.fromJson(item);
      movielist.add(movie);
    }
    return movielist;
  }

其余代码正在使用 FutureBuild 构建 ListView 我也应该添加它吗?

标签: dartflutter

解决方案


在添加之前,您需要检查该电影是否已存在于列表中。

if(!movielist.contains(movie))
  movielist.add(movie);

推荐阅读