Sổ tay công thức nấu ăn: Danh sách công thức
Thuộc phần Danh sách và màn hình trong hành trình Flutter của Coddy. Bài học 28 trên 33.
Đã đến lúc dùng những gì bạn học được trong phần này để xây dựng cả một ứng dụng: một cuốn sổ công thức nấu ăn. Ứng dụng có danh sách công thức, màn hình riêng cho từng công thức với các nguyên liệu và một thẻ dành cho món yêu thích.
Hãy bắt đầu với dữ liệu. Ứng dụng đã có lớp Recipe với tên, thời gian nấu và danh sách nguyên liệu, cùng bốn công thức ở đầu build. ingredients của mỗi công thức có kiểu List<String>: một trường cũng có thể là danh sách.
Màn hình đầu tiên là danh sách. Danh sách có thể lên đến hàng trăm công thức, vì vậy hãy tạo màn hình bằng ListView.builder, với một ListTile cho mỗi công thức.
Thử thách
DễThay dòng chữ No recipes yet bằng danh sách công thức nấu ăn:
- một
ListView.buildervới mộtListTilecho mỗi công thức nấu ăn - mỗi ô có
Icons.restaurant_menulàmleading:, tên công thức nấu ăn làm tiêu đề và20 min(kèm số phút nấu của công thức) làm phụ đề
Tự làm thử
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
final List<Recipe> recipes = [
Recipe(name: 'Pancakes', minutes: 20, ingredients: ['Flour', 'Eggs', 'Milk', 'Butter']),
Recipe(name: 'Tomato Soup', minutes: 35, ingredients: ['Tomatoes', 'Onion', 'Garlic', 'Olive oil']),
Recipe(name: 'Guacamole', minutes: 10, ingredients: ['Avocados', 'Lime', 'Onion', 'Salt']),
Recipe(name: 'Fried Rice', minutes: 25, ingredients: ['Rice', 'Eggs', 'Peas', 'Soy sauce']),
];
return Scaffold(
appBar: AppBar(title: const Text('Recipe Book')),
body: const Center(
child: Text('No recipes yet'),
),
);
}
}
class Recipe {
final String name;
final int minutes;
final List<String> ingredients;
Recipe({required this.name, required this.minutes, required this.ingredients});
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Danh sách và màn hình
1Danh sách cuộn
Danh sách có thể cuộnÔ danh sáchPhần đầu và phần cuốiChạm vào một ô danh sáchĐường phân cách giữa các hàng4Các lớp của riêng bạn
Một lớp cho dữ liệu của bạnTham số có tên và bắt buộcCác trường có thể để trốngTạo widget từ dữ liệu bằng mapLọc danh sách bằng whereTra cứu trong Map7Dự án: Sổ tay công thức nấu ăn
Sổ tay công thức nấu ăn: Danh sách công thứcSổ tay công thức nấu ăn: Màn hình công thức5Nhiều hơn một màn hình
Mở màn hình mớiMũi tên quay lạiQuay lại bằng nútGửi dữ liệu đến màn hìnhNhận lại kết quả6Tab, ngăn kéo và thao tác vuốt
Tab với thanh điều hướngBiểu tượng tô kín cho tab đang mởNgăn kéo bênVuốt để xóaHoàn tác thao tác vuốtTự luyện tập: Trình biên dịch Flutter online