Buku Resep: Bahan
Termasuk bagian List dan Layar dalam perjalanan Flutter di Coddy. Pelajaran 30 dari 33.
Layar resep membutuhkan hal yang kamu cari: bahan-bahannya. Setiap resep sudah menyimpan bahan-bahan tersebut dalam list ingredients.
Layar ini juga menjadi list: waktunya, sebuah judul, lalu satu baris untuk setiap bahan. ListView dengan padding: menampung semuanya dan tetap bisa digulir saat sebuah resep memiliki dua puluh bahan. for koleksi pada recipe.ingredients membuat baris-barisnya.
Teks tebal dan ukuran yang lebih besar membuat Ingredients terbaca sebagai judul, sehingga mata langsung menemukan list-nya.
Tantangan
MudahTampilkan bahan-bahannya di layar resep. Jadikan body-nya sebuah ListView dengan padding 16 piksel, yang berisi:
- teks
Ready in, seperti sebelumnya SizedBoxdengan tinggi 24, lalu judulIngredients, berukuran 20 dan tebal- satu
ListTileuntuk setiap bahan, denganIcons.check_circle_outlinesebagaileading:-nya
Coba sendiri
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: ListView.builder(
itemCount: recipes.length,
itemBuilder: (context, index) {
final Recipe recipe = recipes[index];
return ListTile(
leading: const Icon(Icons.restaurant_menu),
title: Text(recipe.name),
subtitle: Text('${recipe.minutes} min'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => RecipeScreen(recipe: recipe)),
);
},
);
},
),
);
}
}
class RecipeScreen extends StatelessWidget {
const RecipeScreen({super.key, required this.recipe});
final Recipe recipe;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(recipe.name)),
body: Padding(
padding: const EdgeInsets.all(16),
child: Text('Ready in ${recipe.minutes} minutes', style: const TextStyle(fontSize: 18)),
),
);
}
}
class Recipe {
final String name;
final int minutes;
final List<String> ingredients;
Recipe({required this.name, required this.minutes, required this.ingredients});
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di List dan Layar
1Daftar yang Dapat Digulir
Daftar yang Bisa DigulirItem DaftarBagian Awal dan AkhirKetuk Item DaftarPemisah Antarbaris4Class Milikmu Sendiri
Class untuk DatamuParameter Bernama dan WajibField yang Bisa KosongWidget dari Data dengan mapFilter List dengan whereCari di Map7Proyek: Buku Resep
Buku Resep: Daftar ResepBuku Resep: Layar ResepLatihan sendiri: Compiler Flutter online