feat: changing display count
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tallee/data/db/database.dart';
|
||||
import 'package:tallee/data/models/player.dart';
|
||||
import 'package:tallee/data/models/statistic.dart';
|
||||
import 'package:tallee/l10n/generated/app_localizations.dart';
|
||||
import 'package:tallee/presentation/views/main_menu/statistics_view/create_statistic_view.dart'
|
||||
show
|
||||
translateScopeToString,
|
||||
translateStatisticTypeToString,
|
||||
translateTimeframeToString;
|
||||
import 'package:tallee/presentation/views/main_menu/statistics_view/create_statistic_view.dart';
|
||||
import 'package:tallee/presentation/widgets/buttons/haptic_icon_button.dart';
|
||||
import 'package:tallee/presentation/widgets/tiles/info_tile.dart';
|
||||
import 'package:tallee/presentation/widgets/tiles/statistics_tile.dart';
|
||||
@@ -30,7 +28,7 @@ class StatisticDetailView extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _StatisticDetailViewState extends State<StatisticDetailView> {
|
||||
int displayCount = 0;
|
||||
late int displayCount;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -48,7 +46,13 @@ class _StatisticDetailViewState extends State<StatisticDetailView> {
|
||||
const style = TextStyle(fontWeight: FontWeight.bold);
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: Text(title)),
|
||||
appBar: AppBar(
|
||||
title: Text(title),
|
||||
leading: HapticIconButton(
|
||||
icon: const Icon(Icons.arrow_back_ios_new),
|
||||
onPressed: () => handleBack(context),
|
||||
),
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: Column(
|
||||
@@ -141,7 +145,7 @@ class _StatisticDetailViewState extends State<StatisticDetailView> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text('Display count', style: style),
|
||||
Text(loc.displayed_entries, style: style),
|
||||
Row(
|
||||
children: [
|
||||
HapticIconButton(
|
||||
@@ -175,4 +179,11 @@ class _StatisticDetailViewState extends State<StatisticDetailView> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Handles saving the display count and giving it to statistics view
|
||||
Future<void> handleBack(BuildContext context) async {
|
||||
final db = Provider.of<AppDatabase>(context, listen: false);
|
||||
await db.statisticDao.updateDisplayCount(widget.statistic.id, displayCount);
|
||||
if (context.mounted) Navigator.of(context).pop(displayCount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ class _StatisticsViewState extends State<StatisticsView> {
|
||||
bool isLoading = true;
|
||||
List<Match> _allMatches = const [];
|
||||
List<Player> _allPlayers = const [];
|
||||
List<Statistic> _statistics = const [];
|
||||
List<Widget> statisticTiles = [];
|
||||
|
||||
@override
|
||||
@@ -34,7 +35,7 @@ class _StatisticsViewState extends State<StatisticsView> {
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
getStatisticTiles(context);
|
||||
loadStatistics(context);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -84,15 +85,16 @@ class _StatisticsViewState extends State<StatisticsView> {
|
||||
context,
|
||||
adaptivePageRoute(
|
||||
builder: (context) => CreateStatisticView(
|
||||
onStatisticCreated: () => getStatisticTiles(context),
|
||||
onStatisticCreated: () => loadStatistics(context),
|
||||
),
|
||||
),
|
||||
);
|
||||
if (!context.mounted) return;
|
||||
final newTile = _buildStatisticTile(context, newStatistic);
|
||||
|
||||
setState(() {
|
||||
statisticTiles.add(newTile);
|
||||
_statistics = [..._statistics, newStatistic];
|
||||
statisticTiles = _statistics
|
||||
.map((stat) => _buildStatisticTile(context, stat))
|
||||
.toList();
|
||||
});
|
||||
},
|
||||
),
|
||||
@@ -103,7 +105,7 @@ class _StatisticsViewState extends State<StatisticsView> {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> getStatisticTiles(BuildContext context) async {
|
||||
Future<void> loadStatistics(BuildContext context) async {
|
||||
setState(() {
|
||||
isLoading = true;
|
||||
statisticTiles = List.generate(
|
||||
@@ -131,27 +133,26 @@ class _StatisticsViewState extends State<StatisticsView> {
|
||||
final statistics = results[0] as List<Statistic>;
|
||||
_allMatches = results[1] as List<Match>;
|
||||
_allPlayers = results[2] as List<Player>;
|
||||
_statistics = statistics;
|
||||
|
||||
setState(() {
|
||||
statisticTiles = [
|
||||
for (final statistic in statistics) ...[
|
||||
_buildStatisticTile(context, statistic),
|
||||
],
|
||||
];
|
||||
statisticTiles = _statistics
|
||||
.map((stat) => _buildStatisticTile(context, stat))
|
||||
.toList();
|
||||
isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildStatisticTile(BuildContext context, Statistic statistic) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
final values = computeStatisticValues(
|
||||
statistic: statistic,
|
||||
matches: _allMatches,
|
||||
players: _allPlayers,
|
||||
);
|
||||
final values = computeStatisticValues(
|
||||
statistic: statistic,
|
||||
matches: _allMatches,
|
||||
players: _allPlayers,
|
||||
);
|
||||
|
||||
Navigator.push(
|
||||
return GestureDetector(
|
||||
onTap: () async {
|
||||
final newDisplayCount = await Navigator.push(
|
||||
context,
|
||||
adaptivePageRoute(
|
||||
builder: (context) => StatisticDetailView(
|
||||
@@ -162,6 +163,21 @@ class _StatisticsViewState extends State<StatisticsView> {
|
||||
),
|
||||
),
|
||||
);
|
||||
if (newDisplayCount != null &&
|
||||
newDisplayCount != statistic.displayCount) {
|
||||
setState(() {
|
||||
_statistics = _statistics
|
||||
.map(
|
||||
(stat) => stat.id == statistic.id
|
||||
? stat.copyWith(displayCount: newDisplayCount)
|
||||
: stat,
|
||||
)
|
||||
.toList();
|
||||
statisticTiles = _statistics
|
||||
.map((stat) => _buildStatisticTile(context, stat))
|
||||
.toList();
|
||||
});
|
||||
}
|
||||
},
|
||||
child: buildStatisticTile(
|
||||
statistic: statistic,
|
||||
|
||||
Reference in New Issue
Block a user