Compare commits

..

3 Commits
master ... hmxc

@ -32,7 +32,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 32
compileSdkVersion 28
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
@ -96,7 +96,7 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.amap.api:3dmap:latest.integration'
// implementation 'com.amap.api:location:5.2.0'
implementation 'com.amap.api:location:5.2.0'
implementation 'com.android.support:multidex:2.0.1'
}

@ -4,7 +4,7 @@
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application android:label="小蜜蜂智慧小区" android:icon="@mipmap/ic_launcher" android:networkSecurityConfig="@xml/network_security_config">
<application android:name="io.flutter.app.FlutterApplication" android:label="小蜜蜂智慧小区" android:icon="@mipmap/ic_launcher" android:networkSecurityConfig="@xml/network_security_config">
<service android:name="com.amap.api.location.APSService"></service>
<meta-data android:name="com.amap.api.v2.apikey"
android:value="f6361c0537bf2d6ddb898b10618d3726"/>

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.7.10'
ext.kotlin_version = '1.5.10'
repositories {
google()
jcenter()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

@ -2,7 +2,7 @@ part 'sars_api.dart';
class API {
///HOST
static const String host = 'http://star.kaidalai.cn/';
static const String host = 'http://hmxc.kaidalai.cn';
///
static const String baseURL = '$host/api/app';
@ -28,8 +28,6 @@ class API {
static _House house = _House();
static _SarsApi sarsApi = _SarsApi();
static _Bracelet bracelet = _Bracelet();
static _Intergral intergral = _Intergral();
}
class _Bracelet {
@ -37,14 +35,6 @@ class _Bracelet {
String get data => '/user/aqg/getData';
}
class _Intergral {
///
String get sign => '/user/points/sign';
///
String get info => '/user/points/getPointsInfo';
}
class _Login {
///
String get sendSMSCode => '/login/sendMMSLogin';
@ -153,35 +143,8 @@ class _Search {
String get homeSearch => "/user/search/search";
}
class _Task {
///
String get hallList => '/user/taskRelease/list';
///
String get myTask => '/user/taskRelease/myList';
///
String get myTakeTask => '/user/taskRelease/myOrder';
///
String get publish => '/user/taskRelease/insert';
///
String get cancel => '/user/taskRelease/cancel';
///
String get take => '/user/taskRelease/access';
///
String get finish => '/user/taskRelease/finish';
///
String get confirm => '/user/taskRelease/confirm';
}
class _Manager {
_Facility facility = _Facility();
_Task task = _Task();
///
String get commiteeStaff => '/ownersCommittee/findAll';
@ -740,10 +703,6 @@ class _Pay {
///app jcook(APP)
String get jcookOrderCreateOrder => '/user/alipay/jcookOrderCreateOrder';
///app jcook
String get jcookOrderCreateByIntegral =>
'/user/points/jcookPointConvertOrder';
///jcook
String get jcookOrderCheckAlipay => '/user/alipay/jcookOrderCheckAlipay';
}

@ -31,7 +31,6 @@ import 'package:aku_new_community/ui/manager/questionnaire/questionnaire_page.da
import 'package:aku_new_community/ui/profile/car/car_manage_page.dart';
import 'package:aku_new_community/ui/profile/car_parking/car_parking_page.dart';
import 'package:aku_new_community/ui/profile/house/house_owners_page.dart';
import 'package:aku_new_community/ui/service/task_page.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:flutter/material.dart';
@ -101,7 +100,7 @@ List<AO> appObjects = [
AO('住房说明', R.ASSETS_ICONS_FUNC_ZFSM_PNG, () => HouseIntroducePage()),
AO('智慧养老', Assets.icons.provideAged.path, () => OldAgeSupportPageSimple()),
AO('周边服务', Assets.icons.nearbyService.path, null),
AO('小蜜蜂任务', Assets.icons.beeTask.path, () => TaskPage()),
AO('小蜜蜂任务', Assets.icons.beeTask.path, null),
AO('自营商城', Assets.icons.shoppingMall.path, null),
AO('邻家宠物', Assets.icons.nearbyPet.path, null),
AO('共享停车', Assets.icons.sharePark.path, null),

@ -1,11 +0,0 @@
import 'package:flutter/material.dart';
extension ColorExt on Color {
///
Color get complementary {
var r = ~this.red;
var g = ~this.green;
var b = ~this.blue;
return Color.fromARGB(this.alpha, r, g, b);
}
}

@ -190,10 +190,6 @@ class $AssetsIconsGen {
/// File path: assets/icons/change.png
AssetGenImage get change => const AssetGenImage('assets/icons/change.png');
/// File path: assets/icons/clock_circle.png
AssetGenImage get clockCircle =>
const AssetGenImage('assets/icons/clock_circle.png');
/// File path: assets/icons/clock_success.png
AssetGenImage get clockSuccess =>
const AssetGenImage('assets/icons/clock_success.png');
@ -250,13 +246,6 @@ class $AssetsIconsGen {
AssetGenImage get deviceAlarm =>
const AssetGenImage('assets/icons/device_alarm.png');
/// File path: assets/icons/edit.png
AssetGenImage get edit => const AssetGenImage('assets/icons/edit.png');
/// File path: assets/icons/environment.png
AssetGenImage get environment =>
const AssetGenImage('assets/icons/environment.png');
/// File path: assets/icons/examine.png
AssetGenImage get examine => const AssetGenImage('assets/icons/examine.png');
@ -674,10 +663,6 @@ class $AssetsIconsGen {
/// File path: assets/icons/phone.png
AssetGenImage get phone => const AssetGenImage('assets/icons/phone.png');
/// File path: assets/icons/phone_circle.png
AssetGenImage get phoneCircle =>
const AssetGenImage('assets/icons/phone_circle.png');
/// File path: assets/icons/projection_screen.png
AssetGenImage get projectionScreen =>
const AssetGenImage('assets/icons/projection_screen.png');
@ -697,9 +682,6 @@ class $AssetsIconsGen {
/// File path: assets/icons/report.png
AssetGenImage get report => const AssetGenImage('assets/icons/report.png');
/// File path: assets/icons/reward.png
AssetGenImage get reward => const AssetGenImage('assets/icons/reward.png');
/// File path: assets/icons/second_hand.png
AssetGenImage get secondHand =>
const AssetGenImage('assets/icons/second_hand.png');
@ -809,9 +791,6 @@ class $AssetsIconsGen {
AssetGenImage get tabbarUserNo =>
const AssetGenImage('assets/icons/tabbar_user_no.png');
/// File path: assets/icons/tag.png
AssetGenImage get tag => const AssetGenImage('assets/icons/tag.png');
/// File path: assets/icons/test_kingcion.png
AssetGenImage get testKingcion =>
const AssetGenImage('assets/icons/test_kingcion.png');
@ -1064,10 +1043,6 @@ class $AssetsImagesGen {
AssetGenImage get equipmentEmpty =>
const AssetGenImage('assets/images/equipment_empty.png');
/// File path: assets/images/good_detail_integral_back.png
AssetGenImage get goodDetailIntegralBack =>
const AssetGenImage('assets/images/good_detail_integral_back.png');
/// File path: assets/images/house_attestation.png
AssetGenImage get houseAttestation =>
const AssetGenImage('assets/images/house_attestation.png');

@ -4,7 +4,6 @@
// ignore_for_file: directives_ordering
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: depend_on_referenced_packages
import 'package:device_info_plus_web/device_info_plus_web.dart';
import 'package:image_picker_for_web/image_picker_for_web.dart';

@ -1,9 +1,9 @@
{
"appName": "智慧小区",
"appName": "华脉新村小区",
"@appName": {
"description": "应用名称"
},
"tempPlotName": "盛邦滨江府",
"tempPlotName": "华脉新村小区",
"@tempPlotName": {
"description": "临时使用的小区名称"
}

@ -51,7 +51,7 @@ class _MyAppState extends State<MyApp> {
},
child: ScreenUtilInit(
designSize: Size(750, 1334),
builder: (context,widget) => GetMaterialApp(
builder: () => GetMaterialApp(
onGenerateTitle: (context) => S.of(context)!.appName,
debugShowCheckedModeBanner: false,
theme: AppTheme.theme,

@ -15,8 +15,24 @@ class UserDetailModel {
String? nickName;
List<String>? estateNames;
int? nowEstateExamineId;
int? points;
bool? isSign;
UserDetailModel(
{this.id,
this.name,
this.type,
this.tel,
this.idType,
this.idNumber,
this.pwd,
this.confuse,
this.email,
this.createId,
this.createDate,
this.identity,
this.roomStatus,
this.nickName,
this.estateNames,
this.nowEstateExamineId});
UserDetailModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
@ -41,16 +57,6 @@ class UserDetailModel {
estateNames = [];
}
nowEstateExamineId = json['nowEstateExamineId'];
if (json['points'] != null) {
points = json['points'];
} else {
points = 0;
}
if (json['isSign'] != null) {
isSign = json['isSign'];
} else {
isSign = false;
}
}
Map<String, dynamic> toJson() {
@ -71,29 +77,6 @@ class UserDetailModel {
data['nickName'] = this.nickName;
data['estateNames'] = this.estateNames;
data['nowEstateExamineId'] = this.nowEstateExamineId;
data['points'] = this.points;
data['isSign'] = this.isSign;
return data;
}
UserDetailModel({
this.id,
this.name,
this.type,
this.tel,
this.idType,
this.idNumber,
this.pwd,
this.confuse,
this.email,
this.createId,
this.createDate,
this.identity,
this.roomStatus,
this.nickName,
this.estateNames,
this.nowEstateExamineId,
required this.points,
required this.isSign,
});
}

@ -4,17 +4,15 @@ part 'clocked_record_list_model.g.dart';
@JsonSerializable()
class ClockedRecordListModel {
final int id;
final int addNums;
final int serialNumber;
final String signDate;
final int day;
final String date;
final int addIntegral;
factory ClockedRecordListModel.fromJson(Map<String, dynamic> json) =>
_$ClockedRecordListModelFromJson(json);
const ClockedRecordListModel({
required this.id,
required this.addNums,
required this.serialNumber,
required this.signDate,
required this.day,
required this.date,
required this.addIntegral,
});
}

@ -9,8 +9,7 @@ part of 'clocked_record_list_model.dart';
ClockedRecordListModel _$ClockedRecordListModelFromJson(
Map<String, dynamic> json) =>
ClockedRecordListModel(
id: json['id'] as int,
addNums: json['addNums'] as int,
serialNumber: json['serialNumber'] as int,
signDate: json['signDate'] as String,
day: json['day'] as int,
date: json['date'] as String,
addIntegral: json['addIntegral'] as int,
);

@ -1,23 +0,0 @@
import 'package:aku_new_community/models/integral/clocked_record_list_model.dart';
import 'package:json_annotation/json_annotation.dart';
part 'integral_info_model.g.dart';
@JsonSerializable()
class IntegralInfoModel {
final int points;
final String rewardSetting;
final int serialNumber;
final bool isSign;
final List<ClockedRecordListModel> signRecordList;
factory IntegralInfoModel.fromJson(Map<String, dynamic> json) =>
_$IntegralInfoModelFromJson(json);
const IntegralInfoModel({
required this.points,
required this.rewardSetting,
required this.serialNumber,
required this.isSign,
required this.signRecordList,
});
}

@ -1,19 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'integral_info_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
IntegralInfoModel _$IntegralInfoModelFromJson(Map<String, dynamic> json) =>
IntegralInfoModel(
points: json['points'] as int,
rewardSetting: json['rewardSetting'] as String,
serialNumber: json['serialNumber'] as int,
isSign: json['isSign'] as bool,
signRecordList: (json['signRecordList'] as List<dynamic>)
.map(
(e) => ClockedRecordListModel.fromJson(e as Map<String, dynamic>))
.toList(),
);

@ -1,40 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
part 'hall_list_model.g.dart';
@JsonSerializable()
class HallListModel {
final int id;
final String title;
final int status;
final int type;
final int sex;
final int serviceObject;
final String content;
final String appointmentDate;
final String appointmentAddress;
final int rewardType;
final int reward;
final int createType;
final String? createName;
final String createDate;
factory HallListModel.fromJson(Map<String, dynamic> json) =>
_$HallListModelFromJson(json);
const HallListModel({
required this.id,
required this.title,
required this.status,
required this.type,
required this.sex,
required this.serviceObject,
required this.content,
required this.appointmentDate,
required this.appointmentAddress,
required this.rewardType,
required this.reward,
required this.createType,
this.createName,
required this.createDate,
});
}

@ -1,25 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'hall_list_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
HallListModel _$HallListModelFromJson(Map<String, dynamic> json) =>
HallListModel(
id: json['id'] as int,
title: json['title'] as String,
status: json['status'] as int,
type: json['type'] as int,
sex: json['sex'] as int,
serviceObject: json['serviceObject'] as int,
content: json['content'] as String,
appointmentDate: json['appointmentDate'] as String,
appointmentAddress: json['appointmentAddress'] as String,
rewardType: json['rewardType'] as int,
reward: json['reward'] as int,
createType: json['createType'] as int,
createName: json['createName'] as String?,
createDate: json['createDate'] as String,
);

@ -1,41 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
part 'my_take_task_list_model.g.dart';
@JsonSerializable()
class MyTakeTaskListModel {
final int id;
final String title;
final int status;
final int type;
final int sex;
final int serviceObject;
final String content;
final String appointmentDate;
final String appointmentAddress;
final int rewardType;
final int reward;
final int createType;
final String? createName;
final String createDate;
factory MyTakeTaskListModel.fromJson(Map<String, dynamic> json) =>
_$MyTakeTaskListModelFromJson(json);
const MyTakeTaskListModel({
required this.id,
required this.title,
required this.status,
required this.type,
required this.sex,
required this.serviceObject,
required this.content,
required this.appointmentDate,
required this.appointmentAddress,
required this.rewardType,
required this.reward,
required this.createType,
this.createName,
required this.createDate,
});
}

@ -1,25 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'my_take_task_list_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
MyTakeTaskListModel _$MyTakeTaskListModelFromJson(Map<String, dynamic> json) =>
MyTakeTaskListModel(
id: json['id'] as int,
title: json['title'] as String,
status: json['status'] as int,
type: json['type'] as int,
sex: json['sex'] as int,
serviceObject: json['serviceObject'] as int,
content: json['content'] as String,
appointmentDate: json['appointmentDate'] as String,
appointmentAddress: json['appointmentAddress'] as String,
rewardType: json['rewardType'] as int,
reward: json['reward'] as int,
createType: json['createType'] as int,
createName: json['createName'] as String?,
createDate: json['createDate'] as String,
);

@ -1,40 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
part 'my_task_list_model.g.dart';
@JsonSerializable()
class MyTaskListModel {
final int id;
final String title;
final int status;
final int type;
final int sex;
final int serviceObject;
final String content;
final String appointmentDate;
final String appointmentAddress;
final int rewardType;
final int reward;
final int createType;
final String? createName;
final String createDate;
factory MyTaskListModel.fromJson(Map<String, dynamic> json) =>
_$MyTaskListModelFromJson(json);
const MyTaskListModel({
required this.id,
required this.title,
required this.status,
required this.type,
required this.sex,
required this.serviceObject,
required this.content,
required this.appointmentDate,
required this.appointmentAddress,
required this.rewardType,
required this.reward,
required this.createType,
this.createName,
required this.createDate,
});
}

@ -1,25 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'my_task_list_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
MyTaskListModel _$MyTaskListModelFromJson(Map<String, dynamic> json) =>
MyTaskListModel(
id: json['id'] as int,
title: json['title'] as String,
status: json['status'] as int,
type: json['type'] as int,
sex: json['sex'] as int,
serviceObject: json['serviceObject'] as int,
content: json['content'] as String,
appointmentDate: json['appointmentDate'] as String,
appointmentAddress: json['appointmentAddress'] as String,
rewardType: json['rewardType'] as int,
reward: json['reward'] as int,
createType: json['createType'] as int,
createName: json['createName'] as String?,
createDate: json['createDate'] as String,
);

@ -1,11 +1,13 @@
// Dart imports:
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/constants/application_objects.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/model/community/activity_item_model.dart';
import 'package:aku_new_community/model/community/board_model.dart';
import 'package:aku_new_community/model/community/swiper_model.dart';
import 'package:aku_new_community/pages/home/widget/animate_app_bar.dart';
import 'package:aku_new_community/pages/message_center_page/message_center_page.dart';
import 'package:aku_new_community/pages/one_alarm/widget/alarm_page.dart';
import 'package:aku_new_community/pages/visitor_access_page/visitor_access_page.dart';
@ -25,16 +27,18 @@ import 'package:aku_new_community/widget/others/rectIndicator.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:badges/badges.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:card_swiper/card_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
import 'package:get/get.dart';
import 'package:jpush_flutter/jpush_flutter.dart';
import 'package:palette_generator/palette_generator.dart';
import 'package:power_logger/power_logger.dart';
import 'package:provider/provider.dart';
import 'package:velocity_x/velocity_x.dart';
import 'widget/home_search.dart';
class HomePage extends StatefulWidget {
HomePage({Key? key}) : super(key: key);
@ -58,16 +62,11 @@ class _HomePageState extends State<HomePage>
int sysCount = 0;
int sum = 0;
int _currentSwiperIndex = 0;
// ActivityItemModel? _activityItemModel;
List<ActivityItemModel> _activityItemModels = [];
List<BoardItemModel> _boardItemModels = [];
List<SwiperModel> _swiperModels = [];
SwiperController _swiperController = SwiperController();
ValueNotifier<Color> _barColor = ValueNotifier(Colors.transparent);
@override
void initState() {
super.initState();
@ -82,19 +81,12 @@ class _HomePageState extends State<HomePage>
}
_scrollController = ScrollController();
_refreshController = EasyRefreshController();
_swiperController.addListener(() {
//onChangeIndex_currentSwiperIndexindex1+1index;
_swiperBarColor((_currentSwiperIndex + 1) % 3);
});
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(statusBarColor: Colors.transparent));
}
@override
void dispose() {
_refreshController.dispose();
_scrollController?.dispose();
_swiperController.dispose();
super.dispose();
}
@ -105,58 +97,18 @@ class _HomePageState extends State<HomePage>
commentCount = appProvider.messageCenterModel.commentCount ?? 0;
sysCount = appProvider.messageCenterModel.sysCount ?? 0;
sum = commentCount + sysCount;
var head = ValueListenableBuilder(
valueListenable: _barColor,
builder: (context, Color color, child) {
return Container(
padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
decoration: BoxDecoration(
border: Border.all(width: 0, color: color),
color: color,
),
width: double.infinity,
child: child,
);
},
child: Padding(
padding: EdgeInsets.symmetric(vertical: 16.w, horizontal: 16.w),
child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
if (appProvider.location != null)
Padding(
padding: const EdgeInsets.only(right: 5),
child: Image.asset(
R.ASSETS_ICONS_ICON_MAIN_LOCATION_PNG,
width: 32.w,
height: 32.w,
),
),
Text(
appProvider.location?['city'] == null
? ''
: appProvider.location?['city'] as String? ?? '',
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 24.sp,
color: Color(0xff333333),
),
textAlign: TextAlign.center,
return Scaffold(
extendBodyBehindAppBar: true,
appBar: AnimateAppBar(
scrollController: _scrollController,
actions: [
GestureDetector(
onTap: () {
Get.to(() => BeeSearch());
},
child: Image.asset(R.ASSETS_ICONS_ICON_MAIN_FIND_PNG,
height: 40.w, width: 40.w),
),
Text(
'(${appProvider.weatherType} ${appProvider.weatherTemp}℃)',
style: TextStyle(
fontSize: 24.sp,
color: Color(0xff999999),
),
textAlign: TextAlign.center,
),
Spacer(),
// GestureDetector(
// onTap: () {
// Get.to(() => BeeSearch());
// },
// child: Image.asset(R.ASSETS_ICONS_ICON_MAIN_FIND_PNG,
// height: 40.w, width: 40.w),
// ),
Padding(
padding: EdgeInsets.only(right: 16.w, left: 12.w),
child: Badge(
@ -182,303 +134,311 @@ class _HomePageState extends State<HomePage>
height: 40.w, width: 40.w),
)),
),
]),
],
),
);
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.dark,
child: Scaffold(
extendBody: true,
extendBodyBehindAppBar: true,
body: Stack(
children: [
Column(
children: [
head,
Flexible(
child: EasyRefresh(
controller: _refreshController,
header: BeeBallPauseHeader(bgColor: _barColor),
firstRefresh: true,
onRefresh: () async {
//_activityItemModel = await CommunityFunc.activity();
_activityItemModels = await CommunityFunc.activityList();
_boardItemModels = await CommunityFunc.board();
_swiperModels = await CommunityFunc.swiper();
appProvider.getMessageCenter();
setState(() {});
},
child: CustomScrollView(
controller: _scrollController,
slivers: [
SliverToBoxAdapter(
// floatingActionButton: FloatingActionButton(
//
// child: Container(
// decoration: BoxDecoration(
// image: DecorationImage(
// fit: BoxFit.fill,
// image:
// AssetImage(R.ASSETS_ICONS_ICON_MAIN_OPEN_PNG),)
// ),
// ),
// onPressed: (){
// print('FloatingActionButton');
// },
// ),
body: Stack(
children: [
EasyRefresh(
controller: _refreshController,
header: MaterialHeader(),
firstRefresh: true,
onRefresh: () async {
//_activityItemModel = await CommunityFunc.activity();
_activityItemModels = await CommunityFunc.activityList();
_boardItemModels = await CommunityFunc.board();
_swiperModels = await CommunityFunc.swiper();
appProvider.getMessageCenter();
setState(() {});
},
child: CustomScrollView(
controller: _scrollController,
slivers: [
SliverToBoxAdapter(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
HomeSearch(),
HomeSwiper(), //
// SizedBox(height: 100.w),
Container(
padding: EdgeInsets.only(top: 24.w, bottom: 32.w),
child: getFunction(), //ApplicationView(),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: const <BoxShadow>[
BoxShadow(
color: Color(0x14000000),
blurRadius: 0,
offset: Offset(0.0, 2.0),
spreadRadius: 0.1)
],
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(28),
bottomRight: Radius.circular(28))),
)
//ApplicationBox(child: ApplicationView()),
],
),
),
SliverToBoxAdapter(
child: Container(
height: 40,
margin:
EdgeInsets.only(left: 32.w, right: 32.w, top: 24.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(8)),
boxShadow: const <BoxShadow>[
BoxShadow(
color: Color(0x14000000),
blurRadius: 4,
spreadRadius: 0.5)
],
),
child: HomeNotification(items: _boardItemModels)),
),
SliverToBoxAdapter(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
child: Container(
margin: EdgeInsets.only(top: 24.w),
padding: EdgeInsets.only(left: 32.w, top: 24.w),
width: 140,
height: 150,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(R.ASSETS_IMAGES_CARD_YELLOW_PNG),
)),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
HomeSwiper(), //
// SizedBox(height: 100.w),
Container(
padding:
EdgeInsets.only(top: 24.w, bottom: 32.w),
child: getFunction(), //ApplicationView(),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: const <BoxShadow>[
BoxShadow(
color: Color(0x14000000),
blurRadius: 0,
offset: Offset(0.0, 2.0),
spreadRadius: 0.1)
],
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(28),
bottomRight: Radius.circular(28))),
)
//ApplicationBox(child: ApplicationView()),
Text(
'访客邀请',
style: TextStyle(
color: Color(0xD9000000),
fontSize: 26.sp,
fontWeight: FontWeight.bold),
),
10.hb,
Text(
'一键分享',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
),
),
Text(
'让拜访不再是难事',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
),
),
Spacer(),
Image.asset(
R.ASSETS_ICONS_ICON_MAIN_INVITE_PNG,
width: 100.w,
height: 100.w,
),
30.hb,
],
),
),
SliverToBoxAdapter(
child: Container(
height: 40,
margin: EdgeInsets.only(
left: 32.w, right: 32.w, top: 24.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.all(Radius.circular(8)),
boxShadow: const <BoxShadow>[
BoxShadow(
color: Color(0x14000000),
blurRadius: 4,
spreadRadius: 0.5)
],
),
child: HomeNotification(items: _boardItemModels)),
),
SliverToBoxAdapter(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
child: Container(
margin: EdgeInsets.only(top: 24.w),
padding:
EdgeInsets.only(left: 32.w, top: 24.w),
width: 140,
height: 150,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
R.ASSETS_IMAGES_CARD_YELLOW_PNG),
)),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'访客邀请',
style: TextStyle(
color: Color(0xD9000000),
fontSize: 26.sp,
fontWeight: FontWeight.bold),
),
10.hb,
Text(
'一键分享',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
onTap: () {
Get.to(VisitorAccessPage());
},
),
25.wb,
Container(
margin: EdgeInsets.only(top: 24.w),
child: Column(
children: [
GestureDetector(
child: Container(
width: 190,
height: 69,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image:
AssetImage(R.ASSETS_IMAGES_CARD_PINK_PNG),
)),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
20.wb,
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
20.hb,
Text(
'一键报警',
style: TextStyle(
color: Color(0xD9000000),
fontSize: 26.sp,
fontWeight: FontWeight.bold),
),
),
Text(
'让拜访不再是难事',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
10.hb,
Text(
'提交报警位置给物业',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
),
),
),
Spacer(),
Image.asset(
R.ASSETS_ICONS_ICON_MAIN_INVITE_PNG,
width: 100.w,
height: 100.w,
),
30.hb,
],
),
],
),
Spacer(),
Image.asset(
R.ASSETS_ICONS_ICON_MAIN_POLICE_PNG,
width: 98.w,
height: 98.w,
),
20.wb,
],
),
onTap: () {
Get.to(VisitorAccessPage());
},
),
25.wb,
Container(
margin: EdgeInsets.only(top: 24.w),
child: Column(
onTap: () {
Get.to(AlarmPage());
},
),
GestureDetector(
child: Container(
margin: EdgeInsets.only(top: 20.w),
width: 190,
height: 69,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image:
AssetImage(R.ASSETS_IMAGES_CARD_BLUE_PNG),
)),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
GestureDetector(
child: Container(
width: 190,
height: 69,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
R.ASSETS_IMAGES_CARD_PINK_PNG),
)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
20.wb,
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
20.hb,
Text(
'一键报警',
style: TextStyle(
color: Color(0xD9000000),
fontSize: 26.sp,
fontWeight:
FontWeight.bold),
),
10.hb,
Text(
'提交报警位置给物业',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
),
),
],
),
Spacer(),
Image.asset(
R.ASSETS_ICONS_ICON_MAIN_POLICE_PNG,
width: 98.w,
height: 98.w,
),
20.wb,
],
20.wb,
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
20.hb,
Text(
'建议咨询',
style: TextStyle(
color: Color(0xD9000000),
fontSize: 26.sp,
fontWeight: FontWeight.bold),
),
),
onTap: () {
Get.to(AlarmPage());
},
),
GestureDetector(
child: Container(
margin: EdgeInsets.only(top: 20.w),
width: 190,
height: 69,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
R.ASSETS_IMAGES_CARD_BLUE_PNG),
)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
20.wb,
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
20.hb,
Text(
'建议咨询',
style: TextStyle(
color: Color(0xD9000000),
fontSize: 26.sp,
fontWeight:
FontWeight.bold),
),
10.hb,
Text(
'欢迎给我们提供服务意见',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
),
),
],
),
Spacer(),
Image.asset(
R.ASSETS_ICONS_ICON_MAIN_CONSULT_PNG,
width: 98.w,
height: 98.w,
),
20.wb,
],
10.hb,
Text(
'欢迎给我们提供服务意见',
style: TextStyle(
color: Color(0x73000000),
fontSize: 20.sp,
),
),
),
onTap: () {
Get.to(AdvicePage(
type: AdviceType.SUGGESTION));
},
)
],
),
Spacer(),
Image.asset(
R.ASSETS_ICONS_ICON_MAIN_CONSULT_PNG,
width: 98.w,
height: 98.w,
),
20.wb,
],
),
)
],
),
),
SliverToBoxAdapter(
child: Column(
children: [
HomeTitle(
title: '社区活动',
suffixTitle: '查看全部',
onTap: () => Get.to(() => ActivityListPage()),
),
_activityItemModels == []
? SizedBox()
: Container(
height: 400.w,
padding: EdgeInsets.only(left: 32.w),
child: ListView.separated(
padding: EdgeInsets.zero,
separatorBuilder: (context, index) {
return SizedBox(
width: 16.w,
);
},
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Container(
width: 500.w,
child: Builder(
builder: (context) {
return ActivityCard(
model: _activityItemModels[
index]);
},
),
);
},
itemCount: _activityItemModels.length,
),
),
// : ActivityCard(model: _activityItemModel)
// .pSymmetric(h: 24.w, v: 24.w),
),
onTap: () {
Get.to(AdvicePage(type: AdviceType.SUGGESTION));
},
)
],
)),
],
),
),
)
],
),
),
SliverToBoxAdapter(
child: Column(
children: [
// HomeTitle(
// title: '公共资讯',
// suffixTitle: '更多资讯',
// onTap: () async {
// final cancel = BotToast.showLoading();
// BaseModel model = await NetUtil().get(API.news.category);
// List<NewsCategoryModel>? category;
// if (model.status == true && model.data != null) {
// category = (model.data as List)
// .map((e) => NewsCategoryModel.fromJson(e))
// .toList();
// }
// cancel();
// Get.to(
// () => PublicInfomationPage(models: category ?? []));
// },
// ),
HomeTitle(
title: '社区活动',
suffixTitle: '查看全部',
onTap: () => Get.to(() => ActivityListPage()),
),
_activityItemModels == []
? SizedBox()
: Container(
height: 400.w,
padding: EdgeInsets.only(left: 32.w),
child: ListView.separated(
padding: EdgeInsets.zero,
separatorBuilder: (context, index) {
return SizedBox(
width: 16.w,
);
},
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Container(
width: 500.w,
child: Builder(
builder: (context) {
return ActivityCard(
model: _activityItemModels[index]);
},
),
);
},
itemCount: _activityItemModels.length,
),
),
// : ActivityCard(model: _activityItemModel)
// .pSymmetric(h: 24.w, v: 24.w),
],
)),
],
),
OverlayLivingBtnWidget()
],
),
),
OverlayLivingBtnWidget()
],
),
);
}
@ -487,16 +447,10 @@ class _HomePageState extends State<HomePage>
return Container(
width: double.infinity,
height: 320.w,
decoration:
BoxDecoration(border: Border.all(width: 0, color: _barColor.value)),
child: AspectRatio(
aspectRatio: 375 / 160,
child: Swiper(
key: UniqueKey(),
controller: _swiperController,
onIndexChanged: (index) async {
_currentSwiperIndex = index;
},
itemBuilder: (BuildContext context, int index) {
return getSwiperImage(_swiperModels[index]);
},
@ -533,18 +487,6 @@ class _HomePageState extends State<HomePage>
);
}
Future _swiperBarColor(int index) async {
if (_swiperModels.isNotEmpty) {
var color =
await PaletteGenerator.fromImageProvider(CachedNetworkImageProvider(
API.image(ImgModel.first(_swiperModels[index].voResourcesImgList)),
));
_barColor.value = color.dominantColor?.color ?? Colors.transparent;
} else {
_barColor.value = Colors.transparent;
}
}
Widget getSwiperImage(SwiperModel swiperModel) {
return Container(
child: FadeInImage.assetNetwork(
@ -620,62 +562,3 @@ class _HomePageState extends State<HomePage>
@override
bool get wantKeepAlive => true;
}
class BeeBallPauseHeader extends Header {
/// Key
final Key? key;
final ValueNotifier<Color> bgColor;
final LinkHeaderNotifier linkNotifier = LinkHeaderNotifier();
BeeBallPauseHeader({
this.key,
required this.bgColor,
bool enableHapticFeedback = true,
bool enableInfiniteRefresh = false,
}) : super(
extent: 70.0,
triggerDistance: 70.0,
float: false,
enableHapticFeedback: enableHapticFeedback,
enableInfiniteRefresh: enableInfiniteRefresh,
);
@override
Widget contentBuilder(
BuildContext context,
RefreshMode refreshState,
double pulledExtent,
double refreshTriggerPullDistance,
double refreshIndicatorExtent,
AxisDirection axisDirection,
bool float,
Duration? completeDuration,
bool enableInfiniteRefresh,
bool success,
bool noMore) {
linkNotifier.contentBuilder(
context,
refreshState,
pulledExtent,
refreshTriggerPullDistance,
refreshIndicatorExtent,
axisDirection,
float,
completeDuration,
enableInfiniteRefresh,
success,
noMore);
return ValueListenableBuilder(
valueListenable: bgColor,
builder: (context, Color color, child) {
return BallPulseHeaderWidget(
key: key,
color: color.withBlue(128),
backgroundColor: color,
linkNotifier: linkNotifier,
);
});
}
}

@ -1,17 +1,14 @@
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
class AnimateAppBar extends StatefulWidget with PreferredSizeWidget {
final ScrollController? scrollController;
final List<Widget>? actions;
final ValueNotifier<Color> bgColor;
AnimateAppBar(
{Key? key, this.scrollController, this.actions, required this.bgColor})
AnimateAppBar({Key? key, this.scrollController, this.actions})
: super(key: key);
@override
@ -22,57 +19,63 @@ class AnimateAppBar extends StatefulWidget with PreferredSizeWidget {
}
class _AnimateAppBarState extends State<AnimateAppBar> {
Color _bgColor = Colors.white;
@override
void initState() {
super.initState();
widget.scrollController!.addListener(() {
setState(() {
_bgColor = widget.scrollController!.offset > 30
? Colors.white
: widget.scrollController!.offset < 0
? Colors.transparent
: Colors.white
.withOpacity((widget.scrollController!.offset / 30));
});
});
}
@override
Widget build(BuildContext context) {
final appProvider = Provider.of<AppProvider>(context);
return ValueListenableBuilder(
valueListenable: widget.bgColor,
builder: (context, color, child) {
return AppBar(
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: widget.bgColor.value,
statusBarIconBrightness: Brightness.light),
titleSpacing: 10.0,
title: child,
backgroundColor: widget.bgColor.value,
actions: widget.actions,
);
},
child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
if (appProvider.location != null)
Padding(
padding: const EdgeInsets.only(right: 5),
child: Image.asset(
R.ASSETS_ICONS_ICON_MAIN_LOCATION_PNG,
width: 32.w,
height: 32.w,
return Padding(
padding: const EdgeInsets.only(top: 5),
child: AppBar(
titleSpacing: 10.0,
title: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
if (appProvider.location != null)
Padding(
padding: const EdgeInsets.only(right: 5),
child: Image.asset(
R.ASSETS_ICONS_ICON_MAIN_LOCATION_PNG,
width: 32.w,
height: 32.w,
),
),
Text(
appProvider.location?['city'] == null
? ''
: appProvider.location?['city'] as String? ?? '',
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 24.sp,
color: Color(0xff333333),
),
textAlign: TextAlign.center,
),
Text(
appProvider.location?['city'] == null
? ''
: appProvider.location?['city'] as String? ?? '',
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 24.sp,
color: Color(0xff333333),
),
textAlign: TextAlign.center,
),
Text(
'(${appProvider.weatherType} ${appProvider.weatherTemp}℃)',
style: TextStyle(
fontSize: 24.sp,
color: Color(0xff999999),
Text(
'(${appProvider.weatherType} ${appProvider.weatherTemp}℃)',
style: TextStyle(
fontSize: 24.sp,
color: Color(0xff999999),
),
textAlign: TextAlign.center,
),
textAlign: TextAlign.center,
),
]),
]),
backgroundColor: _bgColor,
actions: widget.actions,
),
);
}
}

@ -0,0 +1,592 @@
/*
* ====================================================
* package : widgets
* author : Created by nansi.
* time : 2019/5/13 1:44 PM
* remark :
* ====================================================
*/
import 'package:aku_new_community/utils/text_utils.dart';
import 'package:flutter/material.dart';
///
typedef SelectedListener = Function(int selectedIndex, FilterItemModel item);
///
typedef PopOptionHandle = Function(OptionListStatus status);
/// filterBar
typedef FilterToolBarListener = Function(bool update);
class FilterToolBarController {
late FilterResultContainerHelper helper;
late int selectedIndex;
late FilterItemModel item;
late GlobalKey _containerKey;
late GlobalKey _toolBarKey;
/// [update] sublist index
FilterToolBarListener updateToolBarState = (bool update) {};
close() {
helper.changeOptionListStatus(OptionListStatus.close);
}
get toolBarDx {
RenderBox box = _toolBarKey.currentContext?.findRenderObject()
as RenderBox; //_toolBarKey.currentContext.findRenderObject();
Offset offset = box.localToGlobal(Offset.zero);
return offset.dx;
}
double get toolBarDy {
/// toolbar top - containertop
RenderBox containerBox =
_containerKey.currentContext?.findRenderObject() as RenderBox;
RenderBox box = _toolBarKey.currentContext?.findRenderObject() as RenderBox;
Offset containerTopOffset = containerBox.localToGlobal(Offset.zero);
Offset toolBarTopOffset = box.localToGlobal(Offset.zero);
return toolBarTopOffset.dy - containerTopOffset.dy;
}
////position
// RenderBox box = _key.currentContext.findRenderObject();
// Offset offset = box.localToGlobal(Offset.zero);
//
////size
// Size size = box.size;
// print(" ---- $offset ------- $size");
}
enum OptionListStatus { open, close }
///
class FilterResultContainerHelper {
final PopOptionHandle handle;
///
late OptionListStatus status;
FilterResultContainerHelper({required this.handle});
changeOptionListStatus(OptionListStatus status) {
this.status = status;
this.handle(status);
}
}
/// FilterToolBar 使
class FilterToolBarResultContainer extends StatefulWidget {
final FilterToolBarController? controller;
final Widget? body;
const FilterToolBarResultContainer(
{GlobalKey? key, this.controller, this.body})
: assert(controller != null, "controller 不为空");
@override
State<StatefulWidget> createState() {
return _FilterToolBarResultContainerState();
}
}
class _FilterToolBarResultContainerState
extends State<FilterToolBarResultContainer> with TickerProviderStateMixin {
///
late int _lines;
int maxLines = 3;
///
double _lineHeight = 35.0;
///
double _bottomSpacing = 8.0;
///
double _topSpacing = 8.0;
///
Color _unselectedColor = Colors.grey[700]!;
/// toolbar
// double _toolBarTitleFont = 14.0;
///
double _subTitleFont = 13.0;
/// row
EdgeInsetsGeometry _subtitleRowPadding = EdgeInsets.only(left: 15, right: 15);
late AnimationController _animationController;
late Animation<double> _animation;
@override
void initState() {
_animationController =
AnimationController(vsync: this, duration: Duration(milliseconds: 150));
_lines = maxLines;
widget.controller?.helper = FilterResultContainerHelper(handle: (status) {
if (status == OptionListStatus.open) {
_buildAnimation(widget.controller!.item);
_animationController.forward();
} else {
_animationController.reset();
}
});
if (widget.key == null) {
widget.controller!._containerKey = GlobalKey();
} else {
widget.controller!._containerKey = widget.key as GlobalKey;
}
super.initState();
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
key: widget.controller!._containerKey,
child: _buildBody(context),
);
}
Stack _buildBody(BuildContext context) {
return Stack(
children: <Widget>[
/// body
Container(
height: double.infinity,
child: widget.body,
),
///
_maskView(),
widget.controller?._toolBarKey == null
? Container()
: Positioned(
top: widget.controller!.toolBarDy + 40,
left: 0,
right: 0,
bottom: 0,
child: Stack(children: [
widget.controller!.item.type == FilterItemType.list
? _buildList(context)
: Container(),
]))
],
);
}
Widget _maskView() {
double? num = widget.controller?.toolBarDy;
return widget.controller?._toolBarKey == null
? Container()
: Positioned(
top: (num as double) + 40,
left: 0,
right: 0,
bottom: 0,
child: Offstage(
child: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
widget.controller!.helper.changeOptionListStatus(
OptionListStatus.close,
);
widget.controller!.updateToolBarState(false);
_animationController.reset();
},
child: Opacity(
opacity: 0.3,
child: Container(
color: Colors.black,
),
),
),
offstage: _animation == null ||
(_animation.status == AnimationStatus.dismissed),
),
);
}
/// [widget.maxLines]
/// ,
_buildAnimation(FilterItemModel item) {
_lines =
item.subtitles!.length > maxLines ? maxLines : item.subtitles!.length;
_animation = new Tween(
begin: 0.0 - _lines * _lineHeight - _bottomSpacing - _topSpacing,
end: 0.0)
.animate(_animationController)
..addListener(() {
setState(() {
// the state that has changed here is the animation objects value
});
});
}
///
Positioned _buildList(context) {
FilterItemModel item = widget.controller!.item;
return Positioned(
top: _animation.value,
left: 0,
right: 0,
child: LimitedBox(
maxHeight: _lineHeight * _lines + _topSpacing + _bottomSpacing,
child: Container(
padding: EdgeInsets.only(bottom: _bottomSpacing, top: 5),
height: _lineHeight * item.subtitles!.length +
_bottomSpacing +
_topSpacing,
decoration: BoxDecoration(
color: Color.fromARGB(240, 255, 255, 255),
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10))),
child: MediaQuery.removePadding(
context: context,
removeTop: true,
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),
controller: PrimaryScrollController.of(context),
itemCount: item.subtitles!.length,
itemBuilder: (context, index) {
bool subTitleSelected = item.selectedSubIndex == index;
return Container(
height: _lineHeight,
child: RawMaterialButton(
onPressed: () {
widget.controller!.helper
.changeOptionListStatus(OptionListStatus.close);
widget.controller!.updateToolBarState(false);
if (item.selectedSubIndex == index) return;
item.selectedSubIndex = index;
String title = item.subtitleShort == null ||
TextUtils.isEmpty(item.subtitleShort![index])
? item.subtitles![index]
: item.subtitleShort![index];
item.title = title;
widget.controller!.updateToolBarState(true);
},
child: _sublistItem(index, item, subTitleSelected),
),
);
}),
),
),
),
);
}
/// item
Container _sublistItem(
int index, FilterItemModel item, bool subTitleSelected) {
return Container(
padding: _subtitleRowPadding,
child: Row(
children: <Widget>[
Offstage(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Icon(
Icons.check,
size: 17,
color: Colors.red,
),
),
offstage: index != item.selectedSubIndex,
),
Expanded(
child: Text(
item.subtitles![index],
style: TextStyle(
fontSize: _subTitleFont,
color: _unselectedColor,
fontWeight:
(subTitleSelected ? FontWeight.w600 : FontWeight.w400)),
)),
],
),
);
}
}
class FilterToolBar extends StatefulWidget {
FilterToolBar({
required this.titles,
required this.listener,
required this.controller,
this.selectedColor,
this.maxLines = 4,
this.trialing,
this.startWidget,
this.fontSize = 15.0,
this.height = 40,
}) : assert(listener != null, "请设置监听事件"),
assert(controller != null, "请设置controller");
final List<FilterItemModel> titles;
final Color? selectedColor;
final int maxLines;
final SelectedListener listener;
final Widget? trialing;
final Widget? startWidget;
final FilterToolBarController? controller;
final double fontSize;
final double height;
@override
State<StatefulWidget> createState() {
return _FilterToolBarState();
}
}
class _FilterToolBarState extends State<FilterToolBar>
with TickerProviderStateMixin {
Color _unselectedColor = Colors.grey[700]!;
GlobalKey _key = GlobalKey();
@override
void initState() {
super.initState();
widget.controller?.selectedIndex = widget.controller?.selectedIndex ?? 0;
widget.controller?._toolBarKey = _key;
widget.controller?.updateToolBarState = (bool update) {
// print("----- ${widget.controller.selectedIndex}");
if (update) {
widget.listener(
widget.controller!.selectedIndex, widget.controller!.item);
}
setState(() {});
};
}
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
height: widget.height,
child: _buildToolBar(),
);
}
Container _buildToolBar() {
List<Widget> items = <Widget>[];
if (widget.startWidget != null) {
items.add(SizedBox(
width: 60,
));
items.add(widget.startWidget!);
items.add(SizedBox(
width: 20,
));
}
items.addAll(_buildToolBarItem());
if (widget.trialing != null) {
items.add(widget.trialing!);
}
return Container(
key: _key,
height: 40,
decoration: BoxDecoration(
color: Colors.white,
border: Border(
top: BorderSide(color: Colors.grey[200]!, width: 0.5),
bottom: BorderSide(color: Colors.grey[200]!, width: 0.5))),
child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: items,
),
);
}
List<Expanded> _buildToolBarItem() {
return widget.titles.map((item) {
int index = widget.titles.indexOf(item);
bool selected = index == widget.controller?.selectedIndex;
Color color = (selected ? widget.selectedColor : _unselectedColor)!;
return Expanded(
child: GestureDetector(
onTap: () {
widget.controller?.item = item;
/// toolbar
if (widget.controller?.helper != null &&
widget.controller?.helper.status == OptionListStatus.open) {
widget.controller?.helper.changeOptionListStatus(
OptionListStatus.close,
);
} else {
if (item.type == FilterItemType.list) {
///
if (widget.controller?.selectedIndex == index) {
if (widget.controller?.helper != null) {
widget.controller?.helper.changeOptionListStatus(
OptionListStatus.open,
);
} else {
FlutterError("列表类型需要与 FilterToolBarResultContainer 一起使用");
}
} else {
///
widget.listener(index, item);
}
}
}
///
if (item.type == FilterItemType.double) {
if (widget.controller?.selectedIndex != index) {
item.selectedList![index] = true;
item.topSelected = item.selectedList![index];
} else {
//print(item.topSelected);
//item.topSelected = !item.topSelected;
// print(widget.titles[index].topSelected);
item.selectedList![index] = !item.selectedList![index];
item.topSelected = item.selectedList![index];
}
widget.listener(index, item);
}
///
else if (item.type == FilterItemType.normal) {
if (widget.controller?.selectedIndex == index) return;
widget.listener(index, item);
}
widget.controller?.selectedIndex = index;
setState(() {});
},
child: Container(
color: Colors.white,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(item.title,
style: TextStyle(
fontSize: widget.fontSize,
color: color,
fontWeight: FontWeight.w400)
// AppTextStyle.generate(widget.fontSize,
// color: color, fontWeight: FontWeight.w400),
),
_buildArrow(item, color, selected, index)
],
),
),
),
);
}).toList();
}
_buildArrow(FilterItemModel item, color, bool selected, int index) {
if (item.type == FilterItemType.list) {
return Icon(
selected
? (widget.controller?.helper != null &&
widget.controller?.helper.status == OptionListStatus.open
? Icons.arrow_drop_up
: Icons.arrow_drop_down)
: Icons.arrow_drop_down,
color: color,
size: 19,
);
} else if (item.type == FilterItemType.double) {
if (selected) {
return Padding(
padding: const EdgeInsets.only(left: 2.0),
child: Icon(
item.selectedList![index]
? IconData(0xe620, fontFamily: "AppIcons")
: IconData(0xe621, fontFamily: "AppIcons"),
size: 7,
color: color,
),
);
} else {
return Padding(
padding: const EdgeInsets.only(left: 2.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
IconData(0xe620, fontFamily: "AppIcons"),
size: 7,
color: _unselectedColor,
),
Icon(
IconData(0xe621, fontFamily: "AppIcons"),
size: 7,
color: _unselectedColor,
),
],
),
);
}
} else {
return Container();
}
}
}
enum FilterItemType {
///
list,
///
double,
///
normal
}
class FilterItemModel {
final FilterItemType type;
String title;
final List<String>? subtitles;
///
final List<String>? subtitleShort;
List<bool>? selectedList;
bool topSelected;
int selectedSubIndex = 0;
FilterItemModel({
required this.type,
required this.title,
this.selectedList,
this.subtitles,
this.subtitleShort,
this.topSelected = true,
}) : assert(
type == FilterItemType.list
? (subtitles != null && subtitles.length > 0)
: true,
"type为list列表项不能为空");
}

@ -0,0 +1,54 @@
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class HomeSearch extends StatefulWidget {
HomeSearch({Key? key}) : super(key: key);
@override
_HomeSearchState createState() => _HomeSearchState();
}
class _HomeSearchState extends State<HomeSearch> {
@override
Widget build(BuildContext context) {
return Container(
// decoration: BoxDecoration(
// gradient: LinearGradient(
// begin: Alignment.centerLeft,
// end: Alignment.centerRight,
// colors: [Color(0xffffd000), Color(0xffffbd00)],
// ),
// ),
color: Colors.white,
padding: EdgeInsets.only(
top: MediaQuery.of(context).padding.top,
left: 32.w,
right: 32.w,
bottom: 16.w,
),
// child: MaterialButton(
// materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
// height: 72.w,
// shape: StadiumBorder(),
// elevation: 0,
// minWidth: double.infinity,
// color: Color(0xFFF3F3F3),
// onPressed: () {
// Get.to(() => BeeSearch());
// },
// child: Row(
// children: [
// Icon(
// Icons.search,
// size: 32.w,
// color: Color(0xFF666666),
// ),
// 10.wb,
// '搜索应用'.text.size(28.sp).color(ktextSubColor).make().expand(),
// ],
// ),
// ),
);
}
}

@ -5,12 +5,9 @@ import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/integral/add_integral_config_model.dart';
import 'package:aku_new_community/models/integral/clocked_record_list_model.dart';
import 'package:aku_new_community/models/integral/integral_info_model.dart';
import 'package:aku_new_community/pages/personal/clock_in/clock_success_dialog.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/bee_back_button.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -25,38 +22,31 @@ class ClockInPage extends StatefulWidget {
}
class _ClockInPageState extends State<ClockInPage> {
IntegralInfoModel? _integralModel;
List<AddIntegralConfigModel> _configs = [];
List<AddIntegralConfigModel> _configs = [
AddIntegralConfigModel(addIntegral: 1, hasClocked: false),
AddIntegralConfigModel(addIntegral: 2, hasClocked: false),
AddIntegralConfigModel(addIntegral: 3, hasClocked: false),
AddIntegralConfigModel(addIntegral: 5, hasClocked: false),
AddIntegralConfigModel(addIntegral: 8, hasClocked: false),
AddIntegralConfigModel(addIntegral: 15, hasClocked: false),
AddIntegralConfigModel(addIntegral: 50, hasClocked: false),
];
List<ClockedRecordListModel> _records = [];
List<ClockedRecordListModel> _records = [
ClockedRecordListModel(day: 1, date: '2021-12-29 13:29:24', addIntegral: 1),
ClockedRecordListModel(day: 2, date: '2021-12-28 13:29:24', addIntegral: 2),
ClockedRecordListModel(day: 3, date: '2021-12-27 13:29:24', addIntegral: 3),
ClockedRecordListModel(day: 4, date: '2021-12-26 13:29:24', addIntegral: 5),
ClockedRecordListModel(day: 5, date: '2021-12-25 13:29:24', addIntegral: 8),
ClockedRecordListModel(
day: 6, date: '2021-12-24 13:29:24', addIntegral: 15),
ClockedRecordListModel(
day: 7, date: '2021-12-23 13:29:24', addIntegral: 50),
ClockedRecordListModel(day: 1, date: '2021-12-22 13:29:24', addIntegral: 1),
];
bool _openRemind = false; //
bool get hasClocked => _integralModel?.isSign ?? false;
Future getData() async {
var base = await NetUtil().get(API.intergral.info);
if (base.status ?? false) {
_integralModel = IntegralInfoModel.fromJson(base.data);
if (_integralModel != null) {
_records = _integralModel!.signRecordList;
_configs = _integralModel!.rewardSetting
.split(',')
.mapIndexed((currentValue, index) => AddIntegralConfigModel(
addIntegral: int.parse(currentValue),
hasClocked: index < _integralModel!.serialNumber))
.toList();
setState(() {});
}
} else {
BotToast.showText(text: base.message!);
}
}
@override
void initState() {
getData();
super.initState();
}
bool get hasClocked => _configs[0].hasClocked;
@override
Widget build(BuildContext context) {
@ -104,10 +94,7 @@ class _ClockInPageState extends State<ClockInPage> {
Text.rich(
TextSpan(children: [
'已连续签到 '.textSpan.make(),
'${_integralModel?.serialNumber ?? 0}'
.textSpan
.size(40.sp)
.make(),
'1'.textSpan.size(40.sp).make(),
''.textSpan.make(),
]),
style: TextStyle(
@ -117,9 +104,7 @@ class _ClockInPageState extends State<ClockInPage> {
),
4.hb,
Text(
'明日签到即可获得'
'${_configs.isNotEmpty ? _configs[_integralModel!.serialNumber != 7 ? _integralModel!.serialNumber : 0].addIntegral : 0}'
'积分',
'明日签到即可获得2积分',
style: TextStyle(
fontSize: 24.sp,
color: Colors.black.withOpacity(0.45),
@ -147,11 +132,7 @@ class _ClockInPageState extends State<ClockInPage> {
children: [
Assets.icons.intergral.image(width: 36.w, height: 36.w),
12.wb,
'${_integralModel?.points ?? 0}'
.text
.size(32.sp)
.white
.make(),
'123'.text.size(32.sp).white.make(),
],
),
),
@ -194,9 +175,9 @@ class _ClockInPageState extends State<ClockInPage> {
width: 72.w,
height: 40.w,
child: Switch(
value: UserTool.userProvider.userConfig.clockRemind,
value: _openRemind,
onChanged: (value) {
UserTool.userProvider.changeClockRemind();
_openRemind = value;
setState(() {});
},
)),
@ -220,15 +201,12 @@ class _ClockInPageState extends State<ClockInPage> {
onPressed: hasClocked
? null
: () async {
var base = await NetUtil().get(API.intergral.sign);
if (base.status ?? false) {
await Get.dialog(ClockSuccessDialog(
todayIntegral: 1, tomorrowIntegral: 2));
await UserTool.userProvider.changeTodayClocked();
await getData();
} else {
BotToast.showText(text: base.message!);
}
await Get.dialog(ClockSuccessDialog(
todayIntegral: _configs[0].addIntegral,
tomorrowIntegral: _configs[1].addIntegral));
_configs[0] = AddIntegralConfigModel(
addIntegral: _configs[0].addIntegral, hasClocked: true);
setState(() {});
},
elevation: 0,
color: kPrimaryColor,
@ -268,9 +246,9 @@ class _ClockInPageState extends State<ClockInPage> {
children: [
..._records
.mapIndexed((currentValue, index) => recordListTile(
currentValue.serialNumber,
currentValue.signDate,
currentValue.addNums))
currentValue.day,
currentValue.date,
currentValue.addIntegral))
.toList(),
Container(
width: double.infinity,

@ -12,9 +12,7 @@ import 'package:aku_new_community/ui/profile/car/car_manage_page.dart';
import 'package:aku_new_community/ui/profile/car_parking/car_parking_page.dart';
import 'package:aku_new_community/ui/profile/house/house_owners_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
@ -335,16 +333,10 @@ class _PersonalIndexState extends State<PersonalIndex>
Spacer(),
MaterialButton(
onPressed: () async {
var base =
await NetUtil().get(API.intergral.sign);
if (base.status ?? false) {
await Get.dialog(ClockSuccessDialog(
todayIntegral: 1, tomorrowIntegral: 2));
await UserTool.userProvider
.changeTodayClocked();
} else {
BotToast.showText(text: base.message!);
}
await Get.dialog(ClockSuccessDialog(
todayIntegral: 1, tomorrowIntegral: 2));
await UserTool.userProvider
.changeTodayClocked();
},
elevation: 0,
color: Colors.white,

@ -2,14 +2,13 @@ import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/pages/renovation_manage/renovation_manage_detail_page.dart';
import 'package:aku_new_community/pages/renovation_manage/renovation_map.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../../utils/headers.dart';
class RenovationManageCard extends StatefulWidget {
final int index;
@ -57,7 +56,8 @@ class _RenovationManageCardState extends State<RenovationManageCard> {
],
),
24.w.heightBox,
_buildTile(R.ASSETS_ICONS_ARTICLE_NAME_PNG, '小区名称',S.of(context)!.tempPlotName ),
_buildTile(R.ASSETS_ICONS_ARTICLE_NAME_PNG, '小区名称',
'${S.of(context)!.tempPlotName}'),
12.w.heightBox,
_buildTile(
R.ASSETS_ICONS_APPOINTMENT_ADDRESS_PNG,

@ -3,14 +3,13 @@ import 'dart:math';
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/pages/renovation_manage/renovation_map.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
import '../../utils/headers.dart';
class RenovationManageDetailPage extends StatefulWidget {
RenovationManageDetailPage({Key? key}) : super(key: key);
@ -199,7 +198,7 @@ class _RenovationManageDetailPageState
[
_buildInfoCard(
tag: '',
midTop: S.of(context)!.tempPlotName,
midTop: '${S.of(context)!.tempPlotName}',
midBottom: '1幢-1单元-302',
name: '业主:' + '马泽鹏',
phone: '13720183183',

@ -3,6 +3,7 @@ import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/tab_bar/bee_tab_bar.dart';
import 'package:flutter/material.dart';
@Deprecated('弃用')
class RenovationManagePage extends StatefulWidget {
RenovationManagePage({Key? key}) : super(key: key);

@ -3,6 +3,7 @@ import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/service_browse/service_browse_list_mode.dart';
import 'package:aku_new_community/pages/service_browse/service_browse_detail_page.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
@ -11,8 +12,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../../utils/headers.dart';
class ServiceBrowsePage extends StatefulWidget {
ServiceBrowsePage({Key? key}) : super(key: key);
@ -91,7 +90,11 @@ class _ServiceBrowsePageState extends State<ServiceBrowsePage> {
32.w.heightBox,
Row(
children: [
S.of(context)!.tempPlotName.text.size(20.sp).color(ktextSubColor).make(),
'${S.of(context)!.tempPlotName}'
.text
.size(20.sp)
.color(ktextSubColor)
.make(),
Spacer(),
'发布于 ${DateUtil.formatDateStr(model.createDate, format: 'MM-dd HH:mm')}'
.text

@ -26,6 +26,7 @@ class _SurroundingEnterprisesPageState
EasyRefreshController _refreshController = EasyRefreshController();
int _page = 1;
int _size = 10;
@override
void initState() {
super.initState();
@ -94,7 +95,11 @@ class _SurroundingEnterprisesPageState
Spacer(),
Row(
children: [
S.of(context)!.tempPlotName.text.size(20.sp).color(ktextThirdColor).make(),
'${S.of(context)!.tempPlotName}'
.text
.size(20.sp)
.color(ktextThirdColor)
.make(),
Spacer(),
'发布于:${model.getReleaseDate}'
.text

@ -28,9 +28,9 @@ class ActivityCard extends StatelessWidget {
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24.w),
// side: BorderSide(
// color: Colors.grey,
// ),
side: BorderSide(
color: Colors.grey,
),
),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
child: Column(
@ -77,18 +77,12 @@ class ActivityCard extends StatelessWidget {
height: 39.w,
width: 98.w,
decoration: BoxDecoration(
color: outdate
? Colors.black.withOpacity(0.06)
: Color(0x80FEBF76),
color: outdate ? Color(0xFFABABAB) : Color(0x80FEBF76),
borderRadius: BorderRadius.all(Radius.circular(4)),
),
child: outdate
? '已结束'
.text
.size(22.sp)
.color(Colors.black.withOpacity(0.25))
.make()
? '已结束'.text.size(22.sp).color(Color(0xFF666666)).make()
: '报名中'
.text
.size(22.sp)

@ -181,8 +181,8 @@ class _CommunityPageState extends State<CommunityPage>
? SizedBox()
: ListView(
children: [
// _geSearch(),
// 2.hb,
_geSearch(),
2.hb,
_hotNewsModels.isEmpty ? SizedBox() : _getInfo(),
16.hb,
_gambitModels.isEmpty ? SizedBox() : _getNews(),

@ -356,6 +356,10 @@ class _ChatCardDetailState extends State<ChatCardDetail> {
.color(Color(0xFF999999))
.make(),
32.wb,
].row(),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -363,15 +367,10 @@ class _ChatCardDetailState extends State<ChatCardDetail> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
32.hb,
widget.model!.content!.text.size(28.sp).color(ktextSubColor).make(),
32.hb,
_renderImage(),
],
).paddingOnly(left: 116.w),
32.hb,
widget.model!.content!.text.size(28.sp).color(ktextSubColor).make(),
32.hb,
_renderImage(),
Row(
children: [
widget.model!.gambitTitle?.isEmpty ?? true

@ -1,79 +0,0 @@
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/ui/market/integral/integral_sku_model.dart';
import 'package:aku_new_community/ui/market/search/good_detail_page.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class IntegralExchangePage extends StatefulWidget {
const IntegralExchangePage({Key? key}) : super(key: key);
@override
_IntegralExchangePageState createState() => _IntegralExchangePageState();
}
class _IntegralExchangePageState extends State<IntegralExchangePage> {
List<IntegralSkuModel> _models = IntegralSkuModel.examples;
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '积分商城',
body: SafeArea(
child: GridView.builder(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
itemCount: _models.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 332 / 480,
mainAxisSpacing: 16.w,
crossAxisSpacing: 24.w),
itemBuilder: (context, index) {
return _card(_models[index]);
})),
);
}
Widget _card(IntegralSkuModel model) {
return GestureDetector(
onTap: () {
Get.to(() => GoodDetailPage(
goodId: model.goodId,
integral: model.integral,
integralGood: true,
));
},
child: Column(
children: [
Container(
color: Color(0xFFF9F9F),
child: Image.network(model.imgPath, width: 332.w, height: 332.w)),
16.w.heightBox,
'${model.skuName}'
.text
.size(28.sp)
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.color(Color(0xFF4F4F4F))
.make(),
16.w.heightBox,
Row(
children: [
Assets.icons.intergral.image(width: 24.w, height: 24.w),
4.w.widthBox,
'${model.integral}'.text.size(24.sp).color(Colors.red).make(),
Spacer(),
'已售${model.sold}'
.text
.size(24.sp)
.color(Color(0xFFBDBDBD))
.make(),
],
)
],
),
);
}
}

@ -1,80 +0,0 @@
class IntegralSkuModel {
final String imgPath;
final String skuName;
final int integral;
final int sold;
final int skuId;
final int goodId;
static List<IntegralSkuModel> get examples => [
IntegralSkuModel(
imgPath: 'http://oss.jcook.com.cn/file5/1509704/1509704_0.jpg',
skuName: '3M 耳塞 降噪睡眠 弹性舒适1100耳塞一副',
integral: 1050,
skuId: 1509704,
goodId: 438052,
sold: 89),
IntegralSkuModel(
imgPath: 'http://oss.jcook.com.cn/file5/5059614/5059614_0.jpg',
skuName: '一品巷子 休闲零食 泡面搭档 卤蛋32g/个',
integral: 1060,
skuId: 5059614,
goodId: 451850,
sold: 156),
IntegralSkuModel(
imgPath: 'http://oss.jcook.com.cn/file5/1146553/1146553_0.jpg',
skuName: '齐心(Comix)美工刀/裁纸刀/壁纸刀工具 小号9mm 颜色随机',
integral: 1750,
skuId: 1146553,
goodId: 435913,
sold: 34),
IntegralSkuModel(
imgPath:
'http://oss.jcook.com.cn/file5/100014750256/100014750256_0.jpg',
skuName: '公牛(BULL)118型开关插座布线盒 六孔插座暗盒墙插底盒2位暗盒H14适用120mm面板',
integral: 1910,
skuId: 100014750256,
goodId: 562798,
sold: 49),
IntegralSkuModel(
imgPath: 'http://oss.jcook.com.cn/file5/1033528/1033528_0.jpg',
skuName: '广博GuangBo0.5mm黑色中性笔 经典子弹头签字笔 水笔 12支装',
integral: 6250,
skuId: 1033528,
goodId: 435216,
sold: 298),
IntegralSkuModel(
imgPath:
'http://oss.jcook.com.cn/file5/100017573108/100017573108_0.jpg',
skuName: '惠寻 100ml小白鞋清洁剂擦洗鞋清洗剂 1瓶',
integral: 6250,
skuId: 100017573108,
goodId: 572690,
sold: 74),
IntegralSkuModel(
imgPath:
'http://oss.jcook.com.cn/file4/100009789209/100009789209_0.jpg',
skuName: '东园(TONGGARDEN)蚕豆 泰国进口 兰花豆盐焗味每日坚果炒货休闲零食非油炸',
integral: 6250,
skuId: 10009789209,
goodId: 535330,
sold: 330),
IntegralSkuModel(
imgPath:
'http://oss.jcook.com.cn/file5/100010670794/100010670794_0.jpg',
skuName: '伊利 优酸乳 蓝莓味 250g*24盒/箱 乳饮料 聚会乐享 春节年货礼盒装早餐伴侣',
integral: 35680,
skuId: 100010670794,
goodId: 539334,
sold: 25),
];
const IntegralSkuModel({
required this.imgPath,
required this.skuName,
required this.integral,
required this.sold,
required this.skuId,
required this.goodId,
});
}

@ -1,10 +1,7 @@
// import 'package:aku_new_community/base/base_style.dart';
import 'dart:ui' as ui;
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/model/good/category_model.dart';
import 'package:aku_new_community/model/good/market_swiper_model.dart';
@ -13,8 +10,6 @@ import 'package:aku_new_community/models/market/goods_popular_model.dart';
import 'package:aku_new_community/models/market/order/goods_home_model.dart';
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/ui/community/community_func.dart';
import 'package:aku_new_community/ui/market/integral/integral_exchange_page.dart';
import 'package:aku_new_community/ui/market/integral/integral_sku_model.dart';
import 'package:aku_new_community/ui/market/search/good_detail_page.dart';
import 'package:aku_new_community/ui/market/search/search_goods_page.dart';
import 'package:aku_new_community/ui/market/shop_car/shop_car_page.dart';
@ -24,12 +19,14 @@ import 'package:aku_new_community/utils/network/base_list_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/home/home_sliver_app_bar.dart';
import 'package:aku_new_community/widget/others/rectIndicator.dart';
import 'package:card_swiper/card_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:velocity_x/velocity_x.dart';
import 'category/new_category_page.dart';
import 'market_home_goods_card.dart';
@ -46,7 +43,6 @@ class _MarketPageState extends State<MarketPage>
with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {
late EasyRefreshController _refreshController;
late ScrollController _sliverListController;
late ScrollController _horListController;
GlobalKey<HomeSliverAppBarState> _sliverAppBarGlobalKey = GlobalKey();
GlobalKey<AnimatedHomeBackgroundState> _animatedBackgroundState = GlobalKey();
int _pageNum = 1;
@ -77,8 +73,6 @@ class _MarketPageState extends State<MarketPage>
List<GoodsPopularModel> _goodsPopularModelList = [];
List<IntegralSkuModel> get _integralModelList => IntegralSkuModel.examples;
int? orderBySalesVolume;
int? orderByPrice;
@ -130,10 +124,10 @@ class _MarketPageState extends State<MarketPage>
_goodsPopularModelList.add(
GoodsPopularModel(id: 0, skuName: '', mainPhoto: '', viewsNum: 0));
}
_refreshController = EasyRefreshController();
_sliverListController = ScrollController();
_horListController = ScrollController();
_tabController = TabController(initialIndex: 0, length: 3, vsync: this);
_refreshController = EasyRefreshController();
///appbar refresh
Future.delayed(Duration(milliseconds: 0), () async {
@ -156,14 +150,11 @@ class _MarketPageState extends State<MarketPage>
final mediaWidth = MediaQuery.of(context).size.width;
return Scaffold(
body: EasyRefresh.custom(
body: EasyRefresh(
firstRefresh: false,
enableControlFinishLoad: false,
header: BallPulseHeader(
backgroundColor: Colors.red.withOpacity(0.8), color: Colors.white),
header: MaterialHeader(),
footer: MaterialFooter(),
topBouncing: false,
scrollController: _sliverListController,
controller: _refreshController,
onRefresh: () async {
_refresh();
@ -176,7 +167,7 @@ class _MarketPageState extends State<MarketPage>
}
setState(() {});
},
slivers: _buildBody(context),
child: _buildBody(context),
),
);
}
@ -200,7 +191,7 @@ class _MarketPageState extends State<MarketPage>
setState(() {});
}
List<Widget> _buildBody(BuildContext context) {
Widget _buildBody(BuildContext context) {
final normalTypeButton = MaterialButton(
onPressed: () async {
_orderType = OrderType.NORMAL;
@ -301,37 +292,39 @@ class _MarketPageState extends State<MarketPage>
height: 80.w,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
);
return <Widget>[
HomeSliverAppBar(
key: _sliverAppBarGlobalKey,
actions: _actionsWidget(),
title: _buildTitle(),
backgroundColor: Colors.red,
expandedHeight: MessageHeight +
bannerHeight +
buttonsHeight +
searchHeight +
tabBarHeight +
ScreenUtil().statusBarHeight +
kToolbarHeight +
280.w +
172 * 2.w,
flexibleSpace: _flexibleSpaceBar(context),
bottom: PreferredSize(
preferredSize: Size.fromHeight(tabBarHeight),
child: _goodsTitle(
normalTypeButton,
salesTypeButton,
priceButton,
))),
SliverPadding(
padding: EdgeInsets.all(10.w),
),
SliverPadding(
padding: EdgeInsets.only(left: 20.w, right: 20.w),
sliver: buildSliverGrid(),
),
];
return CustomScrollView(
controller: _sliverListController,
slivers: <Widget>[
HomeSliverAppBar(
key: _sliverAppBarGlobalKey,
actions: _actionsWidget(),
title: _buildTitle(),
backgroundColor: Colors.red,
expandedHeight: MessageHeight +
bannerHeight +
buttonsHeight +
searchHeight +
tabBarHeight +
ScreenUtil().statusBarHeight +
kToolbarHeight +
280.w,
flexibleSpace: _flexibleSpaceBar(context),
bottom: PreferredSize(
preferredSize: Size.fromHeight(tabBarHeight),
child: _goodsTitle(
normalTypeButton,
salesTypeButton,
priceButton,
))),
SliverPadding(
padding: EdgeInsets.all(10.w),
),
SliverPadding(
padding: EdgeInsets.only(left: 20.w, right: 20.w),
sliver: buildSliverGrid(),
),
],
);
}
SliverGrid buildSliverGrid() {
@ -481,8 +474,6 @@ class _MarketPageState extends State<MarketPage>
_buttonTitle(),
20.hb,
_recommend(),
20.hb,
_integralMarket(),
],
),
],
@ -490,109 +481,6 @@ class _MarketPageState extends State<MarketPage>
);
}
Widget _integralMarket() {
return Container(
width: 720.w,
height: 172 * 2.w,
padding: EdgeInsets.all(16.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(24.w),
),
child: Column(
children: [
Row(
children: [
'积分商城'.richText.size(28.sp).italic.bold.black.make(),
8.wb,
Text(
'限时兑换',
style: TextStyle(
fontSize: 24.sp,
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic,
foreground: Paint()
..shader = ui.Gradient.linear(
Offset(150, 690), Offset(150, 695), [
Color(0xFFF94B4B),
Color(0xFFF7B86F),
])),
),
Spacer(),
GestureDetector(
onTap: () {
Get.to(() => IntegralExchangePage());
},
child: Row(
children: [
'查看更多'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
4.wb,
Icon(
CupertinoIcons.chevron_right,
size: 20.w,
color: Colors.black.withOpacity(0.45),
)
],
),
)
],
),
18.hb,
Flexible(
child: ListView.separated(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
controller: _horListController,
itemBuilder: (context, index) {
return _horizontalListCard(_integralModelList[index]);
},
separatorBuilder: (_, __) {
return 24.wb;
},
itemCount: 4),
),
],
),
);
}
Widget _horizontalListCard(IntegralSkuModel model) {
return GestureDetector(
onTap: () {},
child: SizedBox(
width: 148.w,
child: Column(
children: [
Image.network(
model.imgPath,
width: 148.w,
height: 148.w,
),
'${model.skuName}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.make(),
10.hb,
Row(
children: [
Assets.icons.intergral.image(width: 24.w, height: 24.w),
4.wb,
'${model.integral}'.text.size(24.sp).color(Colors.red).make()
],
)
],
),
),
);
}
geSearch() {
return Container(
margin: EdgeInsets.symmetric(horizontal: 24.w),

@ -8,7 +8,7 @@ import 'package:aku_new_community/ui/market/order/my_order_detail_page.dart';
import 'package:aku_new_community/ui/market/order/my_order_evaluation_page.dart';
import 'package:aku_new_community/ui/market/order/my_order_func.dart';
import 'package:aku_new_community/ui/market/order/my_order_refund_page.dart';
import 'package:aku_new_community/ui/market/order/receive_success.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:flutter/material.dart';
@ -16,8 +16,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../../../utils/headers.dart';
class MyOrderCard extends StatefulWidget {
final MyOrderListModel model;
final VoidCallback callRefresh;
@ -113,6 +111,16 @@ class _MyOrderCardState extends State<MyOrderCard> {
.make()
],
),
// 12.w.heightBox,
// Row(
// children: [
// ('${widget.model.levelTwoCategory}')
// .text
// .size(24.sp)
// .color(ktextSubColor)
// .make()
// ],
// ),
],
),
).expand()
@ -168,11 +176,8 @@ class _MyOrderCardState extends State<MyOrderCard> {
CardBottomButton.yellow(
text: '确认收货',
onPressed: () async {
var re = await MyOrderFunc.confirmReceive(widget.model.id);
await MyOrderFunc.confirmReceive(widget.model.id);
widget.callRefresh();
if (re) {
Get.to(() => ReceiveSuccess());
}
}),
].sepWidget(separate: 24.w.widthBox);
case 4:

@ -6,10 +6,9 @@ import 'package:aku_new_community/utils/network/net_util.dart';
class MyOrderFunc {
///
static Future<bool> confirmReceive(int goodsAppointmentId) async {
var result = await NetUtil().get(API.market.confirmReceive,
static Future confirmReceive(int goodsAppointmentId) async {
await NetUtil().get(API.market.confirmReceive,
params: {"goodsAppointmentId": goodsAppointmentId}, showMessage: true);
return result.status ?? false;
}
///退

@ -3,7 +3,6 @@ import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/order/order_list_model.dart';
import 'package:aku_new_community/pages/life_pay/pay_finish_page.dart';
import 'package:aku_new_community/pages/life_pay/pay_util.dart';
import 'package:aku_new_community/ui/market/order/receive_success.dart';
import 'package:aku_new_community/ui/market/search/settlementGoodsDTO.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
@ -170,10 +169,7 @@ class _OrderCardState extends State<OrderCard> {
});
if (baseModel.status ?? false) {
BotToast.showText(text: '收货成功');
Get.off(() => ReceiveSuccess(
integralGood: widget.model.payType == 10,
integral: widget.model.payPrice!.toInt(),
));
Get.back();
widget.callRefresh();
}
cancel();

@ -1,109 +0,0 @@
import 'package:aku_new_community/pages/tab_navigator.dart';
import 'package:aku_new_community/ui/profile/order/order_page.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class ReceiveSuccess extends StatefulWidget {
final bool integralGood;
final int? integral;
const ReceiveSuccess({Key? key, this.integralGood = false, this.integral})
: super(key: key);
@override
_ReceiveSuccessState createState() => _ReceiveSuccessState();
}
class _ReceiveSuccessState extends State<ReceiveSuccess> {
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '订单结果',
body: SafeArea(
child: Center(
child: Column(
children: [
Container(
width: 56.w,
height: 56.w,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(28.w),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0xFFE52E2E), Color(0xFFF58123)],
),
),
child: Icon(
CupertinoIcons.check_mark,
size: 42.w,
color: Colors.white,
),
),
24.w.heightBox,
'收货成功'.text.size(32.sp).color(Colors.black).make(),
widget.integral != null
? Column(
children: [
8.w.heightBox,
'已获得${widget.integral}积分'
.text
.size(28.sp)
.color(Colors.red)
.make(),
48.w.heightBox,
],
)
: Column(
children: [
8.w.heightBox,
'本单已享受积分兑换不予返还积分'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.25))
.make(),
32.w.heightBox,
],
),
Row(
children: [
MaterialButton(
onPressed: () {
Get.offAll(() => TabNavigator());
},
color: Colors.white,
minWidth: 168.w,
height: 68.w,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(34.w),
side: BorderSide(color: Colors.red),
),
child: '返回首页'.text.size(28.sp).color(Colors.red).make(),
),
24.w.widthBox,
MaterialButton(
onPressed: () {
Get.off(() => OrderPage(initIndex: 3));
},
color: Colors.white,
minWidth: 168.w,
height: 68.w,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(34.w),
side: BorderSide(color: Colors.red),
),
child: '查看详情'.text.size(28.sp).color(Colors.red).make(),
)
],
)
],
),
)),
);
}
}

@ -1,7 +1,4 @@
import 'dart:async';
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/good/good_detail_model.dart';
import 'package:aku_new_community/model/user/adress_model.dart';
import 'package:aku_new_community/pages/personal/address/address_list_page.dart';
@ -11,7 +8,6 @@ import 'package:aku_new_community/ui/market/search/search_func.dart';
import 'package:aku_new_community/ui/market/search/submit_order_page_normal.dart';
import 'package:aku_new_community/ui/market/shop_car/shop_car_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
@ -24,15 +20,8 @@ import 'good_detail_bottomSheet.dart';
class GoodDetailPage extends StatefulWidget {
final int goodId;
final bool integralGood;
final int integral;
GoodDetailPage({
Key? key,
required this.goodId,
this.integral = 0,
this.integralGood = false,
}) : super(key: key);
GoodDetailPage({Key? key, required this.goodId}) : super(key: key);
@override
_GoodDetailPageState createState() => _GoodDetailPageState();
@ -40,6 +29,7 @@ class GoodDetailPage extends StatefulWidget {
class _GoodDetailPageState extends State<GoodDetailPage> {
late EasyRefreshController _refreshController;
bool _showList = true;
late PageController _pageController;
int _currentIndex = 0;
@ -49,29 +39,16 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
AddressModel? _addressModel;
List _imageList = [];
DateTime _deadline = DateTime(2022, 4, 17, 0, 0, 0, 0, 0).toUtc();
int get days => _deadline.difference(DateTime.now().toUtc()).inDays;
int get hours =>
_deadline.difference(DateTime.now().toUtc()).inHours - days * 24;
int get mins =>
_deadline.difference(DateTime.now().toUtc()).inMinutes -
days * 1440 -
hours * 60;
int get seconds => (_deadline.difference(DateTime.now().toUtc()).inSeconds -
days * 86400 -
hours * 3600 -
mins * 60);
Timer? _timer;
@override
void initState() {
final appProvider = Provider.of<AppProvider>(Get.context!);
super.initState();
// Future.delayed(Duration(milliseconds: 0), () async {
// _imageList = await SearchFunc.getGoodDetailImage(widget.goodId);
// setState(() {
//
// });
// });
_pageController = PageController();
_sliverListController = ScrollController();
_refreshController = EasyRefreshController();
@ -80,11 +57,6 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
} else {
_addressModel = null;
}
if (widget.integralGood) {
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {});
});
}
}
@override
@ -92,19 +64,21 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
_refreshController.dispose();
_pageController.dispose();
_sliverListController.dispose();
_timer?.cancel();
_timer == null;
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '',
titleSpacing: 0,
bgColor: Color(0xFFF9F9F9),
bodyColor: Color(0xFFF9F9F9),
// title: Row(
// children: [
// ],
// ),
bottomNavi: _onload ? SizedBox() : _bottomButton(),
body: Stack(
children: [
EasyRefresh(
@ -117,6 +91,7 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
if (_goodDetail != GoodDetailModel.fail()) {
_onload = false;
}
setState(() {});
},
child: _onload ? SizedBox() : _buildBody(context)),
@ -154,8 +129,8 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
return Column(
children: [
_imageView(_goodDetail!.goodsDetailImageVos ?? []),
widget.integralGood ? _integralExchange() : 20.hb,
widget.integralGood ? _integralGoodInfo() : _goodInfo(),
20.hb,
_goodInfo(),
20.hb,
_address(context),
20.hb,
@ -164,133 +139,6 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
);
}
Widget _integralExchange() {
return Container(
width: double.infinity,
height: 152.w,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(Assets.images.goodDetailIntegralBack.path))),
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
child: Row(
children: [
Assets.icons.intergral.image(width: 40.w, height: 40.w),
8.w.widthBox,
'${widget.integral}'.text.size(40.sp).color(Colors.white).make(),
Spacer(),
BeeDivider.vertical(
indent: 20.w,
endIndent: 20.w,
),
24.wb,
Column(
children: [
SizedBox(
width: 272.w,
child: Text(
'限时兑换',
style: TextStyle(
fontStyle: FontStyle.italic,
color: Colors.white,
fontSize: 32.sp,
fontWeight: FontWeight.bold,
),
),
),
8.hb,
Row(
children: [
'距结束'.text.size(24.sp).color(Colors.white).make(),
16.wb,
_timerContainer(days),
8.wb,
''.text.size(24.sp).white.make(),
8.wb,
_timerContainer(hours),
8.wb,
':'.text.white.size(24.sp).make(),
8.wb,
_timerContainer(mins),
8.wb,
':'.text.white.size(24.sp).make(),
8.wb,
_timerContainer(seconds),
],
),
],
)
],
),
);
}
Widget _timerContainer(int num) {
return Container(
width: 27.w,
height: 27.w,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.white, Colors.white.withOpacity(0.5)])),
child: num.text.size(20.sp).color(Color(0xFFE52E2E)).make(),
);
}
_integralGoodInfo() {
return Container(
padding: EdgeInsets.all(20.w),
margin: EdgeInsets.symmetric(horizontal: 20.w),
width: double.infinity,
// height: 256.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(24.w)),
color: Colors.white),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 16.w),
height: 100.w,
width: double.infinity,
child: Text(
(_goodDetail!.skuName ?? ''),
style: TextStyle(
fontSize: 36.sp,
fontWeight: FontWeight.bold,
color: ktextPrimary),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
),
_getIcon(_goodDetail!.kind ?? 0),
24.hb,
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
16.wb,
'原价:¥'.text.color(Color(0xFFBBBBBB)).size(24.sp).make(),
Text(
_goodDetail!.sellPrice == null
? ''
: (_goodDetail!.sellPrice!).toStringAsFixed(2),
style: TextStyle(
fontSize: 24.sp,
decoration: TextDecoration.lineThrough,
decorationThickness: 2,
decorationStyle: TextDecorationStyle.solid,
color: Color(0xFFBBBBBB)),
),
],
),
],
),
);
}
_goodInfo() {
return Container(
padding: EdgeInsets.all(20.w),
@ -601,7 +449,10 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
blurRadius: 0, //
spreadRadius: 0 //
)
]),
]
// border: Border(top:BorderSide( width: 2.w,
// color: kPrimaryColor,))
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
@ -683,8 +534,6 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
} else {
Get.to(() => SubmitOrderNormalPage(
goodModel: _goodDetail!,
integralGood: widget.integralGood,
integral: widget.integral,
));
}
},

@ -1,6 +1,6 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/good/good_detail_model.dart';
import 'package:aku_new_community/model/order/create_order_model.dart';
import 'package:aku_new_community/model/user/adress_model.dart';
@ -15,26 +15,19 @@ import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/end_button.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:velocity_x/velocity_x.dart';
class SubmitOrderNormalPage extends StatefulWidget {
final GoodDetailModel goodModel;
final bool integralGood;
final int? integral;
SubmitOrderNormalPage(
{Key? key,
required this.goodModel,
this.integralGood = false,
this.integral})
: assert(!integralGood || integral != null),
super(key: key);
SubmitOrderNormalPage({Key? key, required this.goodModel}) : super(key: key);
@override
_SubmitOrderNormalPageState createState() => _SubmitOrderNormalPageState();
@ -102,127 +95,49 @@ class _SubmitOrderNormalPageState extends State<SubmitOrderNormalPage> {
20.hb,
_goodCard(widget.goodModel),
20.hb,
if (!widget.integralGood) _priceView(),
_priceView(),
20.hb,
widget.integralGood ? _integralTile() : _payWay(),
_payWay(),
20.hb,
],
),
bottomNavi: widget.integralGood ? _integralBottom() : _normalBottom(),
);
}
Container _integralBottom() {
return Container(
width: double.infinity,
height: 120.w,
color: Colors.white,
child: Row(
children: [
if (widget.integralGood)
Row(
children: [
20.w.widthBox,
'应付积分:'.text.size(32.sp).color(Colors.black).bold.make(),
24.w.widthBox,
Assets.icons.intergral.image(width: 40.w, height: 40.w),
8.w.widthBox,
widget.integral
.toString()
.text
.size(28.sp)
.color(Colors.red)
.make(),
],
),
Spacer(),
EndButton(
onPressed: () async {
if (_addressModel == null) {
BotToast.showText(text: '请先选择地址');
}
Function cancel = BotToast.showLoading();
BaseModel baseModel = await NetUtil()
.post(API.pay.jcookOrderCreateByIntegral, params: {
"addressId": _addressModel!.id!,
"settlementGoodsDTOList":
_goodsList.map((v) => v.toJson()).toList(),
"payType": 10, //
"payPrice": _allPrice,
'points': widget.integral,
});
if (baseModel.status ?? false) {
Get.off(() => OrderPage(initIndex: 2));
}
cancel();
},
text: '提交订单'.text.size(32.sp).color(Colors.white).make()),
10.widthBox,
],
),
);
}
Container _normalBottom() {
return Container(
width: double.infinity,
height: 120.w,
color: Colors.white,
child: Row(
children: [
Spacer(),
EndButton(
onPressed: () async {
if (_addressModel == null) {
BotToast.showText(text: '请先选择地址');
}
Function cancel = BotToast.showLoading();
BaseModel baseModel = await NetUtil()
.post(API.pay.jcookOrderCreateOrder, params: {
"addressId": _addressModel!.id!,
"settlementGoodsDTOList":
_goodsList.map((v) => v.toJson()).toList(),
"payType": 1, //
"payPrice": _allPrice
});
if (baseModel.status ?? false) {
bool result = await PayUtil().callAliPay(
baseModel.message!, API.pay.jcookOrderCheckAlipay);
if (result) {
Get.off(() => OrderPage(initIndex: 2));
} else {
///
Get.off(() => OrderPage(initIndex: 1));
bottomNavi: Container(
width: double.infinity,
height: 120.w,
color: Colors.white,
child: Row(
children: [
Spacer(),
EndButton(
onPressed: () async {
if (_addressModel == null) {
BotToast.showText(text: '请先选择地址');
}
}
cancel();
},
text: '提交订单'.text.size(32.sp).color(Colors.white).make()),
10.widthBox,
],
),
);
}
Widget _integralTile() {
return Container(
width: 710.w,
height: 96.w,
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(24.w)),
child: Row(
children: [
Assets.icons.intergral.image(width: 40.w, height: 40.w),
8.w.widthBox,
'当前积分'.text.size(28.sp).color(Color(0xFF4F4F4F)).make(),
Spacer(),
(UserTool.userProvider.userDetailModel!.points ?? 0)
.text
.size(28.sp)
.color(Colors.red)
.make(),
],
Function cancel = BotToast.showLoading();
BaseModel baseModel = await NetUtil()
.post(API.pay.jcookOrderCreateOrder, params: {
"addressId": _addressModel!.id!,
"settlementGoodsDTOList":
_goodsList.map((v) => v.toJson()).toList(),
"payType": 1, //
"payPrice": _allPrice
});
if (baseModel.status ?? false) {
bool result = await PayUtil().callAliPay(
baseModel.message!, API.pay.jcookOrderCheckAlipay);
if (result) {
Get.off(() => OrderPage(initIndex: 2));
} else {
///
Get.off(() => OrderPage(initIndex: 1));
}
}
cancel();
},
text: '提交订单'.text.size(32.sp).color(Colors.white).make()),
10.widthBox,
],
),
),
);
}
@ -393,6 +308,17 @@ class _SubmitOrderNormalPageState extends State<SubmitOrderNormalPage> {
)
: SizedBox(),
16.hb,
// Row(
// children: [
// Spacer(),
// '(小提示:京东自营商品加入购物车后一起下单,运费会更划算)'
// .text
// .size(18.sp)
// .color(Color(0xFFBBBBBB))
// .make(),
// ],
// ),
//16.hb,
Row(
children: [
Spacer(),
@ -595,13 +521,8 @@ class _SubmitOrderNormalPageState extends State<SubmitOrderNormalPage> {
),
bottom,
Spacer(),
if (!widget.integralGood)
Column(
children: [
price,
30.hb,
],
),
price,
30.hb,
],
),
);

@ -1,174 +0,0 @@
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/task/hall_list_model.dart';
import 'package:aku_new_community/ui/service/hall/hall_detail_page.dart';
import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../task_func.dart';
class HallCard extends StatelessWidget {
final HallListModel model;
final VoidCallback refresh;
const HallCard({Key? key, required this.model, required this.refresh})
: super(key: key);
@override
Widget build(BuildContext context) {
var head = Row(
children: [
Container(
width: 100.w,
height: 50.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFFF7E6),
borderRadius: BorderRadius.circular(8.w),
),
child: '#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(),
),
Spacer(),
Assets.icons.intergral.image(width: 24.w, height: 24.w),
8.w.widthBox,
'${model.reward}'.text.size(32.sp).color(Colors.red).make()
],
);
return GestureDetector(
onTap: () {
Get.to(() => HallDetailPage(model: model));
},
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
head,
34.w.heightBox,
Row(
children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${DateUtil.formatDateStr(model.appointmentDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
20.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${model.appointmentAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox,
Container(
width: 638.w,
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.03),
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
model.content.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
40.w.heightBox,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
40.w.heightBox,
Row(
children: [
Spacer(),
CardBottomButton.yellow(
text: '领取任务',
onPressed: () async {
var re = await TaskFunc.take(taskId: model.id);
if (re) {
refresh();
}
}),
],
),
],
),
],
),
),
);
}
Widget _cardBottom(int) {
switch (int) {
case 1:
case 2:
return Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
40.w.heightBox,
CardBottomButton.white(
text: '取消订单',
onPressed: () async {
var re = await TaskFunc.cancel(taskId: model.id);
if (re) {
refresh();
}
}),
CardBottomButton.yellow(
text: '确认完成',
onPressed: () async {
var re = await TaskFunc.finish(taskId: model.id);
if (re) {
refresh();
}
}),
],
);
case 4:
return Column(
children: [
32.w.heightBox,
Row(
children: [
'客户取消:暂不需要该服务'.text.size(24.sp).color(Colors.red).make(),
Spacer(),
],
),
],
);
default:
return SizedBox.shrink();
}
}
}

@ -1,268 +0,0 @@
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/task/hall_list_model.dart';
import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class HallDetailPage extends StatefulWidget {
final HallListModel model;
const HallDetailPage({Key? key, required this.model}) : super(key: key);
@override
_HallDetailPageState createState() => _HallDetailPageState();
}
class _HallDetailPageState extends State<HallDetailPage> {
@override
Widget build(BuildContext context) {
return BeeScaffold(
extendBody: true,
title: '',
body: Stack(
children: [
Column(
children: [
Container(
width: double.infinity,
height: 380.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: widget.model.status == 4
? [
Colors.white,
Color(0xFFADACAC),
]
: [
Color(0xFFFFB737),
Color(0xFFFFD361),
]),
),
child: Column(
children: [
150.w.heightBox,
Row(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'${TaskMap.detailStatusToString[widget.model.status]}'
.text
.size(40.sp)
.color(Colors.black)
.bold
.make(),
'${TaskMap.subStatus[widget.model.status]}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
),
Spacer(),
// Padding(
// padding: EdgeInsets.only(right: 32.w),
// child: MaterialButton(
// color: Colors.white,
// elevation: 0,
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(8.w),
// ),
// onPressed: () async {
// var re = await TaskFunc.cancel(
// taskId: widget.model.id);
// if (re) {
// Get.back();
// }
// },
// child: '取消订单'
// .text
// .size(24.sp)
// .color(Colors.black.withOpacity(0.65))
// .make(),
// ),
// )
],
),
],
),
),
Flexible(
child: Container(
width: double.infinity,
color: Color(0xFFE5E5E5),
),
),
],
),
Positioned(
top: 280.w,
left: 32.w,
right: 32.w,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_content(),
24.w.heightBox,
_taskInfo(),
],
)),
],
),
);
}
Widget _taskInfo() {
return Container(
width: 686.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
Row(
children: [
'任务信息'.text.size(28.sp).color(Colors.black).bold.make(),
Spacer(),
],
),
24.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
children: [
'创建时间'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'${DateUtil.formatDateStr(widget.model.createDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make()
],
),
],
),
);
}
Widget _content() {
var head = Row(
children: [
Container(
width: 100.w,
height: 50.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFFF7E6),
borderRadius: BorderRadius.circular(8.w),
),
child: '#${TaskMap.typeToString[widget.model.type]}'
.text
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(),
),
Spacer(),
Assets.icons.intergral.image(width: 24.w, height: 24.w),
8.w.widthBox,
'${widget.model.reward}'.text.size(32.sp).color(Colors.red).make()
],
);
return Container(
width: 686.w,
height: 500.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
head,
34.w.heightBox,
Row(
children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${DateUtil.formatDateStr(widget.model.appointmentDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
20.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${widget.model.appointmentAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox,
Container(
width: 638.w,
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.03),
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'#${TaskMap.typeToString[widget.model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
widget.model.content.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
Row(
children: [
Assets.icons.reward.image(width: 36.w, height: 36.w),
24.w.widthBox,
'报酬'
.text
.size(26.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'¥${widget.model.reward}'
.text
.size(32.sp)
.color(Colors.red)
.make(),
],
),
],
),
);
}
}

@ -1,49 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/task/hall_list_model.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/src/extensions/num_ext.dart';
import 'hall_card.dart';
class HallView extends StatefulWidget {
const HallView({Key? key}) : super(key: key);
@override
_HallViewState createState() => _HallViewState();
}
class _HallViewState extends State<HallView> {
EasyRefreshController _refreshController = EasyRefreshController();
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeListView(
path: API.manager.task.hallList,
controller: _refreshController,
extraParams: {},
convert: (json) =>
json.tableList!.map((e) => HallListModel.fromJson(e)).toList(),
builder: (models) {
return ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
itemBuilder: (context, index) {
return HallCard(
model: models[index],
refresh: () => _refreshController.callRefresh());
},
separatorBuilder: (_, __) {
return 24.w.heightBox;
},
itemCount: models.length);
});
}
}

@ -1,190 +0,0 @@
import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/task/my_take_task_list_model.dart';
import 'package:aku_new_community/ui/service/my_take_task/my_take_task_detail_page.dart';
import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../task_func.dart';
class MyTakeTaskCard extends StatelessWidget {
final MyTakeTaskListModel model;
final VoidCallback refresh;
const MyTakeTaskCard({Key? key, required this.model, required this.refresh})
: super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
Get.to(() => MyTakeTaskDetailPage(model: model));
},
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
Row(
children: [
'接单时间 ${DateUtil.formatDateStr(model.createDate)}'
.text
.size(26.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'${TaskMap.statusToString[model.status]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.bold
.make()
],
),
20.w.heightBox,
BeeDivider.horizontal(),
34.w.heightBox,
Row(
children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${DateUtil.formatDateStr(model.appointmentDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
20.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${model.appointmentAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox,
Container(
width: 638.w,
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.03),
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
model.content.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
40.w.heightBox,
Row(
children: [
Spacer(),
RichText(
text: TextSpan(
text: '实付 ',
children: model.rewardType == 2
? [
WidgetSpan(
child: Assets.icons.intergral
.image(width: 24.w, height: 24.w),
),
model.reward
.toString()
.textSpan
.size(32.sp)
.color(Colors.red)
.make(),
]
: [
'¥ ${model.reward}'
.toString()
.textSpan
.size(32.sp)
.color(Colors.red)
.make(),
],
style: TextStyle(
color: Colors.black.withOpacity(0.65), fontSize: 24.sp),
),
)
],
),
_cardBottom(model.status),
],
),
),
);
}
Widget _cardBottom(int) {
switch (int) {
case 1:
case 2:
return Column(
children: [
40.w.heightBox,
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
// CardBottomButton.white(
// text: '取消订单',
// onPressed: () async {
// var re = await TaskFunc.cancel(taskId: model.id);
// if (re) {
// refresh();
// }
// }),
CardBottomButton.yellow(
text: '确认完成',
onPressed: () async {
var re = await TaskFunc.finish(taskId: model.id);
if (re) {
refresh();
}
}),
].sepWidget(separate: 10.w.widthBox),
)
],
);
case 9:
return Column(
children: [
32.w.heightBox,
Row(
children: [
'客户取消:暂不需要该服务'.text.size(24.sp).color(Colors.red).make(),
Spacer(),
],
),
],
);
default:
return SizedBox.shrink();
}
}
}

@ -1,268 +0,0 @@
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/task/my_take_task_list_model.dart';
import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class MyTakeTaskDetailPage extends StatefulWidget {
final MyTakeTaskListModel model;
const MyTakeTaskDetailPage({Key? key, required this.model}) : super(key: key);
@override
_MyTakeTaskDetailPageState createState() => _MyTakeTaskDetailPageState();
}
class _MyTakeTaskDetailPageState extends State<MyTakeTaskDetailPage> {
@override
Widget build(BuildContext context) {
return BeeScaffold(
extendBody: true,
title: '',
body: Stack(
children: [
Column(
children: [
Container(
width: double.infinity,
height: 380.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: widget.model.status == 4
? [
Colors.white,
Color(0xFFADACAC),
]
: [
Color(0xFFFFB737),
Color(0xFFFFD361),
]),
),
child: Column(
children: [
150.w.heightBox,
Row(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'${TaskMap.detailStatusToString[widget.model.status]}'
.text
.size(40.sp)
.color(Colors.black)
.bold
.make(),
'${TaskMap.subStatus[widget.model.status]}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
),
Spacer(),
// Padding(
// padding: EdgeInsets.only(right: 32.w),
// child: MaterialButton(
// color: Colors.white,
// elevation: 0,
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(8.w),
// ),
// onPressed: () async {
// var re = await TaskFunc.cancel(
// taskId: widget.model.id);
// if (re) {
// Get.back();
// }
// },
// child: '取消订单'
// .text
// .size(24.sp)
// .color(Colors.black.withOpacity(0.65))
// .make(),
// ),
// )
],
),
],
),
),
Flexible(
child: Container(
width: double.infinity,
color: Color(0xFFE5E5E5),
),
),
],
),
Positioned(
top: 280.w,
left: 32.w,
right: 32.w,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_content(),
24.w.heightBox,
_taskInfo(),
],
)),
],
),
);
}
Widget _taskInfo() {
return Container(
width: 686.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
Row(
children: [
'任务信息'.text.size(28.sp).color(Colors.black).bold.make(),
Spacer(),
],
),
24.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
children: [
'创建时间'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'${DateUtil.formatDateStr(widget.model.createDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make()
],
),
],
),
);
}
Widget _content() {
var head = Row(
children: [
Container(
width: 100.w,
height: 50.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFFF7E6),
borderRadius: BorderRadius.circular(8.w),
),
child: '#${TaskMap.typeToString[widget.model.type]}'
.text
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(),
),
Spacer(),
Assets.icons.intergral.image(width: 24.w, height: 24.w),
8.w.widthBox,
'${widget.model.reward}'.text.size(32.sp).color(Colors.red).make()
],
);
return Container(
width: 686.w,
height: 500.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
head,
34.w.heightBox,
Row(
children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${DateUtil.formatDateStr(widget.model.appointmentDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
20.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${widget.model.appointmentAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox,
Container(
width: 638.w,
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.03),
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'#${TaskMap.typeToString[widget.model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
widget.model.content.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
Row(
children: [
Assets.icons.reward.image(width: 36.w, height: 36.w),
24.w.widthBox,
'报酬'
.text
.size(26.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'¥${widget.model.reward}'
.text
.size(32.sp)
.color(Colors.red)
.make(),
],
),
],
),
);
}
}

@ -1,48 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/task/my_take_task_list_model.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:aku_new_community/ui/service/my_take_task/my_take_task_card.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class MyTakeTaskView extends StatefulWidget {
const MyTakeTaskView({Key? key}) : super(key: key);
@override
_MyTakeTaskViewState createState() => _MyTakeTaskViewState();
}
class _MyTakeTaskViewState extends State<MyTakeTaskView> {
EasyRefreshController _refreshController = EasyRefreshController();
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeListView(
path: API.manager.task.myTakeTask,
controller: _refreshController,
convert: (json) => json.tableList!
.map((e) => MyTakeTaskListModel.fromJson(e))
.toList(),
builder: (models) {
return ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
itemBuilder: (context, index) {
return MyTakeTaskCard(
model: models[index],
refresh: () => _refreshController.callRefresh());
},
separatorBuilder: (_, __) {
return 24.w.heightBox;
},
itemCount: models.length);
});
}
}

@ -1,199 +0,0 @@
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/task/my_task_list_model.dart';
import 'package:aku_new_community/ui/service/my_task/my_task_detail_page.dart';
import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../task_func.dart';
class MyTaskCard extends StatelessWidget {
final MyTaskListModel model;
final VoidCallback refresh;
const MyTaskCard({Key? key, required this.model, required this.refresh})
: super(key: key);
@override
Widget build(BuildContext context) {
var head = Row(
children: [
Container(
width: 100.w,
height: 50.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFFF7E6),
borderRadius: BorderRadius.circular(8.w),
),
child: '#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(),
),
Spacer(),
'${TaskMap.statusToString[model.status]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.bold
.make()
],
);
return GestureDetector(
onTap: () {
Get.to(() => MyTaskDetailPage(model: model));
},
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
head,
34.w.heightBox,
Row(
children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${DateUtil.formatDateStr(model.appointmentDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
20.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${model.appointmentAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox,
Container(
width: 638.w,
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.03),
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
model.content.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
40.w.heightBox,
Row(
children: [
Spacer(),
RichText(
text: TextSpan(
text: '实付 ',
children: model.rewardType == 2
? [
WidgetSpan(
child: Assets.icons.intergral
.image(width: 24.w, height: 24.w),
),
model.reward
.toString()
.textSpan
.size(32.sp)
.color(Colors.red)
.make(),
]
: [
'¥ ${model.reward}'
.toString()
.textSpan
.size(32.sp)
.color(Colors.red)
.make(),
],
style: TextStyle(
color: Colors.black.withOpacity(0.65), fontSize: 24.sp),
),
)
],
),
_cardBottom(model.status),
],
),
),
);
}
Widget _cardBottom(int) {
switch (int) {
case 1:
case 2:
return Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
40.w.heightBox,
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CardBottomButton.white(text: '取消订单', onPressed: () {}),
],
),
],
);
case 3:
return Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
40.w.heightBox,
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CardBottomButton.yellow(
text: '确认完成',
onPressed: () async {
await TaskFunc.confirm(taskId: model.id);
}),
],
),
],
);
case 9:
return Column(
children: [
32.w.heightBox,
Row(
children: [
'客户取消:暂不需要该服务'.text.size(24.sp).color(Colors.red).make(),
Spacer(),
],
),
],
);
default:
return SizedBox.shrink();
}
}
}

@ -1,279 +0,0 @@
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/models/task/my_task_list_model.dart';
import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
import '../task_func.dart';
class MyTaskDetailPage extends StatefulWidget {
final MyTaskListModel model;
const MyTaskDetailPage({Key? key, required this.model}) : super(key: key);
@override
_MyTaskDetailPageState createState() => _MyTaskDetailPageState();
}
class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
@override
Widget build(BuildContext context) {
return BeeScaffold(
extendBody: true,
title: '',
body: Stack(
children: [
Column(
children: [
Container(
width: double.infinity,
height: 380.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: widget.model.status == 4
? [
Colors.white,
Color(0xFFADACAC),
]
: [
Color(0xFFFFB737),
Color(0xFFFFD361),
]),
),
child: Column(
children: [
150.w.heightBox,
Row(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'${TaskMap.detailStatusToString[widget.model.status]}'
.text
.size(40.sp)
.color(Colors.black)
.bold
.make(),
'${TaskMap.subStatus[widget.model.status]}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
),
Spacer(),
// Padding(
// padding: EdgeInsets.only(right: 32.w),
// child: MaterialButton(
// color: Colors.white,
// elevation: 0,
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(8.w),
// ),
// onPressed: () async {
// var re = await TaskFunc.cancel(
// taskId: widget.model.id);
// if (re) {
// Get.back();
// }
// },
// child: '取消订单'
// .text
// .size(24.sp)
// .color(Colors.black.withOpacity(0.65))
// .make(),
// ),
// )
],
),
],
),
),
Flexible(
child: Container(
width: double.infinity,
color: Color(0xFFE5E5E5),
),
),
],
),
Positioned(
top: 280.w,
left: 32.w,
right: 32.w,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_content(),
24.w.heightBox,
_taskInfo(),
],
)),
],
),
bottomNavi: widget.model.status != 3
? SizedBox()
: BottomButton(
onPressed: () async {
await TaskFunc.confirm(taskId: widget.model.id);
},
child: Text('完成任务'),
),
);
}
Widget _taskInfo() {
return Container(
width: 686.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
Row(
children: [
'任务信息'.text.size(28.sp).color(Colors.black).bold.make(),
Spacer(),
],
),
24.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
children: [
'创建时间'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'${DateUtil.formatDateStr(widget.model.createDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make()
],
),
],
),
);
}
Widget _content() {
var head = Row(
children: [
Container(
width: 100.w,
height: 50.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFFF7E6),
borderRadius: BorderRadius.circular(8.w),
),
child: '#${TaskMap.typeToString[widget.model.type]}'
.text
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(),
),
Spacer(),
Assets.icons.intergral.image(width: 24.w, height: 24.w),
8.w.widthBox,
'${widget.model.reward}'.text.size(32.sp).color(Colors.red).make()
],
);
return Container(
width: 686.w,
height: 500.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
children: [
head,
34.w.heightBox,
Row(
children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${DateUtil.formatDateStr(widget.model.appointmentDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
20.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${widget.model.appointmentAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox,
Container(
width: 638.w,
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.03),
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'#${TaskMap.typeToString[widget.model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
widget.model.content.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
Row(
children: [
Assets.icons.reward.image(width: 36.w, height: 36.w),
24.w.widthBox,
'报酬'
.text
.size(26.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'¥${widget.model.reward}'
.text
.size(32.sp)
.color(Colors.red)
.make(),
],
),
],
),
);
}
}

@ -1,47 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/task/my_task_list_model.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:aku_new_community/ui/service/my_task/my_task_card.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class MyTaskView extends StatefulWidget {
const MyTaskView({Key? key}) : super(key: key);
@override
_MyTaskViewState createState() => _MyTaskViewState();
}
class _MyTaskViewState extends State<MyTaskView> {
EasyRefreshController _refreshController = EasyRefreshController();
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeListView(
path: API.manager.task.myTask,
controller: _refreshController,
convert: (json) =>
json.tableList!.map((e) => MyTaskListModel.fromJson(e)).toList(),
builder: (models) {
return ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
itemBuilder: (context, index) {
return MyTaskCard(
model: models[index],
refresh: () => _refreshController.callRefresh());
},
separatorBuilder: (_, __) {
return 24.w.heightBox;
},
itemCount: models.length);
});
}
}

@ -1,614 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/ui/service/task_func.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/picker/bee_date_picker.dart';
import 'package:aku_new_community/widget/picker/bee_picker_box.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class PublishTaskPage extends StatefulWidget {
const PublishTaskPage({Key? key}) : super(key: key);
@override
_PublishTaskPageState createState() => _PublishTaskPageState();
}
class _PublishTaskPageState extends State<PublishTaskPage> {
List<String> _types = ['跑腿', '代驾', '装修', '陪玩', '家政', '维修', '搬家', '家教', '其他'];
int _type = 0;
List<String> _sexStr = ['', '', '不限'];
int _sex = 0;
int _service = 0;
List<String> _serviceObject = ['住户', '物业', '不限'];
List<String> _rewardTypes = ['赏金', '积分'];
int _rewardType = 0;
DateTime? _appointDate = DateTime.now();
TextEditingController _titleController = TextEditingController();
TextEditingController _contentController = TextEditingController();
TextEditingController _addressController = TextEditingController();
TextEditingController _rewardController = TextEditingController();
@override
void dispose() {
_titleController.dispose();
_contentController.dispose();
_addressController.dispose();
_rewardController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '发布任务',
body: SafeArea(
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
children: [
Container(
width: double.infinity,
padding: EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16.w),
),
child: Column(
children: [
Row(
children: [
SizedBox(
width: 170.w,
child: '标题'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
Expanded(
child: TextField(
controller: _titleController,
onChanged: (text) => setState(() {}),
autofocus: false,
decoration: InputDecoration(
hintStyle: TextStyle(
fontSize: 28.sp,
color: Colors.black.withOpacity(0.25),
),
border: InputBorder.none,
hintText: '请输入',
),
),
),
],
),
BeeDivider.horizontal(),
32.w.heightBox,
GestureDetector(
onTap: () async {
_type = 1;
showModalBottomSheet(
context: context,
builder: (context) {
return BeePickerBox(
onPressed: () {
Get.back();
print(_type);
setState(() {});
},
child: CupertinoPicker.builder(
itemExtent: 60.w,
childCount: _types.length,
onSelectedItemChanged: (index) {
_type = index + 1;
},
itemBuilder: (context, index) {
return Center(
child: _types[index]
.text
.size(32.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.25))
.make(),
);
}));
},
);
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
SizedBox(
width: 170.w,
child: '分类'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
'${_type == 0 ? '请选择分类' : _types[_type - 1]}'
.text
.size(28.sp)
.color(Colors.black
.withOpacity(_type == 0 ? 0.25 : 0.85))
.make(),
Spacer(),
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
),
],
),
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
GestureDetector(
onTap: () async {
await Get.bottomSheet(CupertinoActionSheet(
cancelButton: CupertinoActionSheetAction(
onPressed: () {
Get.back();
},
child: '取消'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
actions: [
CupertinoActionSheetAction(
onPressed: () {
_sex = 1;
Get.back();
setState(() {});
},
child: ''
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
CupertinoActionSheetAction(
onPressed: () {
_sex = 2;
Get.back();
setState(() {});
},
child: ''
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
CupertinoActionSheetAction(
onPressed: () {
_sex = 3;
Get.back();
setState(() {});
},
child: '不限'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make())
],
));
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
SizedBox(
width: 170.w,
child: '性别'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
'${_sex == 0 ? '请选择性别' : _sexStr[_sex - 1]}'
.text
.size(28.sp)
.color(Colors.black
.withOpacity(_sex == 0 ? 0.25 : 0.85))
.make(),
Spacer(),
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
),
],
),
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
GestureDetector(
onTap: () async {
await Get.bottomSheet(CupertinoActionSheet(
cancelButton: CupertinoActionSheetAction(
onPressed: () {
Get.back();
},
child: '取消'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
actions: [
CupertinoActionSheetAction(
onPressed: () {
_service = 1;
Get.back();
setState(() {});
},
child: '住户'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
CupertinoActionSheetAction(
onPressed: () {
_service = 2;
Get.back();
setState(() {});
},
child: '物业'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
CupertinoActionSheetAction(
onPressed: () {
_service = 3;
Get.back();
setState(() {});
},
child: '不限'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make())
],
));
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
SizedBox(
width: 170.w,
child: '服务人员'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
'${_service == 0 ? '请选择服务人员' : _serviceObject[_service - 1]}'
.text
.size(28.sp)
.color(Colors.black
.withOpacity(_service == 0 ? 0.25 : 0.85))
.make(),
Spacer(),
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
),
],
),
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
'任务内容'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
32.w.heightBox,
Container(
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 24.w),
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.06),
borderRadius: BorderRadius.circular(16.w)),
child: TextField(
controller: _contentController,
autofocus: false,
onChanged: (text) => setState(() {}),
minLines: 5,
maxLength: 200,
maxLines: 20,
decoration: InputDecoration(
border: InputBorder.none,
),
),
),
],
),
),
32.w.heightBox,
Container(
width: double.infinity,
padding: EdgeInsets.only(
left: 32.w, right: 32.w, bottom: 32.w, top: 32.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16.w),
),
child: Column(
children: [
GestureDetector(
onTap: () async {
_appointDate =
await BeeDatePicker.timePicker(DateTime.now());
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
SizedBox(
width: 170.w,
child: '预约时间'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
'${DateUtil.formatDate(_appointDate)}'
.text
.size(28.sp)
.color(Colors.black
.withOpacity(_type == 0 ? 0.25 : 0.85))
.make(),
Spacer(),
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
),
],
),
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
Row(
children: [
SizedBox(
width: 170.w,
child: '预约地址'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
'${S.of(context)!.tempPlotName}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
''
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.25))
.make(),
Expanded(
child: TextField(
autofocus: false,
controller: _addressController,
onChanged: (text) => setState(() {}),
decoration: InputDecoration(
contentPadding: EdgeInsets.zero,
isDense: true,
border: InputBorder.none,
hintText: '请输入',
hintStyle: TextStyle(
fontSize: 28.sp,
color: Colors.black.withOpacity(0.25),
)),
),
),
],
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
GestureDetector(
onTap: () async {
await Get.bottomSheet(CupertinoActionSheet(
cancelButton: CupertinoActionSheetAction(
onPressed: () {
Get.back();
},
child: '取消'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
actions: [
CupertinoActionSheetAction(
onPressed: () {
_rewardType = 1;
Get.back();
setState(() {});
},
child: '赏金'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
CupertinoActionSheetAction(
onPressed: () {
_rewardType = 2;
Get.back();
setState(() {});
},
child: '积分'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()),
],
));
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
SizedBox(
width: 170.w,
child: '报酬类型'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
'${_rewardType == 0 ? '请选择报酬类型' : _rewardTypes[_rewardType - 1]}'
.text
.size(28.sp)
.color(Colors.black
.withOpacity(_rewardType == 0 ? 0.25 : 0.85))
.make(),
Spacer(),
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
),
],
),
),
),
32.w.heightBox,
BeeDivider.horizontal(),
32.w.heightBox,
Row(
children: [
SizedBox(
width: 170.w,
child: '${_rewardType == 1 ? '赏金金额' : '积分数量'}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
Expanded(
child: TextField(
textAlign: TextAlign.end,
onChanged: (text) => setState(() {}),
autofocus: false,
controller: _rewardController,
style: TextStyle(color: Colors.red),
decoration: InputDecoration(
contentPadding: EdgeInsets.zero,
isDense: true,
border: InputBorder.none,
hintText: '请输入',
hintStyle: TextStyle(
fontSize: 28.sp,
color: Colors.black.withOpacity(0.25),
)),
),
),
'${_rewardType == 1 ? '' : ''}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
],
)
],
),
),
],
),
),
bottomNavi: Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
child: MaterialButton(
elevation: 0,
height: 93.w,
disabledColor: Colors.black.withOpacity(0.06),
disabledTextColor: Colors.black.withOpacity(0.25),
textColor: Colors.black.withOpacity(0.85),
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(65.w)),
color: kPrimaryColor,
onPressed: !canTap
? null
: () async {
var cancel = BotToast.showLoading();
var re = await TaskFunc.publish(
title: _titleController.text,
taskType: _type,
taskSex: _sex,
serviceObject: _service,
taskContent: _contentController.text,
taskDate: _appointDate.toString(),
taskAddress: _addressController.text,
rewardType: _rewardType,
reward: _rewardController.text);
if (re) {
Get.back();
}
cancel();
},
child: '确认发布'.text.size(32.sp).bold.make(),
),
),
);
}
bool get canTap {
if (_titleController.text.isEmpty) {
return false;
}
if (_type == 0) {
return false;
}
if (_rewardType == 0) {
return false;
}
if (_sex == 0) {
return false;
}
if (_appointDate == null) {
return false;
}
if (_contentController.text.isEmpty) {
return false;
}
if (_addressController.text.isEmpty) {
return false;
}
if (_rewardController.text.isEmpty) {
return false;
}
return true;
}
}

@ -1,72 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
class TaskFunc {
///
static Future<bool> publish(
{required String title,
required int taskType,
required int taskSex,
required int serviceObject,
required String taskContent,
required String taskDate,
required String taskAddress,
required int rewardType,
required String reward}) async {
var base = await NetUtil().post(API.manager.task.publish, params: {
'title': title,
'taskType': taskType,
'taskSex': taskSex,
'serviceObject': serviceObject,
'taskContent': taskContent,
'taskDate': taskDate,
'taskAddress': taskAddress,
'rewardType': rewardType,
'reward': int.parse(reward),
});
return base.status ?? false;
}
///
static Future<bool> cancel({
required int taskId,
}) async {
var base = await NetUtil().get(API.manager.task.cancel, params: {
'taskId': taskId,
});
return base.status ?? false;
}
///
static Future<bool> take({
required int taskId,
}) async {
var base = await NetUtil().get(API.manager.task.take, params: {
'taskId': taskId,
});
return base.status ?? false;
}
///
static Future<bool> finish({
required int taskId,
}) async {
var base = await NetUtil().get(API.manager.task.finish, params: {
'taskId': taskId,
});
return base.status ?? false;
}
///
static Future<bool> confirm({
required int taskId,
}) async {
var base = await NetUtil().get(API.manager.task.confirm, params: {
'taskId': taskId,
});
return base.status ?? false;
}
}

@ -1,28 +0,0 @@
class TaskMap {
static Map<int, String> statusToString = {
1: '未接单',
2: '待处理',
3: '待确认',
4: '已完成',
9: '已取消'
};
static Map<int, String> typeToString = {1: '跑腿', 2: '代驾', 3: '装修', 4: '陪玩'};
static Map<int, String> serviceObject = {1: '住户', 2: '物业', 3: '不限'};
static Map<int, String> rewardType = {1: '赏金', 2: '积分'};
static Map<int, String> detailStatusToString = {
1: '已发布',
2: '待处理',
3: '待确认',
4: '已完成',
9: '已取消'
};
static Map<int, String> subStatus = {
1: '请耐心等待帮手领取任务',
2: '帮手正在为您服务中',
3: '帮手已完成任务',
4: '该任务已取消'
};
}

@ -1,91 +0,0 @@
import 'package:aku_new_community/ui/service/hall/hall_view.dart';
import 'package:aku_new_community/ui/service/my_take_task/my_take_task_view.dart';
import 'package:aku_new_community/ui/service/my_task/my_task_view.dart';
import 'package:aku_new_community/ui/service/publish_task_page.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/painter/tab_indicator.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class TaskPage extends StatefulWidget {
const TaskPage({Key? key}) : super(key: key);
@override
_TaskPageState createState() => _TaskPageState();
}
class _TaskPageState extends State<TaskPage> with TickerProviderStateMixin {
late TabController _tabController;
List<String> _tabs = ['大厅', '我服务的', '我发布的'];
@override
void initState() {
_tabController = TabController(length: _tabs.length, vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '',
actions: [
IconButton(
onPressed: () {
Get.to(() => PublishTaskPage());
},
icon: Icon(
Icons.add_circle_outline,
size: 40.w,
color: Colors.black,
))
],
appBarBottom: PreferredSize(
preferredSize: Size.fromHeight(88.w),
child: Row(
children: [
..._tabs
.mapIndexed(
(currentValue, index) => _tabCard(currentValue, index))
.toList(),
],
)),
body: SafeArea(
child: TabBarView(controller: _tabController, children: [
HallView(),
MyTakeTaskView(),
MyTaskView(),
])),
);
}
Widget _tabCard(String title, int index) {
var select = index == _tabController.index;
return GestureDetector(
onTap: () {
_tabController.animateTo(index);
setState(() {});
},
child: Material(
color: Colors.transparent,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
title.text
.size(select ? 36.sp : 32.sp)
.fontWeight(select ? FontWeight.bold : FontWeight.normal)
.color(Colors.black.withOpacity(select ? 0.85 : 0.65))
.make(),
8.w.heightBox,
select ? TabIndicator() : 10.w.heightBox,
],
),
),
),
);
}
}

@ -6,7 +6,7 @@ import 'package:power_logger/power_logger.dart';
import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
const String baseUri = 'wss://shop.kaidalai.cn/websocket/app';
const String baseUri = 'wss://hmxc.kaidalai.cn/websocket/app';
enum SOCKETSTATUS {
CONNECTED, //
BREAKOFF, //

@ -1,21 +0,0 @@
import 'package:aku_new_community/widget/painter/tab_indicator_parinter.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class TabIndicator extends StatelessWidget {
final double? width;
final double? height;
const TabIndicator({Key? key, this.width, this.height}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox(
width: width ?? 40.w,
height: height ?? 10.w,
child: CustomPaint(
painter: TabIndicatorPainter(),
),
);
}
}

@ -1,27 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:flutter/material.dart';
class TabIndicatorPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = kPrimaryColor
..strokeCap = StrokeCap.round
..strokeWidth = 2
..style = PaintingStyle.stroke;
Path path = Path();
path.moveTo(0, 0);
path.quadraticBezierTo(size.width / 2, size.height, size.width, 0);
canvas.drawPath(path, paint);
}
@override
bool shouldRebuildSemantics(covariant CustomPainter oldDelegate) {
return false;
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}

File diff suppressed because it is too large Load Diff

@ -94,7 +94,7 @@ dependencies:
#瀑布流
waterfall_flow: ^3.0.1
#扫码组件
qr_code_scanner: ^1.0.0
qr_code_scanner: ^0.4.0
#model 插件
equatable: ^2.0.0
#pdf文件预览
@ -104,13 +104,11 @@ dependencies:
#加载网络图片
cached_network_image: ^3.1.0
#轮播图
card_swiper: ^2.0.1
flutter_swiper_null_safety: ^1.0.2
#划动组件
carousel_slider: ^4.0.0-nullsafety.0
#跳转索引列表
scroll_to_index: ^2.1.1
#提取图片主色
palette_generator: ^0.3.2
dev_dependencies:

@ -20,7 +20,7 @@ buildApk() async {
await runAsync('mkdir', arguments: ['-p', Config.apkDir]);
await runAsync('mv', arguments: [
Config.buildPath,
'${Config.apkDir}/binjiang/${Config.packageName}_${version}_release_$date.apk'
'${Config.apkDir}/${Config.packageName}_${version}_release_$date.apk'
]);
}

Loading…
Cancel
Save