Я использую библиотеку 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](https://i.stack.imgur.com/2ESFD.png)