// 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 'dart:math'; 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 fetchPage(int startingIndex) async { // We're emulating the delay inherent to making a network call. await Future.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( min(itemsPerPage, catalogLength - startingIndex), (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, ); }