16
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
*/
18
18
19
+ import 'dart:async' ;
20
+
19
21
import 'package:flutter/material.dart' ;
20
22
import 'package:intl/intl.dart' ;
21
23
import 'package:provider/provider.dart' ;
@@ -26,31 +28,58 @@ import 'package:wger/widgets/nutrition/nutritional_diary_detail.dart';
26
28
/// Arguments passed to the form screen
27
29
class NutritionalDiaryArguments {
28
30
/// Nutritional plan
29
- final NutritionalPlan plan;
31
+ final int plan;
30
32
31
33
/// Date to show data for
32
34
final DateTime date;
33
35
34
36
const NutritionalDiaryArguments (this .plan, this .date);
35
37
}
36
38
37
- class NutritionalDiaryScreen extends StatelessWidget {
39
+ class NutritionalDiaryScreen extends StatefulWidget {
38
40
const NutritionalDiaryScreen ();
39
41
static const routeName = '/nutritional-diary' ;
40
42
41
43
@override
42
- Widget build (BuildContext context) {
44
+ State <NutritionalDiaryScreen > createState () => _NutritionalDiaryScreenState ();
45
+ }
46
+
47
+ class _NutritionalDiaryScreenState extends State <NutritionalDiaryScreen > {
48
+ NutritionalPlan ? _plan;
49
+ late DateTime date;
50
+ StreamSubscription ? _subscription;
51
+
52
+ @override
53
+ void didChangeDependencies () {
54
+ super .didChangeDependencies ();
43
55
final args = ModalRoute .of (context)! .settings.arguments as NutritionalDiaryArguments ;
56
+ date = args.date;
57
+
58
+ final stream =
59
+ Provider .of <NutritionPlansProvider >(context, listen: false ).watchNutritionPlan (args.plan);
60
+ _subscription = stream.listen ((plan) {
61
+ if (! context.mounted) {
62
+ return ;
63
+ }
64
+ setState (() {
65
+ _plan = plan;
66
+ });
67
+ });
68
+ }
44
69
70
+ @override
71
+ Widget build (BuildContext context) {
45
72
return Scaffold (
46
73
appBar: AppBar (
47
- title: Text (DateFormat .yMd (Localizations .localeOf (context).languageCode).format (args. date)),
74
+ title: Text (DateFormat .yMd (Localizations .localeOf (context).languageCode).format (date)),
48
75
),
49
76
body: Consumer <NutritionPlansProvider >(
50
77
builder: (context, nutritionProvider, child) => SingleChildScrollView (
51
78
child: Padding (
52
79
padding: const EdgeInsets .all (8.0 ),
53
- child: NutritionalDiaryDetailWidget (args.plan, args.date),
80
+ child: _plan == null
81
+ ? const Text ('plan not found' )
82
+ : NutritionalDiaryDetailWidget (_plan! , date),
54
83
),
55
84
),
56
85
),
0 commit comments