offset_iterator

Last updated:

0 purchases

offset_iterator Image
offset_iterator Images
Add to Cart

Description:

offset iterator

offset_iterator #
OffsetIterator is an offset-based async iterable for true pull-based data
streaming. Inspired by Apache Kafka.
Great for:

IO based streaming
Paginated API calls

Example #
Here is an example straight from the tests, that fetches up to 5 pages from a fake API.
You can view the test case here.
Note that it will only call fetchPage once, as we only request one page.
Future<String> fetchPage(int page) async {
print('Fetching page $page!');
await Future.delayed(const Duration(milliseconds: 50));
return 'page content $page';
}

final i = OffsetIterator(
init: () => 1, // Start from page 1
process: (nextPage) async {
final pageContent = await fetchPage(nextPage);
return OffsetIteratorState(
acc: nextPage + 1, // Set the next accumulator / cursor
chunk: [pageContent], // Add the page content
hasMore: nextPage < 5, // We only want 5 pages
);
},
);

final firstPage = await i.pull();
print(firstPage.toNullable());

// In the logs:
// "Fetching page 1!"
// "page content 1"
copied to clipboard
Usage with Flutter #
A
offset_iterator_builder
package is available.
This package can be used to build widgets from an OffsetIterator's value. The
builder function is given the current BuildContext, the latest value from
the iterator and a pull function for requesting more data.
The builder provides a withValue helper function to make using the state easier!
class MyList extends StatelessWidget {
MyList({Key? key, required this.iterator}) : super(key: key);

final OffsetIterator<List<int>> iterator;

@override
Widget build(BuildContext context) => OffsetIteratorBuilder(
iterator: iterator,
builder: (context, value, pull) => withValue(value)(
data: (listOfNumbers, hasMore) => Text('I have ${listOfNumbers.length} numbers!'),
loading: () => Text('Loading...'),
error: (err) => Text('Error: $err'),
),
);
}
copied to clipboard

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.