diff --git a/lib/data_objects/tetrio.dart b/lib/data_objects/tetrio.dart index 78bc8b4..e89b2cf 100644 --- a/lib/data_objects/tetrio.dart +++ b/lib/data_objects/tetrio.dart @@ -1222,7 +1222,7 @@ class News{ News(this.id, this.news); News.fromJson(Map json, String? userID){ - id = userID != null ? "user_${userID}" : json['news'].first['stream']; + id = userID != null ? "user_$userID" : json['news'].first['stream']; news = [for (var entry in json['news']) NewsEntry.fromJson(entry)]; } } diff --git a/lib/gen/strings.g.dart b/lib/gen/strings.g.dart index a3af4bc..6b05e47 100644 --- a/lib/gen/strings.g.dart +++ b/lib/gen/strings.g.dart @@ -6,7 +6,7 @@ /// Locales: 2 /// Strings: 1182 (591 per locale) /// -/// Built on 2024-06-16 at 15:08 UTC +/// Built on 2024-06-16 at 21:03 UTC // coverage:ignore-file // ignore_for_file: type=lint diff --git a/lib/main.dart b/lib/main.dart index 7d108fd..162f783 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,10 +1,8 @@ import 'dart:async'; import 'dart:io'; -import 'dart:isolate'; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'dart:developer' as developer; import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -145,9 +143,9 @@ void main() async { } // I dont want to store old cache - Timer.periodic(Duration(minutes: 5), (Timer timer) { + Timer.periodic(const Duration(minutes: 5), (Timer timer) { teto.cacheRoutine(); - developer.log("Cache routine complete, next one in ${DateTime.now().add(Duration(minutes: 5))}", name: "main"); + developer.log("Cache routine complete, next one in ${DateTime.now().add(const Duration(minutes: 5))}", name: "main"); // if (prefs.getBool("updateInBG") == true) teto.fetchTracked(); // TODO: Somehow avoid doing that in main isolate }); @@ -164,6 +162,12 @@ class MyApp extends StatefulWidget { } class MyAppState extends State { + + @override + void initState() { + setAccentColor(prefs.getInt("accentColor") != null ? Color(prefs.getInt("accentColor")!) : Colors.cyanAccent); + super.initState(); + } void setAccentColor(Color color){ // does this thing work??? yes??? no??? setState(() { diff --git a/lib/services/tetrio_crud.dart b/lib/services/tetrio_crud.dart index 1529bf5..3911cd5 100644 --- a/lib/services/tetrio_crud.dart +++ b/lib/services/tetrio_crud.dart @@ -1,3 +1,5 @@ +// ignore_for_file: type_literal_in_constant_pattern + import 'dart:async'; import 'dart:convert'; import 'dart:developer' as developer; @@ -87,7 +89,7 @@ class CacheController { case Cutoffs: return object.runtimeType.toString(); case TetrioPlayerFromLeaderboard: // i may be a little stupid - return object.runtimeType.toString()+"topone"; + return "${object.runtimeType}topone"; case TetraLeagueAlphaStream: return object.runtimeType.toString()+object.userId; case SingleplayerStream: diff --git a/lib/views/compare_view.dart b/lib/views/compare_view.dart index 5eb3109..2916a0e 100644 --- a/lib/views/compare_view.dart +++ b/lib/views/compare_view.dart @@ -1,3 +1,5 @@ +// ignore_for_file: use_build_context_synchronously + import 'dart:io'; import 'dart:math'; import 'package:flutter/foundation.dart'; diff --git a/lib/views/customization_view.dart b/lib/views/customization_view.dart index aa3887a..f518c8a 100644 --- a/lib/views/customization_view.dart +++ b/lib/views/customization_view.dart @@ -109,6 +109,7 @@ class CustomizationState extends State { onPressed: () { setState(() { context.findAncestorStateOfType()?.setAccentColor(pickerColor); + prefs.setInt("accentColor", pickerColor.value); }); Navigator.of(context).pop(); }, @@ -142,8 +143,8 @@ class CustomizationState extends State { trailing: DropdownButton( value: ratingMode, items: [ - DropdownMenuItem(value: 0, child: Text("TR")), - DropdownMenuItem(value: 1, child: Text("Glicko")), + const DropdownMenuItem(value: 0, child: Text("TR")), + const DropdownMenuItem(value: 1, child: Text("Glicko")), DropdownMenuItem(value: 2, child: Text(t.ratingLBposition)) ], onChanged: (dynamic value){ diff --git a/lib/views/main_view.dart b/lib/views/main_view.dart index 65f8a69..8680e59 100644 --- a/lib/views/main_view.dart +++ b/lib/views/main_view.dart @@ -1,4 +1,4 @@ -// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: type_literal_in_constant_pattern, use_build_context_synchronously import 'dart:async'; import 'dart:io'; @@ -75,7 +75,7 @@ class _MainState extends State with TickerProviderStateMixin { //var tableData = []; final bodyGlobalKey = GlobalKey(); bool _showSearchBar = false; - Timer backgroundUpdate = Timer(Duration(days: 365), (){}); + Timer backgroundUpdate = Timer(const Duration(days: 365), (){}); bool _TLHistoryWasFetched = false; late TabController _tabController; late TabController _wideScreenTabController; @@ -743,7 +743,7 @@ class _TLRecords extends StatelessWidget { leading: Text("${data[index].endContext.firstWhere((element) => element.userId == userID).points} : ${data[index].endContext.firstWhere((element) => element.userId != userID).points}", style: bigScreen ? const TextStyle(fontFamily: "Eurostile Round Extended", fontSize: 28, shadows: textShadow) : const TextStyle(fontSize: 28, shadows: textShadow)), title: Text("vs. ${data[index].endContext.firstWhere((element) => element.userId != userID).username}"), - subtitle: Text(timestamp(data[index].timestamp), style: TextStyle(color: Colors.grey)), + subtitle: Text(timestamp(data[index].timestamp), style: const TextStyle(color: Colors.grey)), trailing: TrailingStats( data[index].endContext.firstWhere((element) => element.userId == userID).secondary, data[index].endContext.firstWhere((element) => element.userId == userID).tertiary, @@ -1089,8 +1089,8 @@ class _TwoRecordsThingy extends StatelessWidget { crossAxisAlignment: WrapCrossAlignment.start, spacing: 20, children: [ - TextButton(onPressed: (){launchInBrowser(Uri.parse("https://tetr.io/#r:${sprint!.replayId}"));}, child: Text("Open replay in TETR.IO")), - TextButton(onPressed: (){launchInBrowser(Uri.parse("https://inoue.szy.lol/api/replay/${sprint!.replayId}"));}, child: Text("Download replay")), + TextButton(onPressed: (){launchInBrowser(Uri.parse("https://tetr.io/#r:${sprint!.replayId}"));}, child: Text(t.openSPreplay)), + TextButton(onPressed: (){launchInBrowser(Uri.parse("https://inoue.szy.lol/api/replay/${sprint!.replayId}"));}, child: Text(t.downloadSPreplay)), ], ), if (sprintStream.records.length > 1) SizedBox( @@ -1102,8 +1102,8 @@ class _TwoRecordsThingy extends StatelessWidget { onTap: () => Navigator.push(context, MaterialPageRoute(builder: (context) => SingleplayerRecordView(record: sprintStream.records[i]))), leading: Text("#${i+1}", style: const TextStyle(fontFamily: "Eurostile Round", fontSize: 28, shadows: textShadow, height: 0.9) ), title: Text(get40lTime(sprintStream.records[i].endContext.finalTime.inMicroseconds), - style: TextStyle(fontSize: 18)), - subtitle: Text(timestamp(sprintStream.records[i].timestamp), style: TextStyle(color: Colors.grey, height: 0.85)), + style: const TextStyle(fontSize: 18)), + subtitle: Text(timestamp(sprintStream.records[i].timestamp), style: const TextStyle(color: Colors.grey, height: 0.85)), trailing: SpTrailingStats(sprintStream.records[i].endContext) ) ], @@ -1175,8 +1175,8 @@ class _TwoRecordsThingy extends StatelessWidget { crossAxisAlignment: WrapCrossAlignment.start, spacing: 20, children: [ - TextButton(onPressed: (){launchInBrowser(Uri.parse("https://tetr.io/#r:${blitz!.replayId}"));}, child: Text("Open replay in TETR.IO")), - TextButton(onPressed: (){launchInBrowser(Uri.parse("https://inoue.szy.lol/api/replay/${blitz!.replayId}"));}, child: Text("Download replay")), + TextButton(onPressed: (){launchInBrowser(Uri.parse("https://tetr.io/#r:${blitz!.replayId}"));}, child: Text(t.openSPreplay)), + TextButton(onPressed: (){launchInBrowser(Uri.parse("https://inoue.szy.lol/api/replay/${blitz!.replayId}"));}, child: Text(t.downloadSPreplay)), ], ), if (blitzStream.records.length > 1) SizedBox( @@ -1188,8 +1188,8 @@ class _TwoRecordsThingy extends StatelessWidget { onTap: () => Navigator.push(context, MaterialPageRoute(builder: (context) => SingleplayerRecordView(record: blitzStream.records[i]))), leading: Text("#${i+1}", style: const TextStyle(fontFamily: "Eurostile Round", fontSize: 28, shadows: textShadow, height: 0.9) ), title: Text("${NumberFormat.decimalPattern().format(blitzStream.records[i].endContext.score)} points", - style: TextStyle(fontSize: 18)), - subtitle: Text(timestamp(blitzStream.records[i].timestamp), style: TextStyle(color: Colors.grey, height: 0.85)), + style: const TextStyle(fontSize: 18)), + subtitle: Text(timestamp(blitzStream.records[i].timestamp), style: const TextStyle(color: Colors.grey, height: 0.85)), trailing: SpTrailingStats(blitzStream.records[i].endContext) ) ], diff --git a/lib/views/sprint_and_blitz_averages.dart b/lib/views/sprint_and_blitz_averages.dart index 9ab7ada..a37fbd9 100644 --- a/lib/views/sprint_and_blitz_averages.dart +++ b/lib/views/sprint_and_blitz_averages.dart @@ -60,7 +60,7 @@ class SprintAndBlitzState extends State { Table( defaultVerticalAlignment: TableCellVerticalAlignment.middle, border: TableBorder.all(color: Colors.grey.shade900), - columnWidths: {0: const FixedColumnWidth(48)}, + columnWidths: const {0: FixedColumnWidth(48)}, children: [ TableRow( children: [ diff --git a/lib/views/tl_match_view.dart b/lib/views/tl_match_view.dart index c02eb3b..96d23ae 100644 --- a/lib/views/tl_match_view.dart +++ b/lib/views/tl_match_view.dart @@ -1,4 +1,4 @@ -// ignore_for_file: use_build_context_synchronously +// ignore_for_file: use_build_context_synchronously, type_literal_in_constant_pattern import 'dart:io'; import 'package:tetra_stats/data_objects/tetrio_multiplayer_replay.dart'; diff --git a/lib/widgets/finesse_thingy.dart b/lib/widgets/finesse_thingy.dart index bb71dc0..937d767 100644 --- a/lib/widgets/finesse_thingy.dart +++ b/lib/widgets/finesse_thingy.dart @@ -1,3 +1,5 @@ +// ignore_for_file: curly_braces_in_flow_control_structures + import 'package:flutter/material.dart'; import 'package:tetra_stats/data_objects/tetrio.dart'; import 'package:tetra_stats/utils/numers_formats.dart'; diff --git a/lib/widgets/gauget_num.dart b/lib/widgets/gauget_num.dart index 2672b75..0f3bd6f 100644 --- a/lib/widgets/gauget_num.dart +++ b/lib/widgets/gauget_num.dart @@ -1,3 +1,5 @@ +// ignore_for_file: curly_braces_in_flow_control_structures + import 'package:flutter/material.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:tetra_stats/data_objects/tetrio.dart'; diff --git a/lib/widgets/recent_sp_games.dart b/lib/widgets/recent_sp_games.dart index 47fe718..9cb033f 100644 --- a/lib/widgets/recent_sp_games.dart +++ b/lib/widgets/recent_sp_games.dart @@ -5,7 +5,6 @@ import 'package:tetra_stats/gen/strings.g.dart'; import 'package:tetra_stats/utils/relative_timestamps.dart'; import 'package:tetra_stats/utils/text_shadow.dart'; import 'package:tetra_stats/views/singleplayer_record_view.dart'; -import 'package:tetra_stats/widgets/singleplayer_record.dart'; import 'package:tetra_stats/widgets/sp_trailing_stats.dart'; import 'package:tetra_stats/widgets/text_timestamp.dart'; @@ -42,7 +41,7 @@ class RecentSingleplayerGames extends StatelessWidget{ String() => "huh", }, style: const TextStyle(fontSize: 18)), - subtitle: Text(timestamp(record.timestamp), style: TextStyle(color: Colors.grey, height: 0.85)), + subtitle: Text(timestamp(record.timestamp), style: const TextStyle(color: Colors.grey, height: 0.85)), trailing: SpTrailingStats(record.endContext) ) ], diff --git a/lib/widgets/singleplayer_record.dart b/lib/widgets/singleplayer_record.dart index 7e51052..3dd9209 100644 --- a/lib/widgets/singleplayer_record.dart +++ b/lib/widgets/singleplayer_record.dart @@ -147,8 +147,8 @@ class SingleplayerRecord extends StatelessWidget { "5mblast" => get40lTime(stream!.records[i].endContext.finalTime.inMicroseconds), String() => "huh", }, - style: TextStyle(fontSize: 18)), - subtitle: Text(timestamp(stream!.records[i].timestamp), style: TextStyle(color: Colors.grey, height: 0.85)), + style: const TextStyle(fontSize: 18)), + subtitle: Text(timestamp(stream!.records[i].timestamp), style: const TextStyle(color: Colors.grey, height: 0.85)), trailing: SpTrailingStats(stream!.records[i].endContext) ) ] diff --git a/lib/widgets/sp_trailing_stats.dart b/lib/widgets/sp_trailing_stats.dart index 320a8f0..4a5ac72 100644 --- a/lib/widgets/sp_trailing_stats.dart +++ b/lib/widgets/sp_trailing_stats.dart @@ -5,7 +5,7 @@ import 'package:tetra_stats/utils/numers_formats.dart'; class SpTrailingStats extends StatelessWidget{ final EndContextSingle endContext; - const SpTrailingStats(this.endContext); + const SpTrailingStats(this.endContext, {super.key}); @override Widget build(BuildContext context) { diff --git a/lib/widgets/stat_sell_num.dart b/lib/widgets/stat_sell_num.dart index be1d940..6e415ed 100644 --- a/lib/widgets/stat_sell_num.dart +++ b/lib/widgets/stat_sell_num.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:tetra_stats/data_objects/tetrio.dart'; diff --git a/lib/widgets/text_timestamp.dart b/lib/widgets/text_timestamp.dart index d17bbd3..29c3037 100644 --- a/lib/widgets/text_timestamp.dart +++ b/lib/widgets/text_timestamp.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:tetra_stats/gen/strings.g.dart'; import 'package:tetra_stats/main.dart'; diff --git a/lib/widgets/tl_rating_thingy.dart b/lib/widgets/tl_rating_thingy.dart index 17fb035..735b06c 100644 --- a/lib/widgets/tl_rating_thingy.dart +++ b/lib/widgets/tl_rating_thingy.dart @@ -13,7 +13,7 @@ class TLRatingThingy extends StatelessWidget{ final TetraLeagueAlpha? oldTl; final double? topTR; - const TLRatingThingy({required this.userID, required this.tlData, this.oldTl, this.topTR}); + const TLRatingThingy({super.key, required this.userID, required this.tlData, this.oldTl, this.topTR}); @override Widget build(BuildContext context) { diff --git a/lib/widgets/tl_thingy.dart b/lib/widgets/tl_thingy.dart index ecb21e6..d22333e 100644 --- a/lib/widgets/tl_thingy.dart +++ b/lib/widgets/tl_thingy.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:intl/intl.dart'; import 'package:tetra_stats/data_objects/tetrio.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart';