Skip to content

Commit eac2397

Browse files
committed
Add workaround for #722
1 parent f77fbca commit eac2397

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

lib/models/exercises/exercise.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
1818

19+
import 'dart:developer';
20+
1921
import 'package:equatable/equatable.dart';
2022
import 'package:json_annotation/json_annotation.dart';
2123
import 'package:wger/helpers/consts.dart';
@@ -160,7 +162,15 @@ class Exercise extends Equatable {
160162
equipment = baseData.equipment;
161163
category = baseData.category;
162164
translations = baseData.translations.map((e) {
163-
e.language = languages.firstWhere((l) => l.id == e.languageId);
165+
e.language = languages.firstWhere(
166+
(l) => l.id == e.languageId,
167+
168+
// workaround for https://github.com/wger-project/flutter/issues/722
169+
orElse: () {
170+
log('Could not find language for translation ${e.languageId}');
171+
return Language(id: e.languageId, shortName: 'unknown', fullName: 'unknown');
172+
},
173+
);
164174
return e;
165175
}).toList();
166176
videos = baseData.videos;

lib/providers/exercises.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,17 @@ class ExercisesProvider with ChangeNotifier {
298298
int exerciseId,
299299
) async {
300300
Exercise exercise;
301-
final exerciseDb = await (database.select(database.exercises)
302-
..where((e) => e.id.equals(exerciseId)))
303-
.getSingleOrNull();
301+
302+
// TODO: this should be a .getSingleOrNull()!!! However, for some reason there
303+
// can be duplicates in the db. Perhaps a race condition so that two
304+
// entries are written at the same time or something?
305+
final exerciseResult =
306+
await (database.select(database.exercises)..where((e) => e.id.equals(exerciseId))).get();
307+
308+
ExerciseTable? exerciseDb;
309+
if (exerciseResult.isNotEmpty) {
310+
exerciseDb = exerciseResult.first;
311+
}
304312

305313
// Exercise is already known locally
306314
if (exerciseDb != null) {

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1576,4 +1576,4 @@ packages:
15761576
version: "3.1.2"
15771577
sdks:
15781578
dart: ">=3.6.0 <4.0.0"
1579-
flutter: ">=3.24.0"
1579+
flutter: ">=3.27.0"

0 commit comments

Comments
 (0)