pull/1/head
张萌 3 years ago
commit 75f26e708a

@ -17,6 +17,7 @@ import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart'; import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -73,333 +74,337 @@ class _PersonalIndexState extends State<PersonalIndex>
final double _statusHeight = MediaQuery.of(context).padding.top; final double _statusHeight = MediaQuery.of(context).padding.top;
final userProvider = Provider.of<UserProvider>(context); final userProvider = Provider.of<UserProvider>(context);
return Scaffold( return AnnotatedRegion<SystemUiOverlayStyle>(
body: EasyRefresh( value: SystemUiOverlayStyle.dark,
header: MaterialHeader(), child:Scaffold(
onRefresh: () async { body: EasyRefresh(
await userProvider.updateUserInfo(); header: MaterialHeader(),
await userProvider.updateMyHouseInfo(); onRefresh: () async {
}, await userProvider.updateUserInfo();
child: Stack( await userProvider.updateMyHouseInfo();
children: [ },
Container( child: Stack(
width: double.infinity, children: [
height: 441.w, Container(
alignment: Alignment.topCenter, width: double.infinity,
decoration: BoxDecoration( height: 441.w,
image: DecorationImage( alignment: Alignment.topCenter,
image: AssetImage(R.ASSETS_IMAGES_MY_BG_PNG), decoration: BoxDecoration(
fit: BoxFit.cover, image: DecorationImage(
), image: AssetImage(R.ASSETS_IMAGES_MY_BG_PNG),
), fit: BoxFit.cover,
padding: EdgeInsets.only(top: 100.w), ),
child: Column( ),
mainAxisAlignment: MainAxisAlignment.start, padding: EdgeInsets.only(top: 100.w),
children: [ child: Column(
Row( mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Spacer(), Row(
GestureDetector( children: [
onTap: () { Spacer(),
Get.to(SettingsPage()); GestureDetector(
onTap: () {
Get.to(SettingsPage());
},
child: Container(
width: 72.w,
height: 40.w,
alignment: Alignment.center,
child: Image.asset(
R.ASSETS_ICONS_ICON_MY_SETTING_PNG,
width: 40.w,
height: 40.w),
),
),
24.wb,
],
),
MaterialButton(
padding: EdgeInsets.all(5.w),
onPressed: () {
if (!userProvider.isLogin)
Get.to(() => LoginPage());
else
Get.to(() => UserProfilePage());
}, },
child: Container( child: Container(
width: 72.w, margin: EdgeInsets.only(left: 32.w),
height: 40.w, child: Row(
alignment: Alignment.center, children: [
child: Image.asset( Hero(
R.ASSETS_ICONS_ICON_MY_SETTING_PNG, tag: 'AVATAR',
width: 40.w, child: ClipOval(
height: 40.w), child: BeeImageNetwork(
), width: 106.w,
), height: 106.w,
24.wb, imgs: UserTool.userProvider.userInfoModel
],
),
MaterialButton(
padding: EdgeInsets.all(5.w),
onPressed: () {
if (!userProvider.isLogin)
Get.to(() => LoginPage());
else
Get.to(() => UserProfilePage());
},
child: Container(
margin: EdgeInsets.only(left: 32.w),
child: Row(
children: [
Hero(
tag: 'AVATAR',
child: ClipOval(
child: BeeImageNetwork(
width: 106.w,
height: 106.w,
imgs: UserTool.userProvider.userInfoModel
?.imgList ?? ?.imgList ??
[], [],
),
),
), ),
), Container(
), margin: EdgeInsets.only(left: 16.w),
Container( child: userProvider.isLogin
margin: EdgeInsets.only(left: 16.w), ? Column(
child: userProvider.isLogin crossAxisAlignment:
? Column( CrossAxisAlignment.start,
crossAxisAlignment: children: [
CrossAxisAlignment.start, Text(
children: [ userProvider
Text( .userInfoModel?.nickName ??
userProvider '',
.userInfoModel?.nickName ?? style: TextStyle(
'', fontSize: 40.sp,
style: TextStyle( color: Colors.black
fontSize: 40.sp, .withOpacity(0.85),
color: Colors.black
.withOpacity(0.85),
),
), ),
4.hb, ),
Text( 4.hb,
'当一个新时代的有志青年', Text(
style: TextStyle( '当一个新时代的有志青年',
fontSize: 24.sp, style: TextStyle(
color: Colors.black fontSize: 24.sp,
.withOpacity(0.45), color: Colors.black
), .withOpacity(0.45),
), ),
],
)
: Text(
'登录/注册',
style: TextStyle(
fontSize: 32.sp,
color: Color(0xffad8940),
), ),
)), ],
Spacer(), )
MaterialButton( : Text(
onPressed: () async { '登录/注册',
var base = await NetUtil() style: TextStyle(
.get(SAASAPI.profile.integral.sign); fontSize: 32.sp,
if (base.success) { color: Color(0xffad8940),
await Get.dialog(ClockSuccessDialog( ),
todayIntegral: 1, tomorrowIntegral: 2)); )),
await UserTool.userProvider Spacer(),
.changeTodayClocked(); MaterialButton(
} else { onPressed: () async {
BotToast.showText(text: base.msg); var base = await NetUtil()
} .get(SAASAPI.profile.integral.sign);
}, if (base.success) {
elevation: 0, await Get.dialog(ClockSuccessDialog(
color: Colors.white, todayIntegral: 1, tomorrowIntegral: 2));
minWidth: 112.w, await UserTool.userProvider
height: 58.w, .changeTodayClocked();
shape: RoundedRectangleBorder( } else {
borderRadius: BorderRadius.circular(50.w)), BotToast.showText(text: base.msg);
child: }
},
elevation: 0,
color: Colors.white,
minWidth: 112.w,
height: 58.w,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.w)),
child:
'${UserTool.userProvider.userConfig.todayClocked ? '已签到' : '签到'}' '${UserTool.userProvider.userConfig.todayClocked ? '已签到' : '签到'}'
.text .text
.size(22.sp) .size(22.sp)
.black .black
.make(), .make(),
),
32.w.widthBox,
],
), ),
32.w.widthBox, ),
],
), ),
), Spacer(),
), Container(
Spacer(), width: 686.w,
Container( height: 120.w,
width: 686.w, alignment: Alignment.center,
height: 120.w, decoration: BoxDecoration(
alignment: Alignment.center, image: DecorationImage(
decoration: BoxDecoration( image:
image: DecorationImage(
image:
AssetImage(Assets.static.vipBackground.path)), AssetImage(Assets.static.vipBackground.path)),
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.w), topLeft: Radius.circular(16.w),
topRight: Radius.circular(16.w))), topRight: Radius.circular(16.w))),
child: Row( child: Row(
children: [ children: [
32.wb, 32.wb,
Assets.icons.vipFont.image(width: 60.w, height: 60.w), Assets.icons.vipFont.image(width: 60.w, height: 60.w),
24.wb, 24.wb,
'当前会员等级2级' '当前会员等级2级'
.text .text
.size(24.sp) .size(24.sp)
.color(Color(0xFFFFE0A9)) .color(Color(0xFFFFE0A9))
.make(), .make(),
Spacer(), Spacer(),
GestureDetector( GestureDetector(
onTap: () => Get.to(() => integralCenterPage()), onTap: () => Get.to(() => integralCenterPage()),
child: Container( child: Container(
width: 160.w, width: 160.w,
height: 58.w, height: 58.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(0xFFFFE0A9), color: Color(0xFFFFE0A9),
borderRadius: BorderRadius.circular(29.w)), borderRadius: BorderRadius.circular(29.w)),
child: '会员中心'.text.size(24.sp).black.make(), child: '会员中心'.text.size(24.sp).black.make(),
), ),
),
32.wb,
],
), ),
32.wb, ),
], ],
),
), ),
], ),
), Padding(
), padding: EdgeInsets.only(top: 450.w),
Padding( child: Column(
padding: EdgeInsets.only(top: 450.w), children: [
child: Column( Container(
children: [ width: 686.w,
Container( height: 282.w,
width: 686.w, decoration: BoxDecoration(
height: 282.w, color: Color(0xffffffff),
decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8)),
color: Color(0xffffffff), boxShadow: <BoxShadow>[
borderRadius: BorderRadius.all(Radius.circular(8)), BoxShadow(
boxShadow: <BoxShadow>[ color: Colors.grey.withOpacity(0.1),
BoxShadow( offset: Offset(1, 1),
color: Colors.grey.withOpacity(0.1), ),
offset: Offset(1, 1), ],
), ),
], margin: EdgeInsets.only(left: 32.w, right: 32.w),
), padding:
margin: EdgeInsets.only(left: 32.w, right: 32.w),
padding:
EdgeInsets.only(top: 24.w, left: 32.w, right: 32.w), EdgeInsets.only(top: 24.w, left: 32.w, right: 32.w),
child: Column( child: Column(
//mainAxisAlignment: MainAxisAlignment.center, //mainAxisAlignment: MainAxisAlignment.center,
children: [
_homeTitle('我的订单', () {
Get.to(() => OrderPage(initIndex: 0));
}, '查看全部'),
50.hb,
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
_orderButton( _homeTitle('我的订单', () {
name: '待付款', Get.to(() => OrderPage(initIndex: 0));
path: R.ASSETS_ICONS_USER_ICON_DFK_PNG, }, '查看全部'),
index: 1, 50.hb,
), Row(
_orderButton( mainAxisAlignment: MainAxisAlignment.center,
name: '待发货', crossAxisAlignment: CrossAxisAlignment.center,
path: R.ASSETS_ICONS_USER_ICON_DSH_PNG, children: [
index: 2, _orderButton(
), name: '待付款',
_orderButton( path: R.ASSETS_ICONS_USER_ICON_DFK_PNG,
name: '待收货', index: 1,
path: R.ASSETS_ICONS_USER_ICON_DPJ_PNG, ),
index: 3, _orderButton(
), name: '待发货',
_orderButton( path: R.ASSETS_ICONS_USER_ICON_DSH_PNG,
name: '已完成', index: 2,
path: R.ASSETS_ICONS_USER_ICON_SH_PNG, ),
index: 4, _orderButton(
name: '待收货',
path: R.ASSETS_ICONS_USER_ICON_DPJ_PNG,
index: 3,
),
_orderButton(
name: '已完成',
path: R.ASSETS_ICONS_USER_ICON_SH_PNG,
index: 4,
),
],
), ),
], ],
), ),
], ),
), 24.w.heightBox,
), Container(
24.w.heightBox, width: double.infinity,
Container( height: 100.w,
width: double.infinity, clipBehavior: Clip.antiAlias,
height: 100.w, decoration: BoxDecoration(
clipBehavior: Clip.antiAlias, // color: Colors.white,
decoration: BoxDecoration( borderRadius: BorderRadius.circular(16.w)),
// color: Colors.white, margin: EdgeInsets.symmetric(horizontal: 32.w),
borderRadius: BorderRadius.circular(16.w)), child: Material(
margin: EdgeInsets.symmetric(horizontal: 32.w), color: Colors.white,
child: Material( child: InkWell(
color: Colors.white, onTap: () {
child: InkWell( Get.to(() => ClockInPage());
onTap: () { },
Get.to(() => ClockInPage()); borderRadius: BorderRadius.circular(16.w),
}, child: Padding(
borderRadius: BorderRadius.circular(16.w), padding: EdgeInsets.symmetric(
child: Padding( horizontal: 32.w, vertical: 24.w),
padding: EdgeInsets.symmetric( child: Row(
horizontal: 32.w, vertical: 24.w), children: [
child: Row( '我的积分'.text.size(30.sp).black.bold.make(),
children: [ Spacer(),
'我的积分'.text.size(30.sp).black.bold.make(), // Assets.icons.intergral
Spacer(), // .image(width: 32.w, height: 32.w),
// Assets.icons.intergral // 16.w.widthBox,
// .image(width: 32.w, height: 32.w), // '123'.text.size(28.sp).black.make(),
// 16.w.widthBox, // 16.w.widthBox,
// '123'.text.size(28.sp).black.make(), Icon(
// 16.w.widthBox, CupertinoIcons.right_chevron,
Icon( size: 24.w,
CupertinoIcons.right_chevron, ),
size: 24.w, ],
), ),
], ),
), ),
), ),
), ),
), Container(
), decoration: BoxDecoration(
Container( color: Color(0xffffffff),
decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8)),
color: Color(0xffffffff), boxShadow: <BoxShadow>[
borderRadius: BorderRadius.all(Radius.circular(8)), BoxShadow(
boxShadow: <BoxShadow>[ color: Colors.grey.withOpacity(0.1),
BoxShadow( offset: Offset(1, 1),
color: Colors.grey.withOpacity(0.1), ),
offset: Offset(1, 1), ],
),
],
),
margin: EdgeInsets.all(32.w),
padding: EdgeInsets.all(32.w),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_function(
'我的房屋',
R.ASSETS_ICONS_ICON_MY_HOUSE_PNG,
() => MyHousePage(),
// () => HouseOwnersPage(
// identify: 4,
// ),
'${UserTool.userProvider.defaultHouse?.communityName ?? ''} '
'${UserTool.userProvider.defaultHouse?.buildingName ?? ''}'
'${UserTool.userProvider.defaultHouse?.unitName ?? ''}'
'${UserTool.userProvider.defaultHouse?.estateName ?? ''}',
), ),
36.hb, margin: EdgeInsets.all(32.w),
_function('我的家庭', R.ASSETS_ICONS_ICON_MY_HOUSE_PNG, padding: EdgeInsets.all(32.w),
() => MyFamilyPage(), ''), child: Column(
36.hb, mainAxisAlignment: MainAxisAlignment.center,
// _function('我的车位', R.ASSETS_ICONS_ICON_MY_CARSEAT_PNG, children: [
// () => CarParkingPage(), ''), _function(
// 36.hb, '我的房屋',
// _function('我的车', R.ASSETS_ICONS_ICON_MY_CAR_PNG, R.ASSETS_ICONS_ICON_MY_HOUSE_PNG,
// () => CarManagePage(), ''), () => MyHousePage(),
// 36.hb, // () => HouseOwnersPage(
_function('我的访客', R.ASSETS_ICONS_ICON_MY_VISITOR_PNG, // identify: 4,
() => CarManagePage(), ''), // ),
36.hb, '${UserTool.userProvider.defaultHouse?.communityName ?? ''} '
_function( '${UserTool.userProvider.defaultHouse?.buildingName ?? ''}'
'收货地址设置', '${UserTool.userProvider.defaultHouse?.unitName ?? ''}'
R.ASSETS_ICONS_ICON_MY_LOCATION_PNG, '${UserTool.userProvider.defaultHouse?.estateName ?? ''}',
() => AddressListPage( ),
36.hb,
_function('我的家庭', R.ASSETS_ICONS_ICON_MY_HOUSE_PNG,
() => MyFamilyPage(), ''),
36.hb,
// _function('我的车位', R.ASSETS_ICONS_ICON_MY_CARSEAT_PNG,
// () => CarParkingPage(), ''),
// 36.hb,
// _function('我的车', R.ASSETS_ICONS_ICON_MY_CAR_PNG,
// () => CarManagePage(), ''),
// 36.hb,
_function('我的访客', R.ASSETS_ICONS_ICON_MY_VISITOR_PNG,
() => CarManagePage(), ''),
36.hb,
_function(
'收货地址设置',
R.ASSETS_ICONS_ICON_MY_LOCATION_PNG,
() => AddressListPage(
canBack: false, canBack: false,
), ),
''), ''),
], ],
), ),
),
],
), ),
], ),
), ],
), )),
], )
)),
); );
} }
_homeTitle(String title, VoidCallback onTap, String suffixTitle) { _homeTitle(String title, VoidCallback onTap, String suffixTitle) {

@ -16,6 +16,7 @@ import 'package:aku_new_community/ui/community/community_views/my_community_view
import 'package:aku_new_community/ui/community/community_views/new_community_view.dart'; import 'package:aku_new_community/ui/community/community_views/new_community_view.dart';
import 'package:aku_new_community/ui/community/community_views/topic/topic_community_view.dart'; import 'package:aku_new_community/ui/community/community_views/topic/topic_community_view.dart';
import 'package:aku_new_community/ui/community/community_views/widgets/chat_card.dart'; import 'package:aku_new_community/ui/community/community_views/widgets/chat_card.dart';
import 'package:aku_new_community/ui/home/public_infomation/public_infomation_card.dart';
import 'package:aku_new_community/ui/home/public_infomation/public_infomation_page.dart'; import 'package:aku_new_community/ui/home/public_infomation/public_infomation_page.dart';
import 'package:aku_new_community/ui/home/public_infomation/public_information_detail_page.dart'; import 'package:aku_new_community/ui/home/public_infomation/public_information_detail_page.dart';
import 'package:aku_new_community/utils/headers.dart'; import 'package:aku_new_community/utils/headers.dart';
@ -87,7 +88,7 @@ class _CommunityPageState extends State<CommunityPage>
final appProvider = Provider.of<AppProvider>(context); final appProvider = Provider.of<AppProvider>(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
titleSpacing: 10.0, titleSpacing: 0,
title: Align( title: Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Theme( child: Theme(
@ -364,7 +365,7 @@ class _CommunityPageState extends State<CommunityPage>
), ),
Spacer(), Spacer(),
Text( Text(
DateUtil.formatDateStr(item.createDate,format: 'MM-dd'), RelativeDateFormat.format(item.createDate.toDate()),
maxLines: 2, maxLines: 2,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(

@ -273,7 +273,8 @@ class _ChatCardState extends State<ChatCard> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
32.hb, 32.hb,
widget.model.content!.text.size(32.sp).black.make(), if(!widget.model.content!.isEmptyOrNull)
widget.model.content!.text.size(32.sp).black.make(),
32.hb, 32.hb,
_renderImage(), _renderImage(),
widget.model.topicTags.isEmpty widget.model.topicTags.isEmpty

@ -156,6 +156,7 @@ class _ChatCardDetailState extends State<ChatCardDetail> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
32.hb, 32.hb,
if(!widget.model.content!.isEmptyOrNull)
widget.model.content!.text widget.model.content!.text
.size(28.sp) .size(28.sp)
.color(ktextSubColor) .color(ktextSubColor)

@ -42,10 +42,7 @@ class PublicInfomationCard extends StatelessWidget {
children: [ children: [
// Text('测试'), // Text('测试'),
Spacer(), Spacer(),
Text('发布于 ${DateUtil.formatDate( Text('发布于 ${RelativeDateFormat.format(model.createDateDT)}'),
model.createDateDT,
format: 'yyyy-MM-dd HH:mm',
)}'),
], ],
), ),
), ),
@ -64,3 +61,73 @@ class PublicInfomationCard extends StatelessWidget {
); );
} }
} }
class RelativeDateFormat {
static final num ONE_MINUTE = 60000;
static final num ONE_HOUR = 3600000;
static final num ONE_DAY = 86400000;
static final num ONE_WEEK = 604800000;
static final String ONE_SECOND_AGO = "秒前";
static final String ONE_MINUTE_AGO = "分钟前";
static final String ONE_HOUR_AGO = "小时前";
static final String ONE_DAY_AGO = "天前";
static final String ONE_MONTH_AGO = "月前";
static final String ONE_YEAR_AGO = "年前";
//
static String format(DateTime? date) {
num delta = DateTime.now().millisecondsSinceEpoch - date!.millisecondsSinceEpoch;
if (delta < 1 * ONE_MINUTE) {
num seconds = toSeconds(delta);
return (seconds <= 0 ? 1 : seconds).toInt().toString() + ONE_SECOND_AGO;
}
if (delta < 60 * ONE_MINUTE) {
num minutes = toMinutes(delta);
return (minutes <= 0 ? 1 : minutes).toInt().toString() + ONE_MINUTE_AGO;
}
if (delta < 24 * ONE_HOUR) {
num hours = toHours(delta);
return (hours <= 0 ? 1 : hours).toInt().toString() + ONE_HOUR_AGO;
}
if (delta < 48 * ONE_HOUR) {
return "昨天";
}
if (delta < 30 * ONE_DAY) {
num days = toDays(delta);
return (days <= 0 ? 1 : days).toInt().toString() + ONE_DAY_AGO;
}
if (delta < 12 * 4 * ONE_WEEK) {
num months = toMonths(delta);
return (months <= 0 ? 1 : months).toInt().toString() + ONE_MONTH_AGO;
} else {
num years = toYears(delta);
return (years <= 0 ? 1 : years).toInt().toString() + ONE_YEAR_AGO;
}
}
static num toSeconds(num date) {
return date / 1000;
}
static num toMinutes(num date) {
return toSeconds(date) / 60;
}
static num toHours(num date) {
return toMinutes(date) / 60;
}
static num toDays(num date) {
return toHours(date) / 24;
}
static num toMonths(num date) {
return toDays(date) / 30;
}
static num toYears(num date) {
return toMonths(date) / 365;
}
}

Loading…
Cancel
Save