fmassive/lib/plans_page.dart

113 lines
3.0 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: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-10 04:09:20 +00:00
const _PlansPage({super.key, 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-04-13 06:58:26 +00:00
if (plans == null)
return const Center(child: CircularProgressIndicator());
2023-04-10 23:41:10 +00:00
2023-04-13 06:58:26 +00:00
return ListView.builder(
itemCount: plans.length,
itemBuilder: (context, index) {
return ListTile(
2023-06-25 03:47:59 +00:00
title: Text(plans[index].days.replaceAll(',', ', ')),
subtitle: Text(plans[index].exercises),
2023-04-13 06:58:26 +00:00
onTap: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditPlanPage(
plan: plans[index].toCompanion(false)),
),
);
});
},
);
}),
floatingActionButton: FloatingActionButton(
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const EditPlanPage(
2023-11-10 10:43:06 +00:00
plan: PlansCompanion(
days: Value(''), exercises: Value(''))),
2023-04-13 06:58:26 +00:00
),
);
},
child: const Icon(Icons.add)));
2023-04-10 23:41:10 +00:00
}
}