fmassive/lib/plans_page.dart

97 lines
2.4 KiB
Dart
Raw Normal View History

2023-04-06 23:50:02 +00:00
import 'package:flutter/material.dart';
2023-04-10 23:41:10 +00:00
import 'package:fmassive/database.dart';
2023-04-13 06:58:26 +00:00
import 'package:fmassive/edit_plan.dart';
2023-04-10 23:41:10 +00:00
import 'package:fmassive/main.dart';
import 'package:fmassive/plan_list.dart';
2023-04-10 23:41:10 +00:00
import 'package:moor/moor.dart';
2023-04-06 23:50:02 +00:00
class PlansPage extends StatelessWidget {
2023-04-13 06:58:26 +00:00
const PlansPage({super.key, required this.search});
final String search;
2023-04-06 23:50:02 +00:00
@override
Widget build(BuildContext context) {
2023-04-13 06:58:26 +00:00
return Scaffold(
2023-04-10 23:41:10 +00:00
body: Center(
2023-04-13 06:58:26 +00:00
child: _PlansPage(search: search),
2023-04-06 23:50:02 +00:00
),
);
}
}
2023-04-10 23:41:10 +00:00
class _PlansPage extends StatefulWidget {
2023-11-29 00:01:11 +00:00
const _PlansPage({required this.search});
2023-04-13 06:58:26 +00:00
final String search;
2023-04-10 23:41:10 +00:00
@override
createState() => _PlansPageState();
}
class _PlansPageState extends State<_PlansPage> {
2023-04-13 06:58:26 +00:00
bool showSearch = false;
late Stream<List<Plan>> stream;
2023-04-10 23:41:10 +00:00
2023-04-13 06:58:26 +00:00
@override
initState() {
super.initState();
setStream();
}
2023-04-10 23:41:10 +00:00
2023-04-13 06:58:26 +00:00
void setStream() {
stream = (db.select(db.plans)
..where((gymSet) => gymSet.days.contains(widget.search))
..limit(10, offset: 0))
.watch();
2023-04-10 23:41:10 +00:00
}
@override
2023-04-13 06:58:26 +00:00
didUpdateWidget(covariant _PlansPage oldWidget) {
super.didUpdateWidget(oldWidget);
setStream();
}
void toggleSearch() {
setState(() {
showSearch = !showSearch;
});
2023-04-10 23:41:10 +00:00
}
@override
Widget build(BuildContext context) {
return Scaffold(
2023-04-13 06:58:26 +00:00
body: StreamBuilder<List<Plan>>(
stream: stream,
builder: (context, snapshot) {
final plans = snapshot.data;
2023-04-10 23:41:10 +00:00
if (snapshot.hasError)
return Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
'Error: ${snapshot.error}',
style: Theme.of(context).textTheme.headlineSmall,
2023-11-30 00:02:50 +00:00
),),
);
if (plans == null) return Container();
2023-04-10 23:41:10 +00:00
return PlanList(plans: plans);
2023-11-30 00:02:50 +00:00
},),
2023-04-13 06:58:26 +00:00
floatingActionButton: FloatingActionButton(
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const EditPlanPage(
2023-11-10 10:43:06 +00:00
plan: PlansCompanion(
2023-11-30 00:02:50 +00:00
days: Value(''), exercises: Value(''),),),
2023-04-13 06:58:26 +00:00
),
);
},
2023-11-30 00:02:50 +00:00
child: const Icon(Icons.add),),);
2023-04-10 23:41:10 +00:00
}
}