Флаттер - непрерывный бесконечный список - PullRequest
0 голосов
/ 02 ноября 2019

Я использую библиотеку sticky_infinite_list для создания двунаправленного бесконечного списка.

Я хочу, чтобы элементы в списке отображали непрерывные числа от 0 до бесконечности в направлении вниз и до минусбесконечность в обратном направлении. Теперь, если я просто использую индекс, предоставленный компоновщиком, в серии чисел, конечно, будут пропуски всякий раз, когда вместо элемента отображается заголовок. У меня нет точного распределения этих заголовков в моем приложении (смоделировано здесь случайным числом). Я пытался отслеживать реальный индекс. Однако это решение ломается, когда направление прокрутки инвертируется, поскольку элементы затем перестраиваются, и реальный индекс теперь неверен (см. Скриншот).

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:sticky_infinite_list/state.dart';
import 'package:sticky_infinite_list/widget.dart';

class ListExample extends StatefulWidget {
  const ListExample({Key key}) : super(key: key);

  @override
  _ListExampleState createState() => _ListExampleState();
}

class _ListExampleState extends State<ListExample> {
  int _previousIndex, _realIndex;

  @override
  Widget build(BuildContext context) {
    _previousIndex = _realIndex = 0;
    return InfiniteList(
      direction: InfiniteListDirection.multi,
      builder: (BuildContext context, int index) {
        print(index);

        return InfiniteListItem(
          contentBuilder: (BuildContext context) {
          if (Random().nextInt(10) <= 1) {
            return _buildHeader();
          }
          return _buildItem(index);
        });
      },
    );
  }

  Widget _buildHeader() {
    return Container(height: 50, color: Colors.blue);
  }

  Widget _buildItem(int index) {
    //scrolling down
    if (index >= _previousIndex) {
      _realIndex += 1;
      //scrolling up
    } else {
      _realIndex -= 1;
    }

    _previousIndex = index;
    return Text(_realIndex.toString());
  }
}

Index error

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