尝试在滚动上附加新元素时,ListVIew项变得重复

时间:2018-12-08 13:40:38

标签: dart flutter

我要实现的目标

我正在尝试从json数据生成一个列表,然后在scrollcontroller到达底部时将下一页数据追加到当前列表中。

问题

当scrollcontroller触底时会生成项目,但它还会在列表中添加一些先前的元素并随机制作重复的项目

例如: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的吗?

1 个答案:

答案 0 :(得分:0)

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

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