|
|
|
// Copyright 2018-present the Flutter authors. All Rights Reserved.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
enum Category {
|
|
|
|
all,
|
|
|
|
accessories,
|
|
|
|
clothing,
|
|
|
|
home,
|
|
|
|
}
|
|
|
|
|
|
|
|
class ProductsRepository {
|
|
|
|
static const _allProducts = <Product>[
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 0,
|
|
|
|
name: 'Vagabond sack',
|
|
|
|
price: 120,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 1,
|
|
|
|
name: 'Stella sunglasses',
|
|
|
|
price: 58,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 2,
|
|
|
|
name: 'Whitney belt',
|
|
|
|
price: 35,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 3,
|
|
|
|
name: 'Garden strand',
|
|
|
|
price: 98,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 4,
|
|
|
|
name: 'Strut earrings',
|
|
|
|
price: 34,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 5,
|
|
|
|
name: 'Varsity socks',
|
|
|
|
price: 12,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 6,
|
|
|
|
name: 'Weave keyring',
|
|
|
|
price: 16,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 7,
|
|
|
|
name: 'Gatsby hat',
|
|
|
|
price: 40,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.accessories,
|
|
|
|
id: 8,
|
|
|
|
name: 'Shrug bag',
|
|
|
|
price: 198,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 9,
|
|
|
|
name: 'Gilt desk trio',
|
|
|
|
price: 58,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 10,
|
|
|
|
name: 'Copper wire rack',
|
|
|
|
price: 18,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 11,
|
|
|
|
name: 'Soothe ceramic set',
|
|
|
|
price: 28,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 12,
|
|
|
|
name: 'Hurrahs tea set',
|
|
|
|
price: 34,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 13,
|
|
|
|
name: 'Blue stone mug',
|
|
|
|
price: 18,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 14,
|
|
|
|
name: 'Rainwater tray',
|
|
|
|
price: 27,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 15,
|
|
|
|
name: 'Chambray napkins',
|
|
|
|
price: 16,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 16,
|
|
|
|
name: 'Succulent planters',
|
|
|
|
price: 16,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 17,
|
|
|
|
name: 'Quartet table',
|
|
|
|
price: 175,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.home,
|
|
|
|
id: 18,
|
|
|
|
name: 'Kitchen quattro',
|
|
|
|
price: 129,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 19,
|
|
|
|
name: 'Clay sweater',
|
|
|
|
price: 48,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 20,
|
|
|
|
name: 'Sea tunic',
|
|
|
|
price: 45,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 21,
|
|
|
|
name: 'Plaster tunic',
|
|
|
|
price: 38,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 22,
|
|
|
|
name: 'White pinstripe shirt',
|
|
|
|
price: 70,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 23,
|
|
|
|
name: 'Chambray shirt',
|
|
|
|
price: 70,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 24,
|
|
|
|
name: 'Seabreeze sweater',
|
|
|
|
price: 60,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 25,
|
|
|
|
name: 'Gentry jacket',
|
|
|
|
price: 178,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 26,
|
|
|
|
name: 'Navy trousers',
|
|
|
|
price: 74,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 27,
|
|
|
|
name: 'Walter henley (white)',
|
|
|
|
price: 38,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 28,
|
|
|
|
name: 'Surf and perf shirt',
|
|
|
|
price: 48,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 29,
|
|
|
|
name: 'Ginger scarf',
|
|
|
|
price: 98,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 30,
|
|
|
|
name: 'Ramona crossover',
|
|
|
|
price: 68,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 31,
|
|
|
|
name: 'Chambray shirt',
|
|
|
|
price: 38,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 32,
|
|
|
|
name: 'Classic white collar',
|
|
|
|
price: 58,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 33,
|
|
|
|
name: 'Cerise scallop tee',
|
|
|
|
price: 42,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 34,
|
|
|
|
name: 'Shoulder rolls tee',
|
|
|
|
price: 27,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 35,
|
|
|
|
name: 'Grey slouch tank',
|
|
|
|
price: 24,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 36,
|
|
|
|
name: 'Sunshirt dress',
|
|
|
|
price: 58,
|
|
|
|
),
|
|
|
|
Product(
|
|
|
|
category: Category.clothing,
|
|
|
|
id: 37,
|
|
|
|
name: 'Fine lines tee',
|
|
|
|
price: 58,
|
|
|
|
),
|
|
|
|
];
|
|
|
|
|
|
|
|
static List<Product> loadProducts({Category category = Category.all}) {
|
|
|
|
if (category == Category.all) {
|
|
|
|
return _allProducts;
|
|
|
|
} else {
|
|
|
|
return _allProducts.where((p) => p.category == category).toList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static Product loadProduct({required int id}) {
|
|
|
|
return _allProducts.firstWhere((Product p) => p.id == id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
String getCategoryTitle(Category category) => switch (category) {
|
|
|
|
Category.all => 'All',
|
|
|
|
Category.accessories => 'Accessories',
|
|
|
|
Category.clothing => 'Clothing',
|
|
|
|
Category.home => 'Home Decorations'
|
|
|
|
};
|
|
|
|
|
|
|
|
class Product {
|
|
|
|
const Product({
|
|
|
|
required this.category,
|
|
|
|
required this.id,
|
|
|
|
required this.name,
|
|
|
|
required this.price,
|
|
|
|
});
|
|
|
|
|
|
|
|
final Category category;
|
|
|
|
final int id;
|
|
|
|
final String name;
|
|
|
|
final int price;
|
|
|
|
|
|
|
|
String get assetName => '$id-0.jpg';
|
|
|
|
String get assetName2X => '2.0x/$id-0.jpg';
|
|
|
|
String get assetPackage => 'shrine_images';
|
|
|
|
|
|
|
|
@override
|
|
|
|
String toString() => '$name (id=$id)';
|
|
|
|
}
|