// Flutter imports: import 'package:flutter/material.dart'; // Package imports: import 'package:aku_ui/common_widgets/aku_material_button.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; // Project imports: import 'package:aku_community_manager/const/resource.dart'; import 'package:aku_community_manager/models/manager/facilities/facilities_page.dart'; import 'package:aku_community_manager/provider/app_provider.dart'; import 'package:aku_community_manager/style/app_style.dart'; import 'package:aku_community_manager/tools/screen_tool.dart'; import 'package:aku_community_manager/tools/widget_tool.dart'; import 'package:aku_community_manager/ui/manage_pages/green_manage/green_manage_page.dart'; import 'package:aku_community_manager/ui/manage_pages/inspection_manage/inspection_manage_page.dart'; import 'package:aku_community_manager/ui/manage_pages/key_manage/key_manage_page.dart'; import 'package:aku_community_manager/ui/manage_pages/packages_manage/packages_manage_page.dart'; import 'package:aku_community_manager/ui/manage_pages/rules_manage/rules_manage_page.dart'; import 'package:aku_community_manager/ui/sub_pages/activity_manager/activity_manager_page.dart'; import 'package:aku_community_manager/ui/sub_pages/borrow_manager/borrow_manager_page.dart'; import 'package:aku_community_manager/ui/sub_pages/business_and_fix/business_and_fix_page.dart'; import 'package:aku_community_manager/ui/sub_pages/decoration_manager/decoration_manager_page.dart'; import 'package:aku_community_manager/ui/sub_pages/items_outdoor/items_outdoor_page.dart'; import 'package:aku_community_manager/ui/sub_pages/visitor_manager/visitor_manager_page.dart'; import 'package:aku_community_manager/ui/tool_pages/warning/warning_page.dart'; import 'package:aku_community_manager/ui/widgets/common/aku_back_button.dart'; import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart'; class AppApplication { String name; String assetPath; dynamic page; AppApplication( this.name, this.assetPath, this.page, ); } class ApplicationPage extends StatefulWidget { ApplicationPage({Key key}) : super(key: key); @override _ApplicationPageState createState() => _ApplicationPageState(); } class _ApplicationPageState extends State with SingleTickerProviderStateMixin { PageController _pageController = PageController(); int _nowSelectedIndex = 0; List _recommandApplications = [ AppApplication( '活动管理', R.ASSETS_HOME_IC_ACTIVITY_PNG, () => ActivityManagerPage()), AppApplication( '访客管理', R.ASSETS_HOME_IC_VISITORS_PNG, () => VisitorManagerPage()), AppApplication( '借还管理', R.ASSETS_HOME_IC_BORROW_PNG, () => BorrowManagerPage()), AppApplication('一键报警', R.ASSETS_HOME_IC_POLICE_PNG, () => WarningPage()), ]; List _wisdomApplications = [ AppApplication('一键报警', R.ASSETS_HOME_IC_POLICE_PNG, () => WarningPage()), AppApplication( '访客管理', R.ASSETS_HOME_IC_VISITORS_PNG, () => VisitorManagerPage()), AppApplication( '报事报修', R.ASSETS_HOME_IC_SERVICE_PNG, () => BusinessAndFixPage()), AppApplication( '物品出户', R.ASSETS_HOME_IC_ARTICLE_PNG, () => ItemsOutdoorPage()), AppApplication( '装修管理', R.ASSETS_HOME_IC_DECORATION_PNG, () => DecorationManagerPage()), AppApplication( '活动管理', R.ASSETS_HOME_IC_ACTIVITY_PNG, () => ActivityManagerPage()), AppApplication( '借还管理', R.ASSETS_HOME_IC_BORROW_PNG, () => BorrowManagerPage()), AppApplication( '巡检管理', R.ASSETS_HOME_IC_PATROL_PNG, () => InspectionManagePage()), AppApplication( '绿化管理', R.ASSETS_HOME_IC_GREENING_PNG, () => GreenManagePage()), AppApplication( '设施检查', R.ASSETS_HOME_IC_FACILITIES_PNG, () => FacilitiesPage()), AppApplication( '包裹管理', R.ASSETS_HOME_PACKAGE_PNG, () => PackagesManagePage()), AppApplication('钥匙管理', R.ASSETS_HOME_KEY_PNG, () => KeyManagePage()), AppApplication('规程管理', R.ASSETS_HOME_RULES_PNG, () => RulesManagePage()) ]; @override Widget build(BuildContext context) { final appProvider = Provider.of(context); return AkuScaffold( appBar: AppBar( brightness: Brightness.light, elevation: 0, backgroundColor: Colors.white, leading: SizedBox( width: 89.w, child: AkuBackButton(), ), // titleSpacing: 0, // title: Container( // margin: EdgeInsets.only(right: 37.w), // padding: EdgeInsets.symmetric(horizontal: 32.w), // height: 72.w, // child: Row( // children: [ // Image.asset( // R.ASSETS_HOME_IC_SEARCH_PNG, // height: 40.w, // width: 40.w, // ), // AkuBox.w(16), // Text( // '搜索应用', // style: TextStyle( // color: AppStyle.minorTextColor, // fontSize: 28.sp, // ), // ), // ], // ), // decoration: BoxDecoration( // color: Color(0xFFF9F9F9), // borderRadius: BorderRadius.circular(8.w), // ), // ), // ), title: Text( '全部应用', style: AppStyle().barTitleStyle, ), centerTitle: true, ), body: Column( children: [ AkuBox.h(16), _buildRecentUsed(), appProvider.recentUsedApp.isEmpty ? SizedBox() : AkuBox.h(16), _buildBottomApps(), ], ), ); } ///最近使用 _buildRecentUsed() { final appProvider = Provider.of(context); return appProvider.recentUsedApp.isEmpty ? SizedBox() : Material( color: Colors.white, child: Column( mainAxisSize: MainAxisSize.min, children: [ Row( children: [ Padding( child: Text( '最近使用', style: TextStyle( color: AppStyle.primaryTextColor, fontSize: 28.w, fontWeight: FontWeight.bold, ), ), padding: EdgeInsets.symmetric( vertical: 18.w, horizontal: 32.w, ), ), Spacer(), AkuMaterialButton( onPressed: () { appProvider.clearRecentApp(); }, child: Text( '清除', style: TextStyle( color: AppStyle.secondaryColor, fontSize: 28.w, fontWeight: FontWeight.bold, ), ), padding: EdgeInsets.symmetric( vertical: 18.w, horizontal: 32.w, ), ), ], ), GridView( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 4, ), children: appProvider.recentUsedApp .map((e) => _buildBottomAppCard(e)) .toList(), shrinkWrap: true, physics: NeverScrollableScrollPhysics(), ), ], ), ); } ///应用组 _buildBottomApps() { return Expanded( child: Row( children: [ SizedBox( width: 172.w, child: ListView( children: [ _buildBottomTypeCard(0, '为您推荐'), _buildBottomTypeCard(1, '智慧管家'), ], ), ), Expanded( child: Material( color: Colors.white, child: PageView( controller: _pageController, scrollDirection: Axis.vertical, onPageChanged: (index) { setState(() { _nowSelectedIndex = index; }); }, children: [ GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, ), physics: NeverScrollableScrollPhysics(), itemBuilder: (context, index) { final application = _recommandApplications[index]; return _buildBottomAppCard(application); }, itemCount: _recommandApplications.length, ), GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, ), physics: NeverScrollableScrollPhysics(), itemBuilder: (context, index) { final application = _wisdomApplications[index]; return _buildBottomAppCard(application); }, itemCount: _wisdomApplications.length, ), ], ), ), ), ], ), ); } ///应用组分类卡片 _buildBottomTypeCard(int index, String title) { final bool isSelected = _nowSelectedIndex == index; return AkuMaterialButton( color: isSelected ? Colors.white : Colors.transparent, onPressed: () { if (!isSelected) setState(() { _pageController.animateToPage( index, duration: Duration(milliseconds: 300), curve: Curves.easeInOutCubic, ); _nowSelectedIndex = index; }); }, child: Text( title, style: TextStyle( color: isSelected ? AppStyle.primaryTextColor : AppStyle.minorTextColor, fontSize: 28.sp, fontWeight: FontWeight.bold, ), ), ); } Widget _buildBottomAppCard(AppApplication application) { final appProvider = Provider.of(context); return AkuMaterialButton( onPressed: () { appProvider.addRecentApp(application); Get.to(application.page); }, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( application.assetPath, height: 60.w, width: 60.w, ), AkuBox.h(8), Text( application.name, style: TextStyle( color: AppStyle.primaryTextColor, fontSize: 24.sp, fontWeight: FontWeight.bold), ), ], ), ); } }