EnakNews: halaman berita dan detail berita

- Filter kategori, berita utama, dan daftar artikel terbaru
- Detail artikel dengan sampul, penulis, isi, dan "Baca juga"
- Data contoh 8 artikel; artikel tips mengikuti aturan di docs
- Jumlah pada AppFilterChip kini opsional

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
efrilm
2026-10-01 02:26:43 +07:00
co-authored by Claude Opus 5.5
parent c35d0eedbe
commit 5ba60747a8
11 changed files with 1251 additions and 326 deletions
+187
View File
@@ -0,0 +1,187 @@
import '../presentation/components/assets/assets.gen.dart';
// Models
enum NewsCategory {
menu('Menu Baru'),
promo('Promo'),
event('Event'),
info('Info'),
tips('Tips');
const NewsCategory(this.label);
final String label;
}
class NewsArticle {
final String id;
final String title;
final String summary;
final NewsCategory category;
/// Path aset sampul; `null` memakai sampul warna kategori.
final String? coverImage;
final DateTime publishedAt;
final int readMinutes;
final String author;
final List<String> paragraphs;
final bool isHeadline;
const NewsArticle({
required this.id,
required this.title,
required this.summary,
required this.category,
required this.publishedAt,
required this.readMinutes,
required this.paragraphs,
this.coverImage,
this.author = 'Tim Enaklo',
this.isHeadline = false,
});
}
// Sample Data
DateTime _hoursAgo(int hours) =>
DateTime.now().subtract(Duration(hours: hours));
DateTime _daysAgo(int days) => DateTime.now().subtract(Duration(days: days));
/// Getter, bukan `final`, supaya perubahan data langsung terbaca saat hot
/// reload (variabel global yang sudah terisi tidak diisi ulang).
List<NewsArticle> get newsSamples => [
NewsArticle(
id: 'n1',
title: 'Sup Ikan Woku Kemangi, Menu Baru Andalan Woku Pedas',
summary:
'Kuah woku khas Manado dengan kemangi segar, hadir mulai minggu ini.',
category: NewsCategory.menu,
coverImage: Assets.images.woku.path,
publishedAt: _hoursAgo(3),
readMinutes: 3,
isHeadline: true,
paragraphs: [
'Woku Pedas menambah menu andalan baru: Sup Ikan Woku Kemangi. Ikan '
'segar dimasak dalam kuah bumbu woku, lalu ditaburi daun kemangi '
'tepat sebelum disajikan.',
'Level pedasnya bisa dipilih dari 1 sampai 5. Untuk yang baru pertama '
'mencoba, tim dapur menyarankan level 2 supaya aroma rempahnya tetap '
'terasa.',
'Menu ini tersedia untuk dine-in dan take away. Jangan lupa sebutkan '
'nomor HP akunmu ke kasir supaya EnakPoint dari pembelian ini masuk.',
],
),
NewsArticle(
id: 'n2',
title: 'Double EnakPoint Tiap Akhir Pekan, Begini Cara Dapatnya',
summary: 'Belanja Sabtu dan Minggu di outlet mana pun dapat EnakPoint 2x.',
category: NewsCategory.promo,
publishedAt: _hoursAgo(20),
readMinutes: 2,
paragraphs: [
'Selama bulan ini, setiap belanja pada hari Sabtu dan Minggu mendapat '
'EnakPoint dua kali lipat dari biasanya, di semua outlet.',
'Tidak perlu klaim. Cukup sebutkan nomor HP akunmu ke kasir sebelum '
'membayar, dan EnakPoint 2x masuk otomatis setelah pesanan lunas.',
'Bonus maksimal 5.000 EnakPoint per transaksi. Detail lengkap dan promo '
'lainnya bisa kamu cek di EnakPromo.',
],
),
NewsArticle(
id: 'n3',
title: 'Tumulu Coffee Kini Buka Lebih Pagi, Mulai Pukul 07.00',
summary: 'Ngopi sebelum berangkat kerja sekarang bisa langsung di Tumulu.',
category: NewsCategory.info,
coverImage: Assets.images.tumulu.path,
publishedAt: _daysAgo(1),
readMinutes: 2,
paragraphs: [
'Mulai minggu ini Tumulu Coffee buka pukul 07.00, satu jam lebih pagi '
'dari sebelumnya. Jam tutup tetap pukul 22.00.',
'Selama jam 07.00 sampai 09.00, tersedia paket sarapan kopi susu dan '
'roti bakar untuk kamu yang terburu-buru.',
],
),
NewsArticle(
id: 'n4',
title: 'Ramen Night di Ramenmulu, Sabtu Ini',
summary: 'Nonton bareng, live akustik, dan ramen edisi terbatas.',
category: NewsCategory.event,
coverImage: Assets.images.ramenmulu.path,
publishedAt: _daysAgo(2),
readMinutes: 3,
paragraphs: [
'Ramenmulu menggelar Ramen Night hari Sabtu mulai pukul 18.00. Ada '
'nonton bareng, live musik akustik, dan ramen kuah miso edisi '
'terbatas.',
'Tempat duduk terbatas dan tidak bisa dipesan lebih dulu, jadi datang '
'lebih awal supaya kebagian meja.',
'Anggota komunitas Ramen Lovers di EnakCommunity sudah ramai membahas '
'acara ini. Yuk ikut gabung obrolannya.',
],
),
NewsArticle(
id: 'n5',
title: 'Cheesecake Karamel Jadi Dessert Baru di Tumulu Coffee',
summary: 'Lembut, tidak terlalu manis, dan pas ditemani kopi hitam.',
category: NewsCategory.menu,
coverImage: Assets.images.onboarding2.path,
publishedAt: _daysAgo(4),
readMinutes: 2,
paragraphs: [
'Tumulu Coffee menghadirkan dessert baru: Cheesecake Karamel. Lapisan '
'keju yang lembut dipadukan dengan saus karamel dan remahan biskuit '
'cokelat.',
'Rasa manisnya dibuat ringan supaya cocok dinikmati bersama kopi hitam '
'atau americano.',
],
),
NewsArticle(
id: 'n6',
title: 'Cara Bayar Pakai EnakPoint di Kasir',
summary: 'Cukup tunjukkan kode bayar. PIN tidak pernah diketik di kasir.',
category: NewsCategory.tips,
publishedAt: _daysAgo(5),
readMinutes: 3,
paragraphs: [
'EnakPoint bisa langsung dipakai untuk membayar di kasir. Setiap 1 '
'EnakPoint setara potongan Rp 1.',
'Tekan tombol Bayar di tengah menu bawah, lalu masukkan PIN kamu. '
'Aplikasi akan menampilkan kode angka dan QR.',
'Tunjukkan kode itu ke kasir. Kasir yang memilih berapa EnakPoint yang '
'dipakai. Kode berlaku 2 menit dan hanya bisa dipakai sekali.',
'PIN hanya dimasukkan di aplikasi, tidak pernah di mesin kasir. Jangan '
'berikan PIN kamu kepada siapa pun, termasuk petugas outlet.',
],
),
NewsArticle(
id: 'n7',
title: 'EnakPoint Bisa Kedaluwarsa, Begini Cara Mengeceknya',
summary: 'Pakai saldo sebelum hangus. Cek tanggalnya di halaman EnakPoint.',
category: NewsCategory.tips,
publishedAt: _daysAgo(6),
readMinutes: 2,
paragraphs: [
'Outlet bisa mengatur masa berlaku untuk EnakPoint dan EnakCoin. Saldo '
'yang sudah lewat masa berlakunya akan hangus.',
'Buka halaman EnakPoint & EnakCoin untuk melihat saldo terdekat yang '
'akan kedaluwarsa, lengkap dengan tanggalnya.',
'Tanggal kedaluwarsa berarti saldo masih bisa dipakai sampai pukul '
'23.59 WIB pada tanggal tersebut.',
],
),
NewsArticle(
id: 'n8',
title: 'Bakso 343 Rayakan Ulang Tahun ke-5',
summary: 'Lima tahun menemani makan siang, ada kejutan untuk pelanggan.',
category: NewsCategory.event,
coverImage: Assets.images.bakso343.path,
publishedAt: _daysAgo(9),
readMinutes: 2,
paragraphs: [
'Bakso 343 genap berusia lima tahun. Berawal dari satu gerobak, kini '
'jadi salah satu tenant favorit di Enaklo.',
'Selama pekan ulang tahun, setiap pelanggan yang makan di tempat '
'mendapat es teh gratis selama persediaan masih ada.',
],
),
];