Flutter cơ bản-Thiết kế màn hình hiển thị sản phẩm giống trang Shopee
Đăng lúc: 07:58 PM - 24/06/2024 bởi Charles Chung - 689Trong bài viết này tôi sẽ hướng dẫn các bạn thiết kế màn hình hiển thị sản phẩm giống trang Shopee
Yêu cầu
- Cho một List<Product>, trong đó mỗi Product gồm các thông tin: Mã số, Tên, Ảnh, Giá, Số sao đánh giá tối đa 5 sao, số lượng xem, hoa hồng extra(true, false)
- Thiết kế giao diện trong Flutter và hiển thị danh sách sản phẩm như mô tả bên trên.
Các bước thực hiện
- Chuẩn bị thông tin về 10 sản phẩm( lên shopee xem)
- Tạo Flutter Project với tên "demoshopee"
- Tạo thư mục assets/products rồi copy ảnh sản phẩm vào đó
- Cấu hình thư mục assets/products trong file pubspec.yaml
- Cấu hình thêm dependency intl: ^0.19.0 trong tệp pubspec.yaml để format number
- Tạo thư mục models trong lib và tạo tệp tin product.dart
- Cấu trúc widget trên màn hình lúc chạy tham khảo hình bên dưới
- Code cho tệp product.dart theo gợi ý
class Product { int id; String name; double price; String picture; int views; double stars; bool extra; Product(this.id, this.name, this.price, this.picture, this.views, this.stars,this.extra); }
- Code cho tệp main.dart theo gợi ý
import 'package:ex02/models/product.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: "Exercise05-lab09", home: Exercise06(), debugShowCheckedModeBanner: false, ); } } class Exercise06 extends StatefulWidget { @override State<StatefulWidget> createState() =>_Exercise06State(); } class _Exercise06State extends State<Exercise06> { List<Product> products = [ Product(1, 'Ví nam mini đựng thẻ VS22 chất da Saffiano bền đẹp chống nước', 255000, '1.jpg', 12, 4.0, true), Product( 2, 'Túi đeo chéo LEACAT polyester chống thấm nước thời trang công sở đa năng dành cho nam', 315000, '2.jpg', 1322, 5.0, false), Product(3, 'Phin cafe Trung Nguyên - Phin nhôm cá nhân cao cấp', 28000, '3.jpg', 12200, 4.5, true), Product(4, 'Ví da cầm tay mềm mại cỡ lớn thiết kế thời trang cho nam', 610000, '4.jpg', 56, 5.0, true), Product(5, 'Dép nữ đế xuồng bản quai trơn đế độn 6cm lên chân sang chảnh', 52000, '5.jpg', 200, 5.0, true), Product( 6, 'DTai nghe không dây âm thanh nổi M10 Tws Tai nghe nhét tai cho điện thoại thông minh Android', 52000, '6.jpg', 1230, 4.6, false), ]; @override Widget build(BuildContext context) { var f = NumberFormat.currency(locale: "vi_VN"); return Scaffold( appBar: AppBar(title: Text("Danh sách sản phẩm"),), body: GridView.count( padding: const EdgeInsets.all(3), crossAxisCount: 2, childAspectRatio: 1 / 1.5, shrinkWrap: true, children: List.generate( products.length, (index) => Container( margin: const EdgeInsets.all(3), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.asset('assets/products/${products[index].picture}'), Text( products[index].name, maxLines: 2, overflow: TextOverflow.ellipsis, ), Row( children: [ (products[index].extra) ? Image.asset('assets/images/extra.jpg') : const SizedBox(), const Icon( Icons.star, color: Colors.amber, ), Text(products[index].stars.toString()) ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( f.format(products[index].price), textAlign: TextAlign.left, style: const TextStyle(color: Colors.red), ), Text( '${(products[index].views > 1000.0 ? '${(products[index].views / 1000.0).toStringAsFixed(1)}k' : products[index].views)} views') ], ) ], ), )), ), ); } }
- Run Android Emulator và chạy ứng dụng
Mở rộng bài tập
Kích vào từng sản phẩm thì hiển thị trang chi tiết sản phẩm với đầy đủ thông tin
thay lời cảm ơn!
Các bài cũ hơn
- Flutter cơ bản-Thiết kế màn hình hồ sơ cá nhân (10:17 PM - 23/06/2024)
- Flutter cơ bản-Thiết kế các màn hình LogIn-Forgot Password-SignUp trong Flutter (09:05 AM - 22/06/2024)
- Flutter cơ bản-Hiển thị cấu trúc các widget trong Flutter-Android Studio (09:15 AM - 21/06/2024)
- Flutter cơ bản-Hướng dẫn tạo GestureDetector Widget với thao tác di chuyển và phóng to thu nhỏ hình ảnh (09:16 AM - 07/06/2024)
- Flutter cơ bản-Hướng dẫn xây dựng, Validating và Styling cho các Field trên Form trong Flutter (10:18 AM - 06/06/2024)