- Flutter Android app on CookIT's stack (provider, shared_preferences, gen-l10n) - tools/exercise-import turns free-exercise-db into 876 bundled Exercises with 1,746 WebP images (20 MB); stretching -> Stretching, rest -> Workout - ZenStyle tokens per Mode: calm rounded sage/teal with breath ripples vs. dark ember-to-red with floor-tape slashes; the theme morphs at each Mode's own pace - Remembered global Mode switch, Plans / Library / History tabs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
1.6 KiB
Dart
50 lines
1.6 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:zenxercise/src/app.dart';
|
|
import 'package:zenxercise/src/exercises/exercise.dart';
|
|
import 'package:zenxercise/src/exercises/exercise_library.dart';
|
|
import 'package:zenxercise/src/modes/mode.dart';
|
|
import 'package:zenxercise/src/settings/settings_controller.dart';
|
|
|
|
Exercise exercise(String id, Mode mode, {String? name, int imageCount = 0}) => Exercise(
|
|
id: id,
|
|
name: name ?? id.replaceAll('_', ' '),
|
|
mode: mode,
|
|
category: mode == Mode.stretching ? 'stretching' : 'strength',
|
|
level: 'beginner',
|
|
equipment: 'body only',
|
|
primaryMuscles: const ['hamstrings'],
|
|
secondaryMuscles: const [],
|
|
instructions: const ['Breathe.'],
|
|
imageCount: imageCount,
|
|
);
|
|
|
|
final sampleLibrary = ExerciseLibrary([
|
|
exercise('Hamstring_Stretch', Mode.stretching),
|
|
exercise('Calf_Stretch', Mode.stretching),
|
|
exercise('Barbell_Squat', Mode.workout),
|
|
]);
|
|
|
|
/// The whole app over [library], with preferences starting from [prefs].
|
|
Future<SettingsController> pumpApp(
|
|
WidgetTester tester, {
|
|
ExerciseLibrary? library,
|
|
Map<String, Object> prefs = const {},
|
|
}) async {
|
|
SharedPreferences.setMockInitialValues(prefs);
|
|
final settings = SettingsController(SettingsService());
|
|
await settings.loadSettings();
|
|
await tester.pumpWidget(
|
|
MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider.value(value: settings),
|
|
Provider.value(value: library ?? sampleLibrary),
|
|
],
|
|
child: const ZenXerciseApp(),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
return settings;
|
|
}
|