Files
hlaskovnik-reimagined/frontend/lib/pages/leaderboard.dart
T
2026-04-03 18:13:27 +02:00

66 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:frontend/provider/quote_provider.dart';
import 'package:frontend/values/constants.dart';
import 'package:provider/provider.dart';
class LeaderboardPage extends StatefulWidget {
const LeaderboardPage({super.key});
@override
State<LeaderboardPage> createState() => _LeaderboardPageState();
}
class _LeaderboardPageState extends State<LeaderboardPage> {
@override
void initState() {
super.initState();
// reset filter once, only when page is created
WidgetsBinding.instance.addPostFrameCallback((_) {
final provider = context.read<QuoteProvider>();
provider.resetLeaderboardFilter();
});
}
@override
Widget build(BuildContext context) {
final provider = context.watch<QuoteProvider>();
return Center(
child: Column(
children: [
Expanded(
child: ListView.builder(
padding: EdgeInsets.all(Constants.edgeInset),
itemCount: provider.sortedAuthorCounts.length,
itemBuilder: (context, index) {
return
Card(
color: provider.getLeaderboardEntryBgColor(context, index),
child: ListTile(
onTap: () { provider.showListPageFilteredByAuthor(context, index); },
contentPadding: EdgeInsets.symmetric(
vertical: 0,
horizontal: Constants.edgeInset,
),
title: Text(provider.sortedAuthorCounts[index].key,
style: TextStyle(
color: provider.getLeaderboardEntryFgColor(context, index)
),
),
trailing: Text(provider.sortedAuthorCounts[index].value.toString(),
style: TextStyle(
fontSize: 16,
color: provider.getLeaderboardEntryFgColor(context, index),
),
),
),
);
},
),
),
],
),
);
}
}