1
0
mirror of https://github.com/flutter/samples.git synced 2026-03-25 05:41:41 +00:00
Files
samples/infinite_list/lib/src/api/fetch.dart
Filip Hracek 1d8cfa11c5 Add the infinite_list sample (#440)
This PR adds a Flutter sample app that shows an implementation of the "infinite list" UX pattern. That is, a list is shown to the user as if it was continuous although it is internally paginated. This is a common feature of mobile apps, from shopping catalogs through search engines to social media clients.
2020-05-15 17:53:54 -07:00

44 lines
1.4 KiB
Dart

// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
import 'item.dart';
import 'page.dart';
const catalogLength = 200;
/// This function emulates a REST API call. You can imagine replacing its
/// contents with an actual network call, keeping the signature the same.
///
/// It will fetch a page of items from [startingIndex].
Future<ItemPage> fetchPage(int startingIndex) async {
// We're emulating the delay inherent to making a network call.
await Future<void>.delayed(const Duration(milliseconds: 500));
// If the [startingIndex] is beyond the bounds of the catalog, an
// empty page will be returned.
if (startingIndex > catalogLength) {
return ItemPage(
items: [],
startingIndex: startingIndex,
hasNext: false,
);
}
// The page of items is generated here.
return ItemPage(
items: List.generate(
itemsPerPage,
(index) => Item(
color: Colors.primaries[index % Colors.primaries.length],
name: 'Color #${startingIndex + index}',
price: 50 + (index * 42) % 200,
)),
startingIndex: startingIndex,
// Returns `false` if we've reached the [catalogLength].
hasNext: startingIndex + itemsPerPage < catalogLength,
);
}