123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- import 'package:flutter/material.dart';
- import 'package:flutter_habit/common/BaseArchitectural.dart';
- import 'package:flutter_habit/provider/UserProvider.dart';
- import 'package:flutter_habit/view/context/ExerciseInfoContext.dart';
- import 'package:flutter_habit/view/context/LifeInfoContext.dart';
- import 'package:flutter_habit/view/context/BasicInfoContext.dart';
- import 'package:flutter_habit/view/context/StudyInfoContext.dart';
- import 'package:flutter_habit/view/drawer/HomePageDrawer.dart';
- import 'package:flutter_habit/view/record/BasicInfoRecordingPage.dart';
- import 'package:flutter_habit/view/record/ExerciseInfoRecordingPage.dart';
- import 'package:flutter_habit/view/record/LifeInfoRecordingPage.dart';
- import 'package:flutter_habit/view/record/StudyInfoRecordingPage.dart';
- import 'package:provider/provider.dart';
- /// Description: Home Page
- /// Time : 08/18/2023 Friday
- /// Author : liuyuqi.gov@msn.cn
- class HomePage extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return MultiProvider(
- providers: [
- ChangeNotifierProvider<HomePageService>(
- create: (_) => HomePageService(context)),
- ChangeNotifierProvider<HomePageModel>(
- create: (_) => HomePageModel(context)),
- ],
- child: _HomePageView(),
- );
- }
- }
- // model
- class HomePageModel extends BaseModel {
- HomePageModel(BuildContext context) : super(context);
- late int currentIndex;
- PageController? pageViewController;
- @override
- void init(BuildContext context) {
- super.init(context);
- currentIndex = 0;
- pageViewController = PageController(initialPage: 0);
- }
- }
- // service
- class HomePageService extends BaseProvider {
- HomePageService(BuildContext context) : super(context);
- void changeNavigation(BuildContext context, int index) {
- HomePageModel model = Provider.of<HomePageModel>(context, listen: false);
- model.currentIndex = index;
- model.pageViewController!.animateToPage(index,
- duration: Duration(milliseconds: 300), curve: Curves.ease);
- model.refresh();
- }
- void onPageChanged(BuildContext context, int index) {
- HomePageModel model = Provider.of<HomePageModel>(context, listen: false);
- model.currentIndex = index;
- model.refresh();
- }
- Future<void> toBasicInfoRecordingPage(BuildContext context) async {
- await Navigator.of(context)
- .push(MaterialPageRoute(builder: (_) => BasicInfoRecordingPage()));
- }
- Future<void> toLifeInfoRecordingPage(BuildContext context) async {
- await Navigator.of(context)
- .push(MaterialPageRoute(builder: (_) => LifeInfoRecordingPage()));
- }
- Future<void> toExerciseInfoRecordingPage(BuildContext context) async {
- await Navigator.of(context)
- .push(MaterialPageRoute(builder: (_) => ExerciseInfoRecordingPage()));
- }
- Future<void> toStudyInfoRecordingPage(BuildContext context) async {
- await Navigator.of(context)
- .push(MaterialPageRoute(builder: (_) => StudyInfoRecordingPage()));
- }
- }
- // view
- class _HomePageView extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- HomePageService service =
- Provider.of<HomePageService>(context, listen: false);
- HomePageModel model = Provider.of<HomePageModel>(context, listen: true);
- UserProvider userProvider =
- Provider.of<UserProvider>(context, listen: true);
- return Scaffold(
- appBar: AppBar(
- title: Text("Home"),
- actions: userProvider.token == null
- ? []
- : <Widget>[
- Row(
- children: <Widget>[
- Text(
- "${userProvider.coins} x ",
- style: TextStyle(fontSize: 16),
- ),
- Icon(Icons.monetization_on),
- Text(" "),
- ],
- ),
- ],
- ),
- drawer: HomePageDrawer(),
- body: PageView(
- controller: model.pageViewController,
- onPageChanged: (index) => service.onPageChanged(context, index),
- physics: NeverScrollableScrollPhysics(),
- children: <Widget>[
- BasicInfoContext(),
- LifeInfoContext(),
- ExerciseInfoContext(),
- StudyInfoContext(),
- ],
- ),
- floatingActionButton: <Widget>[
- FloatingActionButton(
- child: Icon(Icons.playlist_add),
- onPressed: () => service.toBasicInfoRecordingPage(context),
- ),
- FloatingActionButton(
- child: Icon(Icons.playlist_add),
- onPressed: () => service.toLifeInfoRecordingPage(context),
- ),
- FloatingActionButton(
- child: Icon(Icons.playlist_add),
- onPressed: () => service.toExerciseInfoRecordingPage(context),
- ),
- FloatingActionButton(
- child: Icon(Icons.playlist_add),
- onPressed: () => service.toStudyInfoRecordingPage(context),
- ),
- ][model.currentIndex],
- bottomNavigationBar: BottomNavigationBar(
- currentIndex: model.currentIndex,
- onTap: (index) => service.changeNavigation(context, index),
- showUnselectedLabels: true,
- fixedColor: Theme.of(context).colorScheme.secondary,
- unselectedItemColor: Theme.of(context).unselectedWidgetColor,
- items: <BottomNavigationBarItem>[
- BottomNavigationBarItem(
- icon: Icon(Icons.accessibility), label: "基本信息"),
- BottomNavigationBarItem(icon: Icon(Icons.wb_sunny), label: "日常生活"),
- BottomNavigationBarItem(
- icon: Icon(Icons.directions_bike), label: "体育锻炼"),
- BottomNavigationBarItem(icon: Icon(Icons.school), label: "课程学习"),
- ],
- ),
- );
- }
- }
|