трепет RefreshIndicator в PageView.builder - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу реализовать горизонтальный PageView.builder внутри RefreshIndicator. Если пользователь прокручивает до конца, я хочу обновить и извлечь новые данные, но я попытался перейти вниз, чтобы обновить, но индикатор не вышел и новые данные не будут выбраны. Как я могу это сделать?

return new Scaffold(
     appBar: new AppBar(),
      body: new RefreshIndicator(
        onRefresh: _onRefresh,
        child: new PageView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: a.length,
          itemBuilder: (context, index) {
            return new Center(
              child: Text(a[index].toString()),
            );
          },
        ),
      )
    );

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете попробовать что-то вроде этого

  int itemCount = 10;
  StreamController<bool> streamController = StreamController.broadcast();

  void getData() async {
    await Future.delayed(Duration(seconds: 1));
    itemCount += 10;
    streamController.add(false);
  }

  Widget horizontalList() {
    ScrollController scrollController = ScrollController();
    return StreamBuilder(
      initialData: false,
      builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
        if (snapshot.hasData) {
          if (snapshot.data) {
            getData();
          }
          return Listener(
            onPointerMove: (event) async {
              scrollController.position.maxScrollExtent;
              if (event.delta.dx < 0.0 && scrollController.position.pixels == scrollController.position.maxScrollExtent) {
                streamController.add(true);
              }
            },
              child: Stack(alignment: Alignment.center, children: <Widget>[
                ListView.builder(
                    controller: scrollController,
                    itemCount: itemCount,
                    scrollDirection: Axis.horizontal,
                    itemBuilder: (BuildContext context, int pos) {
                      return Container(
                        child: Text('$pos'),
                        alignment: Alignment.center,
                        padding: EdgeInsets.all(12.0),
                      );
                    }),
                snapshot.data ? CircularProgressIndicator() : Container()
              ],));
        }
        return Container();
      },
      stream: streamController.stream.distinct(),
    );
  }

getData - только для эмуляции задержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...