diff --git a/lib/main.dart b/lib/main.dart index 30c4223..f344cf6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,8 @@ +import 'package:aku_community_manager/provider/user_provider.dart'; import 'package:aku_community_manager/ui/home/home_page.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:provider/provider.dart'; void main() { runApp(MyApp()); @@ -10,9 +12,15 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { - return GetMaterialApp( - title: '小蜜蜂管家', - home: HomePage(), + return MultiProvider( + providers:[ + ChangeNotifierProvider(create: (context)=>UserProvider()), + ], + child: GetMaterialApp( + title: '小蜜蜂管家', + home: HomePage(), + + ), ); } } diff --git a/lib/provider/user_provider.dart b/lib/provider/user_provider.dart new file mode 100644 index 0000000..110c511 --- /dev/null +++ b/lib/provider/user_provider.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; +//登录状态管理 +class UserProvider extends ChangeNotifier{ + bool _isSigned=false; + get isSigned=>_isSigned; + setisSigned (bool state){ + _isSigned=state; + notifyListeners(); + } +} \ No newline at end of file diff --git a/lib/utils/screen_tool.dart b/lib/tools/screen_tool.dart similarity index 100% rename from lib/utils/screen_tool.dart rename to lib/tools/screen_tool.dart diff --git a/lib/tools/widget_tool.dart b/lib/tools/widget_tool.dart new file mode 100644 index 0000000..55daaca --- /dev/null +++ b/lib/tools/widget_tool.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +//自定义分割线 +class AkuDiveder { + final bool isReverse;//颜色方向反转 + const AkuDiveder({Key key,this.isReverse=false}); + Widget verticalDivider(double height) { + return Container( + width: 1.w, + height: height, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: isReverse + ? [ + Color(0xFFE8E8E8), + Color(0xFFFFFFFF), + ] + : [ + Color(0xFFFFFFFF), + Color(0xFFE8E8E8), + ])), + ); + } + Widget horizontalDivider(double width) { + return Container( + width: width, + height: 1.w, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: isReverse + ? [ + Color(0xFFE8E8E8), + Color(0xFFFFFFFF), + ] + : [ + Color(0xFFFFFFFF), + Color(0xFFE8E8E8), + ])), + ); + } +} diff --git a/lib/ui/home/home_page.dart b/lib/ui/home/home_page.dart index 698a56b..222a0ca 100644 --- a/lib/ui/home/home_page.dart +++ b/lib/ui/home/home_page.dart @@ -1,9 +1,14 @@ +import 'package:aku_community_manager/provider/user_provider.dart'; import 'package:aku_community_manager/style/app_style.dart'; -import 'package:aku_community_manager/utils/screen_tool.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/home/personal_draw.dart'; import 'package:aku_ui/aku_ui.dart'; import 'package:aku_ui/common_widgets/aku_material_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:provider/provider.dart'; class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); @@ -12,14 +17,76 @@ class HomePage extends StatefulWidget { _HomePageState createState() => _HomePageState(); } +//自定义bar的菜单按钮 +Widget _menuButton(IconData iconData, String text, Widget page) { + return AkuButton( + height: 75.w + 8.w + 33.w, + onPressed: () { + Get.to(page); + }, + child: Column( + children: [ + Icon( + iconData, + size: 75.w, + ), + SizedBox(height: 8.w), + Text( + text, + style: TextStyle( + color: Color(0xFF4A4B51), + fontSize: 24.sp, + fontWeight: FontWeight.bold, + ), + ) + ], + ), + ); +} + +//底部信息栏卡片 +Widget _card(String number, String text, Color color) { + return AkuButton( + onPressed: () {}, + color: Color(0xFFFFFFFF), + child: Container( + width: 342.5.w, + height: 166.w, + alignment: Alignment.center, + child: Column( + children: [ + SizedBox( + height: 32.w, + ), + Text( + number, + style: TextStyle( + color: color, fontSize: 40.sp, fontStyle: FontStyle.italic), + ), + SizedBox( + height: 16.w, + ), + Text(text, + style: TextStyle( + color: AppStyle.minorTextColor, + fontSize: 24.sp, + fontWeight: FontWeight.bold)), + Spacer(), + ], + )), + ); +} + class _HomePageState extends State { - TextEditingController _controller; @override Widget build(BuildContext context) { + final userProvider=Provider.of(context); ScreenUtil.init(context, designSize: Size(750, 1334), allowFontScaling: true); - return Scaffold( + drawer: PersonalDraw(), + backgroundColor: Color(0xFFF9F9F9), + //自定义bar appBar: PreferredSize( preferredSize: Size(375.w, 430.w - 40.w + statusBarHeight), child: Container( @@ -47,55 +114,57 @@ class _HomePageState extends State { width: 16.w, ), Container( - margin: EdgeInsets.only(top: 8.w, bottom: 8.w), - width: 72.w, - height: 72.w, - child: AkuRoundButton( + margin: EdgeInsets.only(top: 8.w, bottom: 8.w), + width: 72.w, + height: 72.w, //头像按钮 - height: 36.w, - onPressed: () {}, - child: CircleAvatar(radius: 36.w), - ), - ), + child: Builder(builder: (BuildContext context) { + return AkuRoundButton( + height: 72.w, + onPressed: () { + Scaffold.of(context).openDrawer(); + }, + child: CircleAvatar(radius: 36.w, + backgroundColor: Colors.grey, + child: userProvider.isSigned?null:null,), + ); + })), SizedBox(width: 16.w), Expanded( child: Container( margin: EdgeInsets.only(top: 8.w, bottom: 8.w), alignment: Alignment.center, height: 72.w, - color: Color(0xFFFFFFFF), - padding: EdgeInsets.only(left: 21.w, right: 87.w), - child: Row(children: [ - Container( - child: Column( - children: [ - SizedBox(height: 18.w), - Icon( - Icons.zoom_in_sharp, - size: 38.w, - ), - ], + padding: EdgeInsets.only(left: 21.w), + child: AkuButton( + //搜索框按钮 + color: Color(0xFFFFFFFF), + onPressed: () {}, + child: Row(children: [ + Container( + child: Column( + children: [ + SizedBox(height: 18.w), + Icon( + Icons.zoom_in_sharp, + size: 38.w, + ), + ], + ), ), - ), - SizedBox(width: 19.w), - Expanded( - child: AkuButton( - //搜索框按钮 - padding: EdgeInsets.zero, - onPressed: () {}, - child: Text( - '搜索工单订单号、手机', - style: TextStyle( - color: AppStyle.minorTextColor, - fontSize: 28.sp, - ), + SizedBox(width: 19.w), + Text( + '搜索工单订单号、手机', + style: TextStyle( + color: AppStyle.minorTextColor, + fontSize: 28.sp, ), ), - ), - ]), + ]), + ), ), ), - SizedBox(width:15.w), + SizedBox(width: 15.w), Container( margin: EdgeInsets.only(top: 5.w, bottom: 5.w), child: MaterialButton( @@ -122,7 +191,6 @@ class _HomePageState extends State { ]), ), ), - Container( margin: EdgeInsets.only(top: 5.w, bottom: 5.w), child: AkuMaterialButton( @@ -146,7 +214,7 @@ class _HomePageState extends State { ]), ), ), - SizedBox(width:17.w), + SizedBox(width: 17.w), ]), ), SizedBox(height: 24.w), @@ -166,121 +234,152 @@ class _HomePageState extends State { SizedBox(height: 16.w), Container( margin: EdgeInsets.only(left: 32.w, right: 32.w), + padding: EdgeInsets.only(top: 24.w), color: Color(0xFFFFFFFF), width: double.infinity, height: 163.w, - child: Column(children: [ - SizedBox( - height: 24.w, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _menuButton(Icons.wysiwyg, '一键报警', HomePage()), + _menuButton(Icons.work, '访客管理', HomePage()), + _menuButton(Icons.accessibility, '报事报修', HomePage()), + _menuButton(Icons.account_balance, '全部应用', HomePage()), + ], + ), + ), + ], + ), + ), + ), + body: ListView( + padding: EdgeInsets.all(32.w), + children: [ + Container( + //公告标题行 + width: double.infinity, + height: 45.w, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '今日公告', + style: TextStyle( + color: Color(0xFF4A4B51), + fontSize: 32.sp, + fontWeight: FontWeight.bold, ), - Row( + ), + Spacer(), + AkuButton( + //全部公告按钮 + onPressed: () {}, + child: Row( children: [ - SizedBox(width: 48.w), - Container( - width: 75.w, - height: 75.w, - child: Icon( - Icons.accessibility, - size: 75.w, + Text( + '全部公告', + style: TextStyle( + color: AppStyle.minorTextColor, + fontSize: 24.sp, + fontWeight: FontWeight.bold, ), ), - SizedBox( - width: 97.w, - ), - Container( - width: 75.w, - height: 75.w, - child: Icon( - Icons.account_balance, - size: 75.w, - ), - ), - SizedBox(width: 97.w), - Container( - width: 75.w, - height: 75.w, - child: Icon( - Icons.youtube_searched_for, - size: 75.w, - ), - ), - SizedBox(width: 97.w), - Container( - width: 75.w, - height: 75.w, - child: Icon( - Icons.wysiwyg, - size: 75.w, - ), - ), - SizedBox(width: 47.w), + Icon( + Icons.arrow_forward_ios, + size: 22.w, + color: AppStyle.minorTextColor, + ) ], ), - SizedBox(height: 8.w), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, + ), + ], + ), + ), + SizedBox(height: 16.w), + //公告栏 + Container( + color: Color(0xFFFFFFFF), + //公告栏 + width: double.infinity, + height: 172.w, + //TODO listview + ), + SizedBox(height: 32.w), + //待办事项标题行 + Container( + width: double.infinity, + height: 45.w, + child: Row( + children: [ + Text( + '待办事项', + style: TextStyle( + color: Color(0xFF4A4B51), + fontSize: 32.sp, + fontWeight: FontWeight.bold, + ), + ), + Spacer(), + AkuButton( + onPressed: () {}, + child: Row( children: [ - // SizedBox(width: 37.w), - Container( - // width:96.w, - height: 33.w, - child: Text( - '一键报警', - style: TextStyle( - color: Color(0xFF4A4B51), + Text( + '全部事项', + style: TextStyle( + color: AppStyle.minorTextColor, fontSize: 24.sp, - fontWeight: FontWeight.bold, - ), - ), + fontWeight: FontWeight.bold), ), - // SizedBox(width: 76.w), - Container( - // width:96.w, - height: 33.w, - child: Text( - '访客管理', - style: TextStyle( - color: Color(0xFF4A4B51), - fontSize: 24.sp, - fontWeight: FontWeight.bold, - ), - ), - ), - // SizedBox(width: 76.w), - Container( - // width:96.w, - height: 33.w, - child: Text( - '报事报修', - style: TextStyle( - color: Color(0xFF4A4B51), - fontSize: 24.sp, - fontWeight: FontWeight.bold, - ), - ), + Icon( + Icons.arrow_forward_ios, + size: 22.w, + color: AppStyle.minorTextColor, ), - // SizedBox(width: 76.w), - Container( - // width:96.w, - height: 33.w, - child: Text( - '全部应用', - style: TextStyle( - color: Color(0xFF4A4B51), - fontSize: 24.sp, - fontWeight: FontWeight.bold, - ), - ), - ), - // SizedBox(width: 37.w), ], ), - SizedBox(height: 23.w), + ), + ], + ), + ), + SizedBox(height: 16.w), + //待办事项栏 + Container( + width: double.infinity, + height: 449.w, + //TODO listview + ), + SizedBox(height: 24.w), + //底部信息栏 + Container( + width: double.infinity, + // height: 333.w, + child: Column( + children: [ + Row( + children: [ + _card('25', '未处理事项', Color(0xFFFF4E0D)), + AkuDiveder().verticalDivider(166.5.w), + _card('22', '处理中事项', Color(0xFFFFC40C)), + ], + ), + Row(children: [ + AkuDiveder().horizontalDivider(343.w), + AkuDiveder(isReverse: true).horizontalDivider(343.w) ]), - ), - ], + Row( + children: [ + _card('25', '已处理事项', Color(0xFF3F8FFE)), + AkuDiveder(isReverse: true).verticalDivider( + 166.5.w, + ), + _card('72', '全部事项', Color(0xFF333333)), + ], + ), + ], + ), ), - ), + ], ), ); } diff --git a/lib/ui/home/personal_draw.dart b/lib/ui/home/personal_draw.dart new file mode 100644 index 0000000..5635a57 --- /dev/null +++ b/lib/ui/home/personal_draw.dart @@ -0,0 +1,116 @@ +import 'package:aku_community_manager/provider/user_provider.dart'; +import 'package:aku_community_manager/style/app_style.dart'; +import 'package:aku_ui/common_widgets/aku_button.dart'; +import 'package:aku_ui/common_widgets/aku_round_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:provider/provider.dart'; + +class PersonalDraw extends StatefulWidget { + PersonalDraw({Key key}) : super(key: key); + + @override + _PersonalDrawState createState() => _PersonalDrawState(); +} + +class _PersonalDrawState extends State { + Widget _myListTile(IconData iconData, String text) { + return AkuButton( + onPressed: () {}, + child: Container( + width: double.infinity, + height: 96.w, + padding: EdgeInsets.only(left: 32.w, top: 28.w, bottom: 28.w), + child: Row(children: [ + Icon( + iconData, + size: 40.w, + ), + SizedBox(width: 16.w), + Text( + text, + style: TextStyle( + color: AppStyle.primaryTextColor, + fontSize: 28.sp, + ), + ), + ]), + ), + ); + } + + @override + Widget build(BuildContext context) { + final userProvider = Provider.of(context); + return Drawer( + child: ListView( + children: [ + SizedBox( + height: 80.w - 40.w + ScreenUtil().statusBarHeight, + ), + //leading + Container( + margin: EdgeInsets.only(bottom: 80.w), + width: double.infinity, + height: 72.w, + child: Row( + children: [ + SizedBox(width: 32.w), + //头像按钮 + AkuRoundButton( + height: 72.w, + onPressed: () {}, + child: CircleAvatar( + radius: 36.w, + backgroundColor: Colors.grey, + child: userProvider.isSigned ? null : null, + ), + ), + SizedBox(width: 24.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + //登录按钮 + InkWell( + onTap: () {}, + child: userProvider.isSigned + ? Text( + '李大海', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontSize: 28.sp, + fontWeight: FontWeight.bold), + ) + : Text('登录', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontSize: 28.sp, + fontWeight: FontWeight.bold)), + ), + InkWell( + onTap: () {}, + child: Row( + children: [ + Icon(Icons.location_on_outlined, size: 33.w), + Text( + '深圳华悦茂峰', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontSize: 24.sp), + ), + ], + ), + ), + ], + ), + ], + ), + ), + _myListTile(Icons.contact_page, '个人信息'), + _myListTile(Icons.supervised_user_circle, '联系客服'), + _myListTile(Icons.settings, '设置'), + ], + ), + ); + } +}