// Classes + // Methods + // Enums + // Loops + // Generics (можно использовать List<>) +- // Anonymous functions + // Future + // extension + enum Category { PHONE, COMPUTER, TV } extension ProductX on Product { double get discountedPrice => price * 0.9; // Применяем 10% скидку String get fullname => '${name} (${category.name}) - \$${price}'; } class Product { String name; double price; int quantity; Category category; // Constructor Product(this.name, this.price, this.quantity, this.category); } class Cart { final List items = []; void push(Product p) { items.add(p); } double getTotalPrice() { double price = 0; for (int i = 0; i < items.length; i++) { price += items[i].quantity * items[i].price; } return price; } int getItemsCount() { return items.fold(0, (total, item) => total + item.quantity); } Future> getItemsAsync() async { // Как бы делаем запрос к бэку await Future.delayed(Duration(seconds: 3)); return items; } } void main() { Cart cart = Cart(); Product product = Product('Laptop', 1000.0, 1, Category.COMPUTER); cart.push(product); cart.push(Product('Smartphone', 500.0, 2, Category.PHONE)); cart.push(Product('TV', 800.0, 1, Category.TV)); print('Total price: \$${cart.getTotalPrice()}'); print('Total items count: ${cart.getItemsCount()}'); print('Product with discount: ${product.discountedPrice}'); print('Product fullname: ${product.fullname}'); Future.delayed(Duration(seconds: 3)).then((_) => print(product.name)); // List products = await cart.getItemsAsync(); // print('Number of elements received from async method: ${products.length}'); }