54 lines
2.5 KiB
Dart
54 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:cached_network_image/cached_network_image.dart';
|
|
import 'package:onsolgo/core/constants.dart';
|
|
import 'package:onsolgo/screens/library/series_detail.dart';
|
|
|
|
class TrendingList extends StatelessWidget {
|
|
const TrendingList({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text("🔥 WHAT'S HOT", style: TextStyle(letterSpacing: 2, fontWeight: FontWeight.bold)),
|
|
backgroundColor: Colors.black,
|
|
centerTitle: true,
|
|
),
|
|
body: StreamBuilder<QuerySnapshot>(
|
|
stream: FirebaseFirestore.instance.collection('manga').orderBy('reads', descending: true).snapshots(),
|
|
builder: (context, snapshot) {
|
|
if (!snapshot.hasData) return const Center(child: CircularProgressIndicator());
|
|
final docs = snapshot.data!.docs;
|
|
return ListView.builder(
|
|
itemCount: docs.length,
|
|
padding: const EdgeInsets.all(16),
|
|
itemBuilder: (context, index) {
|
|
final m = docs[index];
|
|
Color medalColor = (index == 0) ? kOnsolGold : (index == 1) ? const Color(0xFFC0C0C0) : (index == 2) ? const Color(0xFFCD7F32) : Colors.transparent;
|
|
|
|
return Container(
|
|
margin: const EdgeInsets.only(bottom: 12),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(12),
|
|
border: medalColor != Colors.transparent ? Border.all(color: medalColor, width: 2) : null
|
|
),
|
|
child: Card(
|
|
color: Colors.grey[900],
|
|
margin: EdgeInsets.zero,
|
|
child: ListTile(
|
|
leading: ClipRRect(borderRadius: BorderRadius.circular(4), child: CachedNetworkImage(imageUrl: m['coverUrl'], width: 50, height: 70, fit: BoxFit.cover, alignment: Alignment.topCenter)),
|
|
title: Text(m['title'] ?? '', style: const TextStyle(fontWeight: FontWeight.bold)),
|
|
subtitle: Text("${m['reads'] ?? 0} Readers"),
|
|
trailing: Text("#${index + 1}", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: medalColor != Colors.transparent ? medalColor : Colors.white)),
|
|
onTap: () => Navigator.push(context, MaterialPageRoute(builder: (context) => SeriesDetail(manga: m))),
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
} |