diff --git a/lib/main.dart b/lib/main.dart index b91df4b..89a3109 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:aku_community_manager/provider/app_provider.dart'; import 'package:aku_community_manager/provider/user_provider.dart'; import 'package:aku_community_manager/ui/home/home_page.dart'; import 'package:bot_toast/bot_toast.dart'; @@ -16,6 +17,7 @@ class MyApp extends StatelessWidget { return MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => UserProvider()), + ChangeNotifierProvider(create: (context) => AppProvider()), ], child: GetMaterialApp( title: '小蜜蜂管家', diff --git a/lib/provider/app_provider.dart b/lib/provider/app_provider.dart new file mode 100644 index 0000000..7c36ee2 --- /dev/null +++ b/lib/provider/app_provider.dart @@ -0,0 +1,20 @@ +import 'package:aku_community_manager/ui/home/application/applications_page.dart'; +import 'package:flutter/material.dart'; + +class AppProvider extends ChangeNotifier { + List _recentUsedApp = []; + List get recentUsedApp => _recentUsedApp; + + ///添加最近使用的应用 + addRecentApp(AppApplication app) { + if (-recentUsedApp.length >= 4) _recentUsedApp.removeLast(); + _recentUsedApp.insert(0, app); + notifyListeners(); + } + + ///清除最近使用应用 + clearRecentApp() { + _recentUsedApp.clear(); + notifyListeners(); + } +} diff --git a/lib/tools/widget_tool.dart b/lib/tools/widget_tool.dart index 7ed578a..2e00a4d 100644 --- a/lib/tools/widget_tool.dart +++ b/lib/tools/widget_tool.dart @@ -47,12 +47,14 @@ class AkuDiveder { } class AkuBox { + ///生成 高度为设计高度的SizedBox static h(double height) { return SizedBox( height: height.w, ); } + ///生成 宽度为设计高度的SizedBox static w(double width) { return SizedBox( width: width.w, diff --git a/lib/ui/home/application/applications_page.dart b/lib/ui/home/application/applications_page.dart index 63a8fc3..5955f7e 100644 --- a/lib/ui/home/application/applications_page.dart +++ b/lib/ui/home/application/applications_page.dart @@ -1,10 +1,18 @@ import 'package:aku_community_manager/const/resource.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/widget_tool.dart'; import 'package:aku_community_manager/ui/widgets/common/aku_back_button.dart'; import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart'; +import 'package:aku_ui/common_widgets/aku_material_button.dart'; import 'package:flutter/material.dart'; import 'package:aku_community_manager/tools/screen_tool.dart'; +import 'package:provider/provider.dart'; + +class AppApplication { + String name; + String assetPath; +} class ApplicationPage extends StatefulWidget { ApplicationPage({Key key}) : super(key: key); @@ -13,7 +21,12 @@ class ApplicationPage extends StatefulWidget { _ApplicationPageState createState() => _ApplicationPageState(); } -class _ApplicationPageState extends State { +class _ApplicationPageState extends State + with SingleTickerProviderStateMixin { + PageController _pageController = PageController(); + + int _nowSelectedIndex = 0; + @override Widget build(BuildContext context) { return AkuScaffold( @@ -54,7 +67,129 @@ class _ApplicationPageState extends State { ), ), body: Column( - children: [], + children: [ + AkuBox.h(16), + _buildRecentUsed(), + _buildBottomApps(), + ], + ), + ); + } + + ///最近使用 + _buildRecentUsed() { + final appProvider = Provider.of(context); + return appProvider.recentUsedApp.isEmpty + ? SizedBox() + : Material( + color: Colors.white, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + AkuMaterialButton( + onPressed: () { + appProvider.clearRecentApp(); + }, + 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: () {}, + child: Text( + '清除', + style: TextStyle( + color: AppStyle.secondaryColor, + fontSize: 28.w, + fontWeight: FontWeight.bold, + ), + ), + padding: EdgeInsets.symmetric( + vertical: 18.w, + horizontal: 32.w, + ), + ), + ], + ), + ], + ), + ); + } + + ///应用组 + _buildBottomApps() { + final appProvider = Provider.of(context); + 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: [ + Text('12'), + Text('23'), + ], + ), + ), + ), + ], + ), + ); + } + + ///应用组分类卡片 + _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, + ), ), ); }