From eac239739678466a9931595f2ce683177979a952 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 22 Jan 2025 19:29:17 +0100 Subject: [PATCH] Add workaround for #722 --- lib/models/exercises/exercise.dart | 12 +++++++++++- lib/providers/exercises.dart | 14 +++++++++++--- pubspec.lock | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/models/exercises/exercise.dart b/lib/models/exercises/exercise.dart index 2929dce9..4f1d95c4 100644 --- a/lib/models/exercises/exercise.dart +++ b/lib/models/exercises/exercise.dart @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +import 'dart:developer'; + import 'package:equatable/equatable.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:wger/helpers/consts.dart'; @@ -160,7 +162,15 @@ class Exercise extends Equatable { equipment = baseData.equipment; category = baseData.category; translations = baseData.translations.map((e) { - e.language = languages.firstWhere((l) => l.id == e.languageId); + e.language = languages.firstWhere( + (l) => l.id == e.languageId, + + // workaround for https://github.com/wger-project/flutter/issues/722 + orElse: () { + log('Could not find language for translation ${e.languageId}'); + return Language(id: e.languageId, shortName: 'unknown', fullName: 'unknown'); + }, + ); return e; }).toList(); videos = baseData.videos; diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index dc13c823..6b63ebb4 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -298,9 +298,17 @@ class ExercisesProvider with ChangeNotifier { int exerciseId, ) async { Exercise exercise; - final exerciseDb = await (database.select(database.exercises) - ..where((e) => e.id.equals(exerciseId))) - .getSingleOrNull(); + + // TODO: this should be a .getSingleOrNull()!!! However, for some reason there + // can be duplicates in the db. Perhaps a race condition so that two + // entries are written at the same time or something? + final exerciseResult = + await (database.select(database.exercises)..where((e) => e.id.equals(exerciseId))).get(); + + ExerciseTable? exerciseDb; + if (exerciseResult.isNotEmpty) { + exerciseDb = exerciseResult.first; + } // Exercise is already known locally if (exerciseDb != null) { diff --git a/pubspec.lock b/pubspec.lock index a47da1c6..37c8b9ee 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1576,4 +1576,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.6.0 <4.0.0" - flutter: ">=3.24.0" + flutter: ">=3.27.0"