Skip to content

Commit

Permalink
Use provider to load workouts
Browse files Browse the repository at this point in the history
  • Loading branch information
a-mabe committed Sep 26, 2024
1 parent dee8656 commit 0ee37ef
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 61 deletions.
28 changes: 13 additions & 15 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,11 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:logger/logger.dart';
// import 'package:logger/logger.dart';
import 'package:openhiit/pages/home/home.dart';
import 'package:openhiit/providers/workout_provider.dart';
import 'package:permission_handler/permission_handler.dart';

// Global logger instance for logging messages
var logger = Logger(
printer: PrettyPrinter(methodCount: 0),
);
import 'package:provider/provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
Expand Down Expand Up @@ -39,16 +36,17 @@ void main() async {
class WorkoutTimer extends StatelessWidget {
const WorkoutTimer({super.key});

/// Application root.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'OpenHIIT',
debugShowCheckedModeBanner: false,
theme: ThemeData(),
darkTheme: ThemeData.dark(), // standard dark theme
themeMode: ThemeMode.system,
home: const MyHomePage(),
);
return MultiProvider(
providers: [ChangeNotifierProvider(create: (_) => WorkoutProvider())],
child: MaterialApp(
title: 'OpenHIIT',
debugShowCheckedModeBanner: false,
theme: ThemeData(),
darkTheme: ThemeData.dark(), // standard dark theme
themeMode: ThemeMode.system,
home: const MyHomePage(),
));
}
}
56 changes: 29 additions & 27 deletions lib/pages/active_timer/workout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,24 @@ import '../../models/lists/list_model_animated.dart';
import '../../models/lists/list_tile_model.dart';

class StartWorkout extends StatelessWidget {
const StartWorkout({super.key});
const StartWorkout({super.key, required this.workout});

final Workout workout;

@override
Widget build(BuildContext context) {
return const Scaffold(
return Scaffold(
body: Center(
child: CountDownTimer(),
child: CountDownTimer(workout: workout),
),
);
}
}

class CountDownTimer extends StatefulWidget {
const CountDownTimer({super.key});
const CountDownTimer({super.key, required this.workout});

final Workout workout;

@override
CountDownTimerState createState() => CountDownTimerState();
Expand Down Expand Up @@ -160,12 +164,10 @@ class CountDownTimerState extends State<CountDownTimer>
WidgetsBinding.instance.renderViews.first.automaticSystemUiAdjustment =
false;

Workout workoutArgument =
ModalRoute.of(context)!.settings.arguments as Workout;
Workout workout = widget.workout;

List<dynamic> exercises = workoutArgument.exercises != ""
? jsonDecode(workoutArgument.exercises)
: [];
List<dynamic> exercises =
workout.exercises != "" ? jsonDecode(workout.exercises) : [];

final GlobalKey<AnimatedListState> listKey = GlobalKey<AnimatedListState>();

Expand All @@ -177,7 +179,7 @@ class CountDownTimerState extends State<CountDownTimer>
shouldReset = false;
intervalInfo = ListModel<ListTileModel>(
listKey: listKey,
initialItems: listItems(exercises, workoutArgument),
initialItems: listItems(exercises, workout),
removedItemBuilder: _buildRemovedItem,
);
intervalTotal = intervalInfo.length;
Expand Down Expand Up @@ -296,19 +298,19 @@ class CountDownTimerState extends State<CountDownTimer>

return Countdown(
controller: _workoutController,
iterations: workoutArgument.iterations,
workSeconds: workoutArgument.workTime,
restSeconds: workoutArgument.restTime,
breakSeconds: workoutArgument.breakTime,
getreadySeconds: workoutArgument.getReadyTime,
warmupSeconds: workoutArgument.warmupTime,
cooldownSeconds: workoutArgument.cooldownTime,
workSound: workoutArgument.workSound,
restSound: workoutArgument.restSound,
completeSound: workoutArgument.completeSound,
countdownSound: workoutArgument.countdownSound,
halfwaySound: workoutArgument.halfwaySound,
numberOfWorkIntervals: workoutArgument.numExercises,
iterations: workout.iterations,
workSeconds: workout.workTime,
restSeconds: workout.restTime,
breakSeconds: workout.breakTime,
getreadySeconds: workout.getReadyTime,
warmupSeconds: workout.warmupTime,
cooldownSeconds: workout.cooldownTime,
workSound: workout.workSound,
restSound: workout.restSound,
completeSound: workout.completeSound,
countdownSound: workout.countdownSound,
halfwaySound: workout.halfwaySound,
numberOfWorkIntervals: workout.numExercises,
onFinished: () {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (intervalInfo.length == 1) {
Expand All @@ -333,11 +335,11 @@ class CountDownTimerState extends State<CountDownTimer>
if (timerData.status == "complete" && restart == false) {
done = true;
} else if (timerData.status == "start" &&
timerData.iterations == workoutArgument.iterations) {
timerData.iterations == workout.iterations) {
currentWorkInterval = 0;
ListModel<ListTileModel> intervalList = ListModel<ListTileModel>(
listKey: listKey,
initialItems: listItems(exercises, workoutArgument),
initialItems: listItems(exercises, workout),
removedItemBuilder: _buildRemovedItem,
);

Expand Down Expand Up @@ -437,7 +439,7 @@ class CountDownTimerState extends State<CountDownTimer>
timerText(
timerData.currentMicroSeconds
.toString(),
workoutArgument),
workout),
maxLines: 1,
minFontSize: 20,
maxFontSize: 20000,
Expand Down Expand Up @@ -712,7 +714,7 @@ class CountDownTimerState extends State<CountDownTimer>
child: AutoSizeText(
timerText(
timerData.currentMicroSeconds.toString(),
workoutArgument),
workout),
maxLines: 1,
minFontSize: 20,
maxFontSize: 20000,
Expand Down
19 changes: 10 additions & 9 deletions lib/pages/home/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import 'package:openhiit/models/workout_type.dart';
import 'package:openhiit/pages/select_timer/select_timer.dart';
import 'package:openhiit/pages/view_workout/view_workout.dart';
import 'package:openhiit/pages/home/widgets/fab_column.dart';
import 'package:openhiit/providers/workout_provider.dart';
import 'package:openhiit/utils/database/database_manager.dart';
import 'package:openhiit/utils/functions.dart';
import 'package:openhiit/utils/import_export/local_file_util.dart';
import 'package:openhiit/widgets/home/export_bottom_sheet.dart';
import 'package:openhiit/widgets/home/timer_list_tile.dart';
import 'package:openhiit/widgets/loader.dart';
import 'package:provider/provider.dart';
import 'package:share_plus/share_plus.dart';
import 'package:sqflite/sqflite.dart';

Expand All @@ -34,13 +36,16 @@ class _MyHomePageState extends State<MyHomePage> {
/// The initial list of workouts to be loaded fresh
/// from the DB.
///
late Future<List<Workout>> workouts;
late Future workouts;

late WorkoutProvider workoutProvider;

/// Initialize...
@override
void initState() {
super.initState();
workouts = DatabaseManager().lists(DatabaseManager().initDB());

workoutProvider = Provider.of<WorkoutProvider>(context, listen: false);
}
// ---

Expand Down Expand Up @@ -95,12 +100,8 @@ class _MyHomePageState extends State<MyHomePage> {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ViewWorkout(),

/// Pass the [tappedWorkout] as an argument to
/// the ViewWorkout page.
settings: RouteSettings(
arguments: tappedWorkout,
builder: (context) => ViewWorkout(
workout: tappedWorkout,
),
),
).then((value) {
Expand Down Expand Up @@ -398,7 +399,7 @@ class _MyHomePageState extends State<MyHomePage> {
padding: const EdgeInsets.all(8.0),
child: SizedBox(
child: FutureBuilder(
future: workouts,
future: workoutProvider.loadWorkoutData(),
builder:
(BuildContext context, AsyncSnapshot snapshot) {
/// When [workouts] has successfully loaded.
Expand Down
9 changes: 4 additions & 5 deletions lib/pages/view_workout/view_workout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import '../../models/lists/list_tile_model.dart';
import '../active_timer/workout.dart';

class ViewWorkout extends StatefulWidget {
const ViewWorkout({super.key});
final Workout workout;
const ViewWorkout({super.key, required this.workout});
@override
ViewWorkoutState createState() => ViewWorkoutState();
}
Expand Down Expand Up @@ -65,9 +66,7 @@ class ViewWorkoutState extends State<ViewWorkout> {

@override
Widget build(BuildContext context) {
/// Extracting the Workout object from the route arguments.
///
Workout workout = ModalRoute.of(context)!.settings.arguments as Workout;
Workout workout = widget.workout;

/// Parsing the exercises data from the Workout object.
///
Expand Down Expand Up @@ -111,7 +110,7 @@ class ViewWorkoutState extends State<ViewWorkout> {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const CountDownTimer(),
builder: (context) => CountDownTimer(workout: workout),
settings: RouteSettings(
arguments: workout,
),
Expand Down
11 changes: 6 additions & 5 deletions lib/providers/workout_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@ class WorkoutProvider extends ChangeNotifier {

List<Workout> get workouts => _workouts;

Future loadWorkoutData() async {
Future<List<Workout>> loadWorkoutData() async {
var dbManager = DatabaseManager();
return dbManager.lists(dbManager.initDB()).then((entries) {
return dbManager.lists(dbManager.initDB()).then((workouts) {
_workouts = workouts;
return _workouts;
}).whenComplete(() {
notifyListeners();
});
}

Future updateExpense(Workout workout) async {
Future updateWorkout(Workout workout) async {
var dbManager = DatabaseManager();
return dbManager
.updateList(workout, await DatabaseManager().initDB())
Expand All @@ -35,7 +36,7 @@ class WorkoutProvider extends ChangeNotifier {
}).whenComplete(() => notifyListeners());
}

Future addExpense(Workout workout) async {
Future addWorkout(Workout workout) async {
var dbManager = DatabaseManager();
return dbManager
.insertList(workout, await DatabaseManager().initDB())
Expand All @@ -44,7 +45,7 @@ class WorkoutProvider extends ChangeNotifier {
}).whenComplete(() => notifyListeners());
}

Future deleteExpense(Workout workout) async {
Future deleteWorkout(Workout workout) async {
var dbManager = DatabaseManager();
return dbManager
.deleteList(workout.id, DatabaseManager().initDB())
Expand Down
16 changes: 16 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.5"
nested:
dependency: transitive
description:
name: nested
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
numberpicker:
dependency: "direct main"
description:
Expand Down Expand Up @@ -712,6 +720,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.8"
provider:
dependency: "direct main"
description:
name: provider
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev"
source: hosted
version: "6.1.2"
rxdart:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ dependencies:
file_saver: ^0.2.13
permission_handler: ^11.3.1
shared_preferences: ^2.2.3
provider: ^6.1.2

flutter_launcher_icons:
android: "launcher_icon"
Expand Down

0 comments on commit 0ee37ef

Please sign in to comment.