Flutter ScrollablePositionedList вызывает исключение - PullRequest
0 голосов
/ 12 июля 2020

Я новичок во Flutter. Я работаю над приложением, которому необходимо сохранять позицию прокрутки в ListView, когда пользователи переходят к ListView и из него. Я пытаюсь использовать ScrollablePositionedList для выполнения sh этого. Я последовал простому примеру, предоставленному Google, и получаю сообщение об ошибке при вызове jumpTo на моем ItemScrollController.

My ListView построен из загруженного JSON, поэтому я использую FutureBuilder для первоначального построения и кэшировать модели элементов представления списка.

Вот отрывок из моего кода:

  var listener = ItemPositionsListener.create();
  var scroller = ItemScrollController();

  ScrollablePositionedList _listView(
      AsyncSnapshot snapshot, BuildContext context) {

var list = ScrollablePositionedList.builder(
  itemCount: snapshot.data.length,
  itemBuilder: (context, index) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Text(snapshot.data[index].gaugeName),
    );
  },
  itemPositionsListener: listener,
  itemScrollController: scroller,
);

scroller.jumpTo(index: 100); // error here
return list;
}


  @override
  Widget build(BuildContext context) {
    _getFavorites();
    return Scaffold(
      appBar: AppBar(
        title: Text(kAllStates[widget.stateAbbreviation]),
      ),
      body: FutureBuilder(
        future: _getGaugesForState(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return _listView(snapshot, context);
          } else {
            return Align(child: CircularProgressIndicator());
          }
        },
      ),
      endDrawer: RFDrawer(),
    );
  }
}

Когда вызывается scroller.jumpTo(index: 100);, я получаю следующую ошибку:

NoSuchMethodError: The method '_jumpTo' was called on null.
Receiver: null

введите описание изображения здесь

Есть ли у кого-нибудь подсказки относительно того, что могло вызвать эту ошибку, или что я здесь делаю не так?

Спасибо!

1 Ответ

0 голосов
/ 13 июля 2020

Я не совсем уверен и поправьте меня, если я ошибаюсь, но уверены ли вы, что получите 100 элементов из API? поэтому я думаю, вы переходите к несуществующему индексу. Другое предположение состоит в том, что вы пытаетесь перейти к индексу до создания ListView, поэтому я предполагаю, что вы можете вернуть список, а затем использовать кнопку для прокрутки до указанного индекса c или объекта Timer для автоматической прокрутки после проходит некоторое время, чтобы убедиться, что ListView полностью построен. ListView, и вы хотите сохранить позицию прокрутки во время навигации, поэтому я предполагаю, что PageStorageKey - хороший вариант для этого.

...