ListView перейти к следующему пункту после истечения таймера - PullRequest
0 голосов
/ 25 октября 2019

Я хочу изменить индекс моего родителя widget, который равен Listview.builder после истечения срока действия timer. В основном, это будет переход к следующему пункту list.

, вот код моего родительского виджета :

РЕДАКТИРОВАТЬ Iотправил неправильный код. Вот правильный код для родителя

Widget build(BuildContext context) {
    return Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        color: Colors.black,
        child: Swiper(
          index: widget.inititalIndex,
          itemBuilder: (BuildContext c, int i) {
            return StoriesPerUser(
              storiesList: widget.storiesList,
              selectedIndex: i,
            );
          },
          itemCount: widget.storiesList.length,
          loop: false,
          duration: 1000,
        ));
  }

Я передаю целом List на ViewStoryModal и index элемента, выбранного пользователем.

вот код ViewStoryModal:

class StoriesPerUser extends StatefulWidget {
  StoriesPerUser({
    @required this.storiesList,
    @required this.selectedIndex,
  });

  final List<Stories> storiesList;
  int selectedIndex;

  _StoriesPerUserState createState() => _StoriesPerUserState();
}

class _StoriesPerUserState extends State<StoriesPerUser> {
  int _index = 0;
  int storiesLength = 0;
  CountDown _countDown;
  StreamSubscription _countDownSubscription;

  @override
  void initState() {
    super.initState();
    this._initTimer();
    print(widget.storiesList.length);
  }

  _initTimer() {
    if (mounted)
      setState(() {
        this._countDown = CountDown(Duration(seconds: 5));
        this._countDown.remainingTime = Duration(seconds: 5);
        this._countDownSubscription = this._countDown.stream.listen(null);
      });

    this._countDownSubscription.onData((d) {
      setState(() {}); // Updates the UI to animate the progress bar
    });

    this._countDownSubscription.onDone(() {
      if (widget.storiesList[widget.selectedIndex].story.length ==
          this._index + 1) {
        setState(() {
          storiesLength++;
        });
        if (widget.storiesList.length == storiesLength) {
          Navigator.of(context).pop();
        } else {
          setState(() {
             //THIS IS WHERE THE UPDATING SHOULD HAPPEN
            //IT SHOWS NEXT ITEM OF MY LISTVIEW BUT DOESN'T CHANGE THE INDEX OF THE ACTUAL LISTVIEW
            widget.selectedIndex++;
            this._index = 0;
            this._initTimer();
          });
        }
      } else {
        if (mounted)
          setState(() {
            this._index++;
            this._initTimer();
          });
      }
    });
  }
...