Files
plan_flutter/lib/page/plan/detail/plan_detail_page.dart
zhutao ccb7d5bb24 1
2025-09-09 15:45:08 +08:00

106 lines
3.0 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:plan/page/plan/detail/viewmodel/plan_detail_store.dart';
import 'package:plan/theme/decorations/app_shadows.dart';
import 'package:provider/provider.dart';
import 'other/bar_actions.dart';
import 'other/done_stamp.dart';
import 'other/footer_btn.dart';
import 'widgets/avatar_card.dart';
import 'widgets/coach_message.dart';
import 'widgets/plan_list.dart';
import 'widgets/scroll_box.dart';
import 'widgets/suggested.dart';
class PlanDetailPage extends StatefulWidget {
final int? id;
final String? planName;
const PlanDetailPage({
super.key,
this.id,
this.planName,
});
@override
State<PlanDetailPage> createState() => _PlanDetailPageState();
}
class _PlanDetailPageState extends State<PlanDetailPage> {
final ScrollController scrollController = ScrollController();
///store对象
late PlanDetailStore store;
@override
void initState() {
super.initState();
store = PlanDetailStore(
planId: widget.id ?? 0,
planContent: widget.planName ?? "",
scrollController: scrollController,
);
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<PlanDetailStore>(
create: (_) {
return store;
},
child: Consumer<PlanDetailStore>(
child: SafeArea(
child: Column(
children: [
AvatarCard(),
Expanded(
child: Padding(
padding: EdgeInsets.only(left: 15, right: 15, bottom: 1),
child: Container(
decoration: shadowDecoration,
child: Stack(
children: [
Column(
children: [
Expanded(
child: ScrollBox(
child: Column(
children: [
CoachMessage(),
PlanList(),
SuggestedTitle(),
SuggestedList(),
],
),
),
),
FooterBtn(),
],
),
Positioned(
child: DoneStamp(),
),
],
),
),
),
),
],
),
),
builder: (context, store, child) {
return CupertinoPageScaffold(
backgroundColor: Colors.white,
navigationBar: CupertinoNavigationBar(
middle: Text(store.planDetail.summary ?? ""),
trailing: BarActions(store: store),
),
child: child!,
);
},
),
);
}
}