pull/1/head
戴余标 2 years ago
commit 25f3a85ef6

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -272,7 +272,6 @@ class _Manager {
///id
String get articleReturnList => '/user/articleBorrow/findBorrowByUserId';
///
String get findEstatelsPament => '/user/dailyPayment/findEstateIsPayment';

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class AppTheme {
@ -10,28 +9,63 @@ class AppTheme {
ProgressIndicatorThemeData(color: Color(0xFFFFD000)),
primaryColor: Color(0xFFFFD000),
textTheme: ThemeData.light().textTheme.copyWith(
headline3: TextStyle(
fontSize: 40.sp,
color: Color(0xFF333333),
fontWeight: FontWeight.bold,
),
subtitle1: TextStyle(
fontSize: 32.sp,
color: Color(0xFF333333),
),
subtitle2: TextStyle(
fontSize: 28.sp,
color: Color(0xFF333333),
),
bodyText1: TextStyle(
fontSize: 24.sp,
color: Color(0xFF333333),
),
caption: TextStyle(
fontSize: 28.sp,
color: Color(0xFF333333),
),
overline: TextStyle(
fontSize: 32.sp,
color: Color(0xFF333333),
),
headline1: TextStyle(
fontSize: 28.sp,
color: Color(0xFF333333),
fontWeight: FontWeight.bold,
),
headline2: TextStyle(
fontSize: 30.sp,
color: Color(0xFF333333),
fontWeight: FontWeight.bold,
),
headline3: TextStyle(
fontSize: 32.sp,
color: Color(0xFF333333),
fontWeight: FontWeight.bold,
),
headline4: TextStyle(
fontSize: 36.sp,
color: Color(0xFF333333),
fontWeight: FontWeight.bold,
),
headline5: TextStyle(
fontSize: 40.sp,
color: Color(0xFF333333),
fontWeight: FontWeight.bold,
),
subtitle1: TextStyle(
fontSize: 32.sp,
color: Color(0xFF333333),
),
subtitle2: TextStyle(
fontSize: 28.sp,
color: Color(0xFF333333),
),
bodyText1: TextStyle(
fontSize: 24.sp,
color: Color(0xFF333333),
),
bodyText2: TextStyle(
fontSize: 28.sp,
color: Color(0xFF333333),
),
button: TextStyle(
fontSize: 28.sp,
color: Color(0xFF333333),
)),
floatingActionButtonTheme: FloatingActionButtonThemeData().copyWith(
backgroundColor: Color(0xFFFFD000),
),
appBarTheme: AppBarTheme(
appBarTheme: AppBarTheme().copyWith(
elevation: 0,
centerTitle: true,
iconTheme: IconThemeData(
@ -46,25 +80,24 @@ class AppTheme {
),
).bodyText2,
titleTextStyle: TextTheme(
headline6: TextStyle(
headline3: TextStyle(
color: Color(0xFF333333),
fontSize: 36.sp,
fontSize: 32.sp,
fontWeight: FontWeight.bold,
),
).headline6,
).headline3,
),
tabBarTheme: TabBarTheme(
tabBarTheme: TabBarTheme().copyWith(
labelColor: Color(0xFF333333),
labelStyle: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.w600,
),
unselectedLabelStyle: TextStyle(
fontSize: 28.sp,
fontSize: 30.sp,
fontWeight: FontWeight.bold,
),
unselectedLabelStyle:
TextStyle(fontSize: 28.sp, fontWeight: FontWeight.normal),
indicatorSize: TabBarIndicatorSize.label,
),
bottomNavigationBarTheme: BottomNavigationBarThemeData(
bottomNavigationBarTheme: BottomNavigationBarThemeData().copyWith(
selectedItemColor: Color(0xFF333333),
selectedLabelStyle: TextStyle(
fontWeight: FontWeight.bold,
@ -72,7 +105,7 @@ class AppTheme {
type: BottomNavigationBarType.fixed,
unselectedLabelStyle: TextStyle(),
),
radioTheme: RadioThemeData(
radioTheme: RadioThemeData().copyWith(
fillColor: MaterialStateProperty.resolveWith<Color?>((states) {
if (states.contains(MaterialState.selected)) return Color(0xFFFFD000);
return null;

@ -25,6 +25,7 @@ import 'package:aku_new_community/ui/community/facility/facility_appointment_pag
import 'package:aku_new_community/ui/function_and_service/task/task_page.dart';
import 'package:aku_new_community/ui/function_and_service/work_order/work_order_page.dart';
import 'package:aku_new_community/ui/home/application/all_application.dart';
import 'package:aku_new_community/ui/home/application/all_application_new.dart';
import 'package:aku_new_community/ui/manager/advice/advice_page.dart';
import 'package:aku_new_community/ui/manager/questionnaire/questionnaire_page.dart';
import 'package:aku_new_community/ui/profile/car/car_manage_page.dart';
@ -123,7 +124,8 @@ List<AO> appObjects = [
AO('共享停车', Assets.icons.sharePark.path, null),
AO('二手市场', Assets.icons.secondHandMarket.path, null),
AO('共享投屏', Assets.icons.projectionScreen.path, null),
AO('全部应用', Assets.home.icQbyy.path, () => Get.to(() => AllApplicationPage())),
AO('全部应用', Assets.home.icQbyy.path,
() => Get.to(() => AllApplicationNewPage())),
// AO(
// '小区教育',

@ -9,6 +9,7 @@ class _MarketApi {
_ShopCart shopCart = _ShopCart();
_Address address = _Address();
_Order order = _Order();
_IntegralGood integralGood = _IntegralGood();
}
class _ShopCart {
@ -101,3 +102,12 @@ class _Order {
///
String get myOrder => '/app/user/shop/order/myOrder';
}
class _IntegralGood {
///
String get list => '/app/user/shop/pointsGoods/list';
///
String get createPointsOrder =>
'/app/user/shop/pointsGoods/createPointsGoodsOrder';
}

@ -1,6 +1,7 @@
import 'package:aku_new_community/widget/others/user_tool.dart';
part 'market_api.dart';
part 'profile_api.dart';
class SAASAPI {
@ -35,6 +36,9 @@ class SAASAPI {
static _WorkOrder workOrder = _WorkOrder();
static _Pay pay = _Pay();
static _LifePay lifePay = _LifePay();
static _Balance balance = _Balance();
static _CommunityIntroduce communityIntroduce = _CommunityIntroduce();
static _ConveniencePhone conveniencePhone = _ConveniencePhone();
///
static _ProfileApi profile = _ProfileApi();
@ -281,6 +285,20 @@ class _WorkOrder {
}
class _Pay {
///app
String get createPointsOrder => '/app/user/alipay/createPointsOrder';
///app
String get pointsOrderCheckAlipay =>
'/app/user/alipay/pointsOrderCheckAlipay';
///app
String get createBalanceOrder => '/app/user/alipay/createBalanceOrder';
///app
String get balanceOrderCheckAlipay =>
'/app/user/alipay/balanceOrderCheckAlipay';
///
String get createGoodsOrder => '/app/user/alipay/createGoodsOrder';
@ -313,3 +331,24 @@ class _LifePay {
///
String get findEstateBalance => '/app/user/livingExpenses/findEstateBalance';
}
class _Balance {
///
String get setBalancePayPsd => '/app/user/balance/settingBalancePayPwd';
///
String get buyPointsByBalance => '/app/user/balance/buyPoints';
///app
String get tradeRecordList => '/app/user/tradeRecord/tradeRecordList';
}
class _CommunityIntroduce {
///
String get info => '/app/user/communityIntroduction/introductionInfo';
}
class _ConveniencePhone {
///app便
String get list => '/app/user/conveniencePhone/list';
}

File diff suppressed because it is too large Load Diff

@ -1,3 +1,4 @@
import 'package:aku_new_community/provider/clock_timer_provider.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -42,6 +43,7 @@ class _MyAppState extends State<MyApp> {
ChangeNotifierProvider(create: (context) => AppProvider()),
ChangeNotifierProvider(create: (context) => SignUpProvider()),
ChangeNotifierProvider(create: (context) => DataProvider()),
ChangeNotifierProvider(create: (context) => ClockTimerProvider()),
],
child: GestureDetector(
onTap: () {
@ -59,7 +61,7 @@ class _MyAppState extends State<MyApp> {
designSize: Size(750, 1334),
// minTextAdapt: true,
// splitScreenMode: true,
builder: () => GetMaterialApp(
builder: (context) => GetMaterialApp(
onGenerateTitle: (context) => S.of(context)!.appName,
debugShowCheckedModeBanner: false,
theme: AppTheme.theme,

@ -1,21 +0,0 @@
class ConvenientPhoneModel {
int? id;
String? name;
String? tel;
ConvenientPhoneModel({this.id, this.name, this.tel});
ConvenientPhoneModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
tel = json['tel'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['tel'] = this.tel;
return data;
}
}

@ -7,34 +7,28 @@ part 'community_introduce_model.g.dart';
@JsonSerializable()
class CommunityIontroduceModel extends Equatable {
final int id;
final String name;
final String content;
final String createDate;
final List<ImgModel>? imgList;
CommunityIontroduceModel({
required this.id,
required this.name,
required this.content,
required this.createDate,
this.imgList,
});
factory CommunityIontroduceModel.fromJson(Map<String, dynamic> json) =>
_$CommunityIontroduceModelFromJson(json);
factory CommunityIontroduceModel.init() =>
CommunityIontroduceModel(id: -1, name: '', content: '', createDate: '');
CommunityIontroduceModel(name: '', content: '', imgList: []);
@override
List<Object?> get props {
return [
id,
name,
content,
createDate,
imgList,
];
}
const CommunityIontroduceModel({
required this.name,
required this.content,
this.imgList,
});
}

@ -9,10 +9,8 @@ part of 'community_introduce_model.dart';
CommunityIontroduceModel _$CommunityIontroduceModelFromJson(
Map<String, dynamic> json) =>
CommunityIontroduceModel(
id: json['id'] as int,
name: json['name'] as String,
content: json['content'] as String,
createDate: json['createDate'] as String,
imgList: (json['imgList'] as List<dynamic>?)
?.map((e) => ImgModel.fromJson(e as Map<String, dynamic>))
.toList(),

@ -0,0 +1,26 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:equatable/equatable.dart';
part 'convenience_phone_model.g.dart';
@JsonSerializable()
class ConveniencePhoneModel extends Equatable {
final int id;
final String name;
final String tel;
final int type;
factory ConveniencePhoneModel.fromJson(Map<String, dynamic> json) =>
_$ConveniencePhoneModelFromJson(json);
const ConveniencePhoneModel({
required this.id,
required this.name,
required this.tel,
required this.type,
});
@override
List<Object?> get props => [id, name, tel, type,];
}

@ -0,0 +1,16 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'convenience_phone_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
ConveniencePhoneModel _$ConveniencePhoneModelFromJson(
Map<String, dynamic> json) =>
ConveniencePhoneModel(
id: json['id'] as int,
name: json['name'] as String,
tel: json['tel'] as String,
type: json['type'] as int,
);

@ -0,0 +1,33 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:equatable/equatable.dart';
part 'integral_goods_list_model.g.dart';
@JsonSerializable()
class IntegralGoodsListModel extends Equatable {
final int id;
final String skuName;
final String mainPhoto;
final int points;
final int? saleNum;
factory IntegralGoodsListModel.fromJson(Map<String, dynamic> json) =>
_$IntegralGoodsListModelFromJson(json);
const IntegralGoodsListModel({
required this.id,
required this.skuName,
required this.mainPhoto,
required this.points,
this.saleNum,
});
@override
List<Object?> get props => [
id,
skuName,
mainPhoto,
points,
saleNum,
];
}

@ -0,0 +1,17 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'integral_goods_list_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
IntegralGoodsListModel _$IntegralGoodsListModelFromJson(
Map<String, dynamic> json) =>
IntegralGoodsListModel(
id: json['id'] as int,
skuName: json['skuName'] as String,
mainPhoto: json['mainPhoto'] as String,
points: json['points'] as int,
saleNum: json['saleNum'] as int?,
);

@ -1,6 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:aku_new_community/ui/market/shop_car/shop_car_func.dart';
import 'package:json_annotation/json_annotation.dart';
part 'shop_car_list_model.g.dart';
@ -18,7 +17,7 @@ class ShopCarListModel {
final double? sellPrice;
final double? discountPrice;
// (1.0.)
final int stockStatus;
final int? stockStatus;
final String? unit;
// 0= 1= 2= ,

@ -15,7 +15,7 @@ ShopCarListModel _$ShopCarListModelFromJson(Map<String, dynamic> json) =>
shopStatus: json['shopStatus'] as int?,
sellPrice: (json['sellPrice'] as num?)?.toDouble(),
discountPrice: (json['discountPrice'] as num?)?.toDouble(),
stockStatus: json['stockStatus'] as int,
stockStatus: json['stockStatus'] as int?,
unit: json['unit'] as String?,
kind: json['kind'] as int?,
weight: (json['weight'] as num?)?.toDouble(),

@ -20,6 +20,8 @@ class UserInfoModel {
final bool isPointsSignSetting;
final bool isSign;
final int? points;
final double? balance;
final bool isBalancePayPwd;
final List<ImgModel> imgList;
String get sexValue {
@ -55,6 +57,8 @@ class UserInfoModel {
required this.isPointsSignSetting,
required this.isSign,
this.points,
this.balance,
required this.isBalancePayPwd,
required this.imgList,
});
}

@ -21,6 +21,8 @@ UserInfoModel _$UserInfoModelFromJson(Map<String, dynamic> json) =>
isPointsSignSetting: json['isPointsSignSetting'] as bool,
isSign: json['isSign'] as bool,
points: json['points'] as int?,
balance: (json['balance'] as num?)?.toDouble(),
isBalancePayPwd: json['isBalancePayPwd'] as bool,
imgList: (json['imgList'] as List<dynamic>)
.map((e) => ImgModel.fromJson(e as Map<String, dynamic>))
.toList(),

@ -0,0 +1,37 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:equatable/equatable.dart';
part 'trade_record_list_model.g.dart';
@JsonSerializable()
class TradeRecordListModel extends Equatable {
final int id;
final int type;
final String content;
final double payAmount;
final String createName;
final String createDate;
factory TradeRecordListModel.fromJson(Map<String, dynamic> json) =>
_$TradeRecordListModelFromJson(json);
const TradeRecordListModel({
required this.id,
required this.type,
required this.content,
required this.payAmount,
required this.createName,
required this.createDate,
});
@override
List<Object?> get props => [
id,
type,
content,
payAmount,
createName,
createDate,
];
}

@ -0,0 +1,18 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'trade_record_list_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
TradeRecordListModel _$TradeRecordListModelFromJson(
Map<String, dynamic> json) =>
TradeRecordListModel(
id: json['id'] as int,
type: json['type'] as int,
content: json['content'] as String,
payAmount: (json['payAmount'] as num).toDouble(),
createName: json['createName'] as String,
createDate: json['createDate'] as String,
);

@ -33,7 +33,7 @@ class _CommunityIntroducePageState extends State<CommunityIntroducePage> {
header: MaterialHeader(),
onRefresh: () async {
BaseModel baseModel =
await NetUtil().get(API.manager.communityIntroduceInfo);
await NetUtil().get(SAASAPI.communityIntroduce.info);
if (baseModel.success && baseModel.data != null) {
_model = CommunityIontroduceModel.fromJson(baseModel.data);
}

@ -1,7 +1,7 @@
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/user/convenient_phone_model.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/models/convenience_phone/convenience_phone_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -19,8 +19,10 @@ class ConvenientPhonePage extends StatefulWidget {
}
class _ConvenientPhonePageState extends State<ConvenientPhonePage> {
EasyRefreshController? _easyRefreshController;
TextEditingController? _textEditingController;
late EasyRefreshController _easyRefreshController;
late TextEditingController _textEditingController;
List<ConveniencePhoneModel> _models = [];
@override
void initState() {
@ -31,12 +33,12 @@ class _ConvenientPhonePageState extends State<ConvenientPhonePage> {
@override
void dispose() {
_easyRefreshController?.dispose();
_textEditingController?.dispose();
_easyRefreshController.dispose();
_textEditingController.dispose();
super.dispose();
}
Widget _buildTile(ConvenientPhoneModel model) {
Widget _buildTile(ConveniencePhoneModel model) {
return Column(
children: [
Row(
@ -45,9 +47,9 @@ class _ConvenientPhonePageState extends State<ConvenientPhonePage> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
model.name!.text.black.size(32.sp).make(),
model.name.text.black.size(32.sp).make(),
12.w.heightBox,
model.tel!.text.color(Color(0xFF999999)).size(28.sp).make(),
model.tel.text.color(Color(0xFF999999)).size(28.sp).make(),
],
).expand(),
IconButton(
@ -58,7 +60,7 @@ class _ConvenientPhonePageState extends State<ConvenientPhonePage> {
),
onPressed: () async {
bool? result = await Get.dialog(CupertinoAlertDialog(
title: model.tel!.text.isIntrinsic.make(),
title: '是否拨打电话 ${model.tel}'.text.isIntrinsic.make(),
actions: [
CupertinoDialogAction(
child: '取消'.text.isIntrinsic.make(),
@ -99,8 +101,8 @@ class _ConvenientPhonePageState extends State<ConvenientPhonePage> {
),
child: TextField(
controller: _textEditingController,
onSubmitted: (value) {
_easyRefreshController!.callRefresh();
onChanged: (value) {
_easyRefreshController.callRefresh();
setState(() {});
},
decoration: InputDecoration(
@ -119,32 +121,36 @@ class _ConvenientPhonePageState extends State<ConvenientPhonePage> {
),
),
Expanded(
child: BeeListView<ConvenientPhoneModel>(
extraParams: {'name': _textEditingController!.text},
child: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
controller: _easyRefreshController,
path: API.manager.convenientPhone,
convert: (model) {
return model.rows
.map((e) => ConvenientPhoneModel.fromJson(e))
.toList();
},
builder: (items) {
return ListView.separated(
padding:
EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
itemBuilder: (context, index) {
return _buildTile(items[index]);
},
separatorBuilder: (context, index) {
return Divider(
thickness: 1.w,
height: 40.w,
color: Color(0xFFD8D8D8),
);
},
itemCount: items.length,
);
onRefresh: () async {
var base =
await NetUtil().get(SAASAPI.conveniencePhone.list, params: {
'name': _textEditingController.text,
});
if (base.success) {
_models = (base.data as List)
.map((e) => ConveniencePhoneModel.fromJson(e))
.toList();
}
setState(() {});
},
child: ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
itemBuilder: (context, index) {
return _buildTile(_models[index]);
},
separatorBuilder: (context, index) {
return Divider(
thickness: 1.w,
height: 40.w,
color: Color(0xFFD8D8D8),
);
},
itemCount: _models.length,
),
),
),
],

@ -1,73 +0,0 @@
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/constants/saas_api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/geographic_information/geographic_information_model.dart';
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: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 GeographicInformationPage extends StatefulWidget {
GeographicInformationPage({
Key? key,
}) : super(key: key);
@override
_GeographicInformationPageState createState() =>
_GeographicInformationPageState();
}
class _GeographicInformationPageState extends State<GeographicInformationPage> {
GeographicInformationModel _model = GeographicInformationModel.init();
bool _onload = true;
@override
Widget build(BuildContext context) {
return BeeScaffold(
bodyColor: Colors.white,
title: '地理信息',
body: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
onRefresh: () async {
BaseModel baseModel =
await NetUtil().get(API.manager.geographyInformation);
if (baseModel.success && baseModel.data != null) {
_model = GeographicInformationModel.fromJson(baseModel.data);
}
_onload = false;
setState(() {});
},
child: _onload
? Container()
: ListView(
children: [
SizedBox(
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
fit: BoxFit.cover,
image: SAASAPI.image(ImgModel.first(_model.imgUrls))),
width: double.infinity,
height: 424.w,
),
24.w.heightBox,
Padding(
padding:
EdgeInsets.only(left: 32.w, right: 32.w, top: 40.w),
child: Text(
_model.content ?? '',
style: TextStyle(
fontSize: 26.sp,
color: (ktextSubColor),
fontWeight: FontWeight.bold),
)),
],
),
));
}
}

@ -1,73 +1,70 @@
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/constants/saas_api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/geographic_information/geographic_information_model.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/pages/one_alarm/alarm_detail_page.dart';
import 'package:aku_new_community/pages/one_alarm/widget/alarm_page.dart';
import 'package:aku_new_community/provider/app_provider.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/bee_scaffold.dart';
import 'package:amap_flutter_base/amap_flutter_base.dart';
import 'package:amap_flutter_map/amap_flutter_map.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';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
class GeographicInformationPage extends StatefulWidget {
GeographicInformationPage({
Key? key,
}) : super(key: key);
GeographicInformationPage({Key? key}) : super(key: key);
@override
_GeographicInformationPageState createState() =>
_GeographicInformationPageState();
_GeographicInformationPageState createState() => _GeographicInformationPageState();
}
class _GeographicInformationPageState extends State<GeographicInformationPage> {
GeographicInformationModel _model = GeographicInformationModel.init();
bool _onload = false;
AMapController? _mapController;
@override
void initState() {
super.initState();
PermissionUtil.getLocationPermission();
}
@override
void dispose() {
super.dispose();
_mapController?.disponse();
}
@override
Widget build(BuildContext context) {
final appProvider = Provider.of<AppProvider>(context);
return BeeScaffold(
bodyColor: Colors.white,
title: '地理信息',
body: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
onRefresh: () async {
BaseModel baseModel =
await NetUtil().get(API.manager.geographyInformation);
if (baseModel.success && baseModel.data != null) {
_model = GeographicInformationModel.fromJson(baseModel.data);
}
_onload = false;
setState(() {});
},
child: _onload
? Container()
: ListView(
children: [
SizedBox(
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
fit: BoxFit.cover,
image: SAASAPI.image(ImgModel.first(_model.imgUrls))),
width: double.infinity,
height: 424.w,
),
24.w.heightBox,
Padding(
padding:
EdgeInsets.only(left: 32.w, right: 32.w, top: 40.w),
child: Text(
_model.content ?? '',
style: TextStyle(
fontSize: 26.sp,
color: (ktextSubColor),
fontWeight: FontWeight.bold),
)),
],
),
));
title: '地理信息',
body: AMapWidget(
privacyStatement: AMapPrivacyStatement(
hasContains: true, hasShow: true, hasAgree: true),
onMapCreated: (controller) {
final appProvider =
Provider.of<AppProvider>(context, listen: false);
LatLng _target = LatLng(
(appProvider.location?['latitude'] ?? 0) as double,
(appProvider.location?['longitude'] ?? 0) as double,
);
_mapController = controller;
_mapController!.moveCamera(
CameraUpdate.newCameraPosition(
CameraPosition(target: _target, zoom: 18),
),
);
},
myLocationStyleOptions: MyLocationStyleOptions(
true,
circleFillColor: Theme.of(context).primaryColor.withOpacity(0.2),
circleStrokeColor: Theme.of(context).primaryColor,
),
),
);
}
}

@ -385,7 +385,6 @@ class _HomePageState extends State<HomePage>
suffixTitle: '查看全部',
onTap: () => Get.to(() => ActivityListPage()),
),
24.hb,
_activityItemModels == []
? SizedBox()
: Container(
@ -564,7 +563,7 @@ class _HomePageState extends State<HomePage>
child: GestureDetector(
onTap: () {
if (LoginUtil.isNotLogin) return;
if (ao.title != '全部应用' && !LoginUtil.haveRealName(ao.title)) return;
// if (ao.title != '全部应用' && !LoginUtil.haveRealName(ao.title)) return;
if (ao.callback == null) {
BotToast.showText(
text: '该功能正在准备上线中,敬请期待', align: Alignment(0, 0.5));

@ -107,13 +107,14 @@ class _AnnounceViewState extends State<AnnounceView> {
header: MaterialHeader(),
footer: MaterialFooter(),
scrollController: _autoScrollController,
controller: _refreshController,
onRefresh: () async {
_page = 1;
_modelLists.clear();
_innerModelList.clear();
var base =
await NetUtil().getList(SAASAPI.announce.list, params: {
'page': _page,
'pageNum': _page,
'size': _size,
});
_innerModelList =
@ -129,13 +130,19 @@ class _AnnounceViewState extends State<AnnounceView> {
_page++;
var base =
await NetUtil().getList(SAASAPI.announce.list, params: {
'page': _page,
'pageNum': _page,
'size': _size,
});
if (base.total > _innerModelList.length) {}
_innerModelList =
base.rows.map((e) => HomeAnnounceModel.fromJson(e)).toList();
monthListDepart(_innerModelList);
if (base.total > _modelLists.length) {
_innerModelList = base.rows
.map((e) => HomeAnnounceModel.fromJson(e))
.toList();
monthListDepart(_innerModelList);
setState(() {});
} else {
print('1111111');
_refreshController.finishLoadCallBack!(noMore: true);
}
},
child: _modelLists.isEmpty
? Container()

@ -237,7 +237,7 @@ class _OpeningCodePageState extends State<OpeningCodePage> {
? Get.off(() => CertificationPage())
: BotToast.showText(text: '已实名认证');
},
text: '开门记录',
text: '住户认证',
suffix: UserTool.userProvider.userInfoModel!
.idCard ==
null

@ -63,13 +63,11 @@ class _MyAddressItemState extends State<MyAddressItem> {
children: [
GestureDetector(
onTap: () async {
bool? result = await Userfunc.setIsDefaultAddress(
bool result = await Userfunc.setIsDefaultAddress(
widget.addressModel.id!);
if (result != null) {
if (result) {
await appProvider.getMyAddress();
widget.refreshController!.callRefresh();
}
if (result) {
await appProvider.getMyAddress();
widget.refreshController!.callRefresh();
}
},
child: Container(

@ -1,6 +1,8 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/pages/personal/user_profile_page.dart';
import 'package:aku_new_community/pages/personal/wallet/wallet_recharge_page.dart';
import 'package:aku_new_community/pages/personal/wallet/wallet_trade_record_page.dart';
import 'package:aku_new_community/pages/setting_page/settings_page.dart';
import 'package:aku_new_community/pages/sign/login/other_login_page.dart';
import 'package:aku_new_community/provider/user_provider.dart';
@ -10,6 +12,7 @@ import 'package:aku_new_community/ui/profile/new_house/my_house_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/bee_avatar_widget.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
@ -290,175 +293,300 @@ class _PersonalIndexState extends State<PersonalIndex>
],
),
),
Padding(
padding: EdgeInsets.only(top: 600.w),
child: Column(
children: [
Container(
width: 686.w,
height: 282.w,
decoration: BoxDecoration(
color: Color(0xffffffff),
borderRadius: BorderRadius.all(Radius.circular(8)),
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.grey.withOpacity(0.1),
offset: Offset(1, 1),
),
],
),
margin: EdgeInsets.only(left: 32.w, right: 32.w),
padding: EdgeInsets.only(
top: 24.w, left: 32.w, right: 32.w),
child: Column(
//mainAxisAlignment: MainAxisAlignment.center,
children: [
_homeTitle('我的订单', () {
Get.to(() => OrderPage(initIndex: 0));
}, '查看全部'),
50.hb,
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
_orderButton(
name: '待付款',
path: Assets.newIcon.icDaifuk.path,
index: 1,
),
_orderButton(
name: '待发货',
path: Assets.newIcon.imgDaifah.path,
index: 2,
),
_orderButton(
name: '待收货',
path: Assets.newIcon.icDaishouh.path,
index: 3,
),
_orderButton(
name: '已完成',
path: Assets.newIcon.imgDaipingj.path,
index: 4,
),
],
),
],
),
),
// Container(
// width: double.infinity,
// height: 100.w,
// clipBehavior: Clip.antiAlias,
// decoration: BoxDecoration(
// // color: Colors.white,
// borderRadius: BorderRadius.circular(16.w)),
// margin: EdgeInsets.symmetric(horizontal: 32.w),
// child: Material(
// color: Colors.white,
// child: InkWell(
// onTap: () {
// Get.to(() => ClockInPage());
// },
// borderRadius: BorderRadius.circular(16.w),
// child: Padding(
// padding: EdgeInsets.symmetric(
// horizontal: 32.w, vertical: 24.w),
// child: Row(
// children: [
// '我的积分'.text.size(30.sp).black.bold.make(),
// Spacer(),
// // Assets.icons.intergral
// // .image(width: 32.w, height: 32.w),
// // 16.w.widthBox,
// // '123'.text.size(28.sp).black.make(),
// // 16.w.widthBox,
// Icon(
// CupertinoIcons.right_chevron,
// size: 24.w,
// ),
// ],
// ),
// ),
// ),
// ),
// ),
Container(
decoration: BoxDecoration(
color: Color(0xffffffff),
borderRadius: BorderRadius.all(Radius.circular(8)),
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.grey.withOpacity(0.1),
offset: Offset(1, 1),
),
],
),
margin: EdgeInsets.all(32.w),
padding: EdgeInsets.all(32.w),
child: Column(
children: [
Row(
children: [
22.wb,
'其他功能'
.text
.size(32.sp)
.color(Color(0xFF2B2B2B))
.bold
.make(),
Spacer(),
],
),
24.hb,
_function('我的积分', Assets.newIcon.icJifen.path,
() => Get.to(() => ClockInPage()), ''),
_function(
'我的房屋',
Assets.newIcon.icWdfw.path,
() {
Get.to(() => MyHousePage());
},
// () => HouseOwnersPage(
// identify: 4,
// ),
'${UserTool.userProvider.defaultHouse?.communityName ?? ''} '
'${UserTool.userProvider.defaultHouse?.buildingName ?? ''}'
'${UserTool.userProvider.defaultHouse?.unitName ?? ''}'
'${UserTool.userProvider.defaultHouse?.estateName ?? ''}',
),
_function('我的家庭', Assets.newIcon.icWdjt.path, () {
Get.to(() => MyFamilyPage());
}, ''),
// _function('我的车位', R.ASSETS_ICONS_ICON_MY_CARSEAT_PNG,
// () => CarParkingPage(), ''),
// 36.hb,
// _function('我的车', R.ASSETS_ICONS_ICON_MY_CAR_PNG,
// () => CarManagePage(), ''),
// 36.hb,
_function('我的访客', Assets.newIcon.icWdfk.path, () {
BotToast.showText(
text: '本小区尚未配置门禁设备',
align: Alignment(0, 0.5));
}, ''),
_function(
'收货地址',
Assets.newIcon.icShdz.path,
() => Get.to(() => AddressListPage(
canBack: false,
)),
''),
],
),
),
],
),
),
_columBody(),
],
)),
));
}
Padding _columBody() {
var wallet = Container(
margin: EdgeInsets.symmetric(horizontal: 32.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
),
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Row(
children: [
'我的钱包'.text.size(32.sp).color(Colors.black).make(),
Spacer(),
GestureDetector(
onTap: () {
Get.to(() => WalletTradeRecordPage());
},
child: Row(
children: [
'交易记录'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
8.wb,
Icon(
CupertinoIcons.chevron_right,
color: Colors.black.withOpacity(0.45),
size: 32.w,
),
],
),
),
],
),
),
BeeDivider.horizontal(),
Padding(
padding: EdgeInsets.symmetric(vertical: 24.w),
child: Row(
children: [
Expanded(
child: Column(
children: [
'${UserTool.userProvider.userInfoModel!.points ?? 0}'
.text
.size(40.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
12.hb,
'积分'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
),
Expanded(
child: Column(
children: [
'${UserTool.userProvider.userInfoModel!.balance ?? 0}'
.text
.size(40.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
12.hb,
'余额'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
)
],
),
),
BeeDivider.horizontal(),
Row(
children: [
Expanded(
child: GestureDetector(
onTap: () async {
await Get.to(WalletRechargePage(
initIndex: 0,
));
_refreshController.callRefresh();
},
child: Material(
color: Colors.transparent,
child: Center(
child: '充值'
.text
.size(26.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
),
))),
Container(
height: 84.w,
width: 2.w,
color: Colors.black.withOpacity(0.06),
),
Expanded(
child: GestureDetector(
onTap: () async {
await Get.to(WalletRechargePage(
initIndex: 1,
));
_refreshController.callRefresh();
},
child: Material(
color: Colors.transparent,
child: Center(
child: '购买积分'
.text
.size(26.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
),
)))
],
)
],
),
);
var order = Container(
width: 686.w,
height: 282.w,
decoration: BoxDecoration(
color: Color(0xffffffff),
borderRadius: BorderRadius.all(Radius.circular(8)),
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.grey.withOpacity(0.1),
offset: Offset(1, 1),
),
],
),
margin: EdgeInsets.only(left: 32.w, right: 32.w),
padding: EdgeInsets.only(top: 24.w, left: 32.w, right: 32.w),
child: Column(
//mainAxisAlignment: MainAxisAlignment.center,
children: [
_homeTitle('我的订单', () {
Get.to(() => OrderPage(initIndex: 0));
}, '查看全部'),
50.hb,
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
_orderButton(
name: '待付款',
path: Assets.newIcon.icDaifuk.path,
index: 1,
),
_orderButton(
name: '待发货',
path: Assets.newIcon.imgDaifah.path,
index: 2,
),
_orderButton(
name: '待收货',
path: Assets.newIcon.icDaishouh.path,
index: 3,
),
_orderButton(
name: '已完成',
path: Assets.newIcon.imgDaipingj.path,
index: 4,
),
],
),
],
),
);
var extra = Container(
decoration: BoxDecoration(
color: Color(0xffffffff),
borderRadius: BorderRadius.all(Radius.circular(8)),
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.grey.withOpacity(0.1),
offset: Offset(1, 1),
),
],
),
margin: EdgeInsets.all(32.w),
padding: EdgeInsets.all(32.w),
child: Column(
children: [
Row(
children: [
22.wb,
'其他功能'.text.size(32.sp).color(Color(0xFF2B2B2B)).bold.make(),
Spacer(),
],
),
24.hb,
_function('我的积分', Assets.newIcon.icJifen.path,
() => Get.to(() => ClockInPage()), ''),
_function(
'我的房屋',
Assets.newIcon.icWdfw.path,
() {
Get.to(() => MyHousePage());
},
// () => HouseOwnersPage(
// identify: 4,
// ),
'${UserTool.userProvider.defaultHouseString}',
),
_function('我的家庭', Assets.newIcon.icWdjt.path, () {
Get.to(() => MyFamilyPage());
}, ''),
// _function('我的车位', R.ASSETS_ICONS_ICON_MY_CARSEAT_PNG,
// () => CarParkingPage(), ''),
// 36.hb,
// _function('我的车', R.ASSETS_ICONS_ICON_MY_CAR_PNG,
// () => CarManagePage(), ''),
// 36.hb,
_function('我的访客', Assets.newIcon.icWdfk.path, () {
BotToast.showText(text: '本小区尚未配置门禁设备', align: Alignment(0, 0.5));
}, ''),
_function(
'收货地址',
Assets.newIcon.icShdz.path,
() => Get.to(() => AddressListPage(
canBack: false,
)),
''),
],
),
);
return Padding(
padding: EdgeInsets.only(top: 560.w),
child: Column(
children: [
wallet,
48.hb,
order,
// Container(
// width: double.infinity,
// height: 100.w,
// clipBehavior: Clip.antiAlias,
// decoration: BoxDecoration(
// // color: Colors.white,
// borderRadius: BorderRadius.circular(16.w)),
// margin: EdgeInsets.symmetric(horizontal: 32.w),
// child: Material(
// color: Colors.white,
// child: InkWell(
// onTap: () {
// Get.to(() => ClockInPage());
// },
// borderRadius: BorderRadius.circular(16.w),
// child: Padding(
// padding: EdgeInsets.symmetric(
// horizontal: 32.w, vertical: 24.w),
// child: Row(
// children: [
// '我的积分'.text.size(30.sp).black.bold.make(),
// Spacer(),
// // Assets.icons.intergral
// // .image(width: 32.w, height: 32.w),
// // 16.w.widthBox,
// // '123'.text.size(28.sp).black.make(),
// // 16.w.widthBox,
// Icon(
// CupertinoIcons.right_chevron,
// size: 24.w,
// ),
// ],
// ),
// ),
// ),
// ),
// ),
extra,
],
),
);
}
_homeTitle(String title, VoidCallback onTap, String suffixTitle) {
return Row(
children: [

@ -0,0 +1,213 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/models/wallet/trade_record_list_model.dart';
import 'package:aku_new_community/utils/network/net_util.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:common_utils/common_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class BalanceRecordView extends StatefulWidget {
const BalanceRecordView({Key? key}) : super(key: key);
@override
_BalanceRecordViewState createState() => _BalanceRecordViewState();
}
class _BalanceRecordViewState extends State<BalanceRecordView> {
EasyRefreshController _refreshController = EasyRefreshController();
List<TradeRecordListModel> _models = [];
int _pageNum = 1;
int _size = 10;
DateTime _pickTime = DateTime.now();
int _pickType = 0;
Map<int, String> _types = {
1: '支付',
2: '退还',
3: '充值',
4: '收入',
5: '提现',
6: '抵扣',
};
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
child: Row(
children: [
GestureDetector(
onTap: () async {
var date = await BeeDatePicker.monthPicker(
DateTime.now().subtract(Duration(days: 365)));
if (date != null) {
_pickTime = date;
}
setState(() {});
},
child: Row(
children: [
'${_pickTime.year}${_pickTime.month}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
Icon(
CupertinoIcons.chevron_down,
size: 32.w,
color: Colors.black.withOpacity(0.45),
)
],
),
),
Spacer(),
MaterialButton(
color: Colors.black.withOpacity(0.06),
onPressed: () async {
await showModalBottomSheet(
context: context,
builder: (context) {
return BeePickerBox(
onPressed: () {
Get.back();
setState(() {});
},
child: CupertinoPicker.builder(
itemExtent: 60.w,
childCount: _types.values.length,
onSelectedItemChanged: (index) {
_pickType = _types.keys.toList()[index];
},
itemBuilder: (context, index) {
var str = _types.values.toList()[index];
return Center(
child: str.text.size(32.sp).isIntrinsic.make(),
);
},
),
);
},
);
},
shape: StadiumBorder(),
elevation: 0,
child: Row(
children: [
'${_pickType == 0 ? '全部类型' : _types[_pickType]}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Icon(
CupertinoIcons.chevron_down,
size: 24.w,
color: Colors.black.withOpacity(0.25),
)
],
),
),
],
),
),
Flexible(
child: Container(
color: Colors.white,
child: EasyRefresh(
header: MaterialHeader(),
footer: MaterialFooter(),
firstRefresh: true,
controller: _refreshController,
onRefresh: () async {
_pageNum = 1;
var baseList = await NetUtil()
.getList(SAASAPI.balance.tradeRecordList, params: {
'pageNum': _pageNum,
'size': _size,
'modelType': 0,
'type': _pickType,
'createDate': _pickTime,
});
_models = baseList.rows
.map((e) => TradeRecordListModel.fromJson(e))
.toList();
setState(() {});
},
onLoad: () async {
_pageNum++;
var baseList = await NetUtil()
.getList(SAASAPI.balance.tradeRecordList, params: {
'pageNum': _pageNum,
'size': _size,
'modelType': 0,
'type': _pickType,
'createDate': _pickTime,
});
if (baseList.total > _models.length) {
_models.addAll(baseList.rows
.map((e) => TradeRecordListModel.fromJson(e))
.toList());
} else {
_refreshController.finishLoad(noMore: true);
}
setState(() {});
},
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
children: _models.map((e) => _buildCard(e)).toList(),
),
),
),
),
],
);
}
bool incom(type) => [2, 3, 4].contains(type);
Widget _buildCard(TradeRecordListModel model) {
return Column(
children: [
Row(
children: [
'${_types[model.type]}-${model.content}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
Spacer(),
'${incom(model.type) ? '+' : '-'}¥${model.payAmount}'
.text
.size(28.sp)
.color(incom(model.type)
? Colors.red
: Colors.black.withOpacity(0.85))
.make(),
],
),
8.hb,
'${DateUtil.formatDateStr(model.createDate, format: 'MM/dd HH:mm')}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
],
);
}
}

@ -0,0 +1,79 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:sms_autofill/sms_autofill.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class InputPayPasswordDialog extends StatefulWidget {
const InputPayPasswordDialog({
Key? key,
}) : super(key: key);
@override
_InputPayPasswordDialogState createState() => _InputPayPasswordDialogState();
}
class _InputPayPasswordDialogState extends State<InputPayPasswordDialog> {
String? _currentCode;
@override
Widget build(BuildContext context) {
return Center(
child: Padding(
padding: EdgeInsets.only(bottom: 300.w),
child: Material(
borderRadius: BorderRadius.circular(24.w),
child: Container(
width: 630.w,
height: 480.w,
padding: EdgeInsets.symmetric(horizontal: 32.w),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(24.w)),
child: Column(
children: [
96.hb,
'请输入您的支付密码'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.85))
.bold
.make(),
40.hb,
'支付密码仅用于对钱包余额支付时确认'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
PinFieldAutoFill(
autoFocus: true,
currentCode: _currentCode,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
codeLength: 6,
onCodeChanged: (code) async {
if ((code?.length ?? 0) >= 6) {
Get.back(result: code!);
}
_currentCode = code;
},
decoration: UnderlineDecoration(
colorBuilder: FixedColorListBuilder([
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
])),
)
],
),
),
),
),
);
}
}

@ -0,0 +1,247 @@
import 'dart:ui';
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/pages/life_pay/pay_util.dart';
import 'package:aku_new_community/pages/personal/wallet/input_pay_password_dialog.dart';
import 'package:aku_new_community/pages/personal/wallet/set_pay_password_dialog.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/buttons/bee_check_radio.dart';
import 'package:aku_new_community/widget/buttons/bee_long_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/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class PayWayDialog extends StatefulWidget {
final bool isBalance;
final int amount;
final bool insufficientBalance;
const PayWayDialog(
{Key? key,
required this.isBalance,
required this.amount,
required this.insufficientBalance})
: super(key: key);
@override
_PayWayDialogState createState() => _PayWayDialogState();
}
class _PayWayDialogState extends State<PayWayDialog> {
List<int> _payType = [];
@override
void initState() {
if (widget.isBalance) {
_payType.add(1);
} else {
if (widget.insufficientBalance) {
_payType.add(1);
} else {
_payType.add(0);
}
}
super.initState();
}
@override
Widget build(BuildContext context) {
var wallet = GestureDetector(
onTap: () {
if (widget.insufficientBalance) {
return;
}
_payType.clear();
_payType.add(0);
setState(() {});
},
child: ClipRect(
child: Stack(
children: [
Material(
color: Colors.transparent,
child: Row(
children: [
Assets.newIcon.walletBalance.image(width: 48.w, height: 48.w),
8.wb,
'钱包余额'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.wb,
Visibility(
visible: widget.insufficientBalance,
child:
'钱包余额不足'.text.size(24.sp).color(Colors.red).make()),
Spacer(),
BeeCheckRadio(
groupValue: _payType,
value: 0,
size: 36.w,
indent: Icon(
CupertinoIcons.checkmark_alt,
color: Colors.black,
size: 28.w,
),
),
],
),
),
BackdropFilter(
filter: ImageFilter.blur(
sigmaX: widget.insufficientBalance ? 1 : 0,
sigmaY: widget.insufficientBalance ? 1 : 0),
child: Container(),
),
],
),
),
);
var alipay = GestureDetector(
onTap: () {
_payType.clear();
_payType.add(1);
setState(() {});
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
Assets.newIcon.alipay.image(width: 48.w, height: 48.w),
8.wb,
'支付宝'.text.size(28.sp).color(Colors.black.withOpacity(0.85)).make(),
Spacer(),
BeeCheckRadio(
groupValue: _payType,
value: 1,
size: 36.w,
indent: Icon(
CupertinoIcons.checkmark_alt,
color: Colors.black,
size: 28.w,
),
),
],
),
),
);
return Material(
color: Colors.transparent,
child: Container(
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
width: double.infinity,
color: Colors.white,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
'支付'
.text
.size(32.sp)
.bold
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make(),
48.hb,
Column(
children: [
'¥'
.richText
.color(Colors.black.withOpacity(0.85))
.size(26.sp)
.withTextSpanChildren([
widget.amount
.toString()
.textSpan
.size(40.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
]).make(),
Offstage(
offstage: widget.isBalance,
child: '总共购买${widget.amount * 10}积分'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
60.hb,
Offstage(
offstage: widget.isBalance,
child: Column(
children: [
wallet,
40.hb,
],
),
),
alipay,
80.hb,
BeeLongButton(
width: double.infinity,
onPressed: () async {
if (_payType.contains(0)) {
if (!UserTool
.userProvider.userInfoModel!.isBalancePayPwd) {
Get.dialog(SetPayPasswordDialog());
} else {
Get.back();
var psd = await Get.dialog(
InputPayPasswordDialog());
await NetUtil().post(
SAASAPI.balance.buyPointsByBalance,
params: {
'balance': widget.amount,
'balancePayPwd': psd
},
showMessage: true);
}
return;
}
if (_payType.contains(1)) {
var cancel = BotToast.showLoading();
await _alipayFuc();
cancel();
Get.back();
return;
}
},
text: '确认支付${widget.amount}'),
],
),
],
),
),
);
}
Future _alipayFuc() async {
if (widget.isBalance) {
var base = await NetUtil().post(SAASAPI.pay.createBalanceOrder, params: {
'balance': widget.amount,
});
if (base.success) {
var re = await PayUtil()
.callAliPay(base.data, SAASAPI.pay.balanceOrderCheckAlipay);
} else {
BotToast.showText(text: base.msg);
}
} else {
var base = await NetUtil().post(SAASAPI.pay.createPointsOrder, params: {
'payAmount': widget.amount,
});
if (base.success) {
var re = await PayUtil()
.callAliPay(base.data, SAASAPI.pay.pointsOrderCheckAlipay);
} else {
BotToast.showText(text: base.msg);
}
}
}
}

@ -0,0 +1,212 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/models/wallet/trade_record_list_model.dart';
import 'package:aku_new_community/utils/network/net_util.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:common_utils/common_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class PointRecordView extends StatefulWidget {
const PointRecordView({Key? key}) : super(key: key);
@override
_PointRecordViewState createState() => _PointRecordViewState();
}
class _PointRecordViewState extends State<PointRecordView> {
EasyRefreshController _refreshController = EasyRefreshController();
List<TradeRecordListModel> _models = [];
int _pageNum = 1;
int _size = 10;
DateTime _pickTime = DateTime.now();
int _pickType = 0;
Map<int, String> _types = {
1: '支付',
2: '退还',
3: '充值',
4: '收入',
5: '提现',
6: '抵扣',
};
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
child: Row(
children: [
GestureDetector(
onTap: () async {
var date = await BeeDatePicker.monthPicker(
DateTime.now().subtract(Duration(days: 365)));
if (date != null) {
_pickTime = date;
}
setState(() {});
},
child: Row(
children: [
'${_pickTime.year}${_pickTime.month}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
Icon(
CupertinoIcons.chevron_down,
size: 32.w,
color: Colors.black.withOpacity(0.45),
)
],
),
),
Spacer(),
MaterialButton(
color: Colors.black.withOpacity(0.06),
onPressed: () async {
await showModalBottomSheet(
context: context,
builder: (context) {
return BeePickerBox(
onPressed: () {
Get.back();
setState(() {});
},
child: CupertinoPicker.builder(
itemExtent: 60.w,
childCount: _types.values.length,
onSelectedItemChanged: (index) {
_pickType = _types.keys.toList()[index];
},
itemBuilder: (context, index) {
var str = _types.values.toList()[index];
return Center(
child: str.text.size(32.sp).isIntrinsic.make(),
);
},
),
);
},
);
},
shape: StadiumBorder(),
elevation: 0,
child: Row(
children: [
'${_pickType == 0 ? '全部类型' : _types[_pickType]}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Icon(
CupertinoIcons.chevron_down,
size: 24.w,
color: Colors.black.withOpacity(0.25),
)
],
),
),
],
),
),
Flexible(
child: Container(
color: Colors.white,
child: EasyRefresh(
header: MaterialHeader(),
footer: MaterialFooter(),
firstRefresh: true,
controller: _refreshController,
onRefresh: () async {
_pageNum = 1;
var baseList = await NetUtil()
.getList(SAASAPI.balance.tradeRecordList, params: {
'pageNum': _pageNum,
'size': _size,
'modelType': 1,
'type': _pickType,
'createDate': _pickTime,
});
_models = baseList.rows
.map((e) => TradeRecordListModel.fromJson(e))
.toList();
setState(() {});
},
onLoad: () async {
_pageNum++;
var baseList = await NetUtil()
.getList(SAASAPI.balance.tradeRecordList, params: {
'pageNum': _pageNum,
'size': _size,
'modelType': 0,
'type': _pickType,
'createDate': _pickTime,
});
if (baseList.total > _models.length) {
_models.addAll(baseList.rows
.map((e) => TradeRecordListModel.fromJson(e))
.toList());
} else {
_refreshController.finishLoad(noMore: true);
}
setState(() {});
},
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
children: _models.map((e) => _buildCard(e)).toList(),
),
),
),
),
],
);
}
bool incom(type) => [2, 3, 4].contains(type);
Widget _buildCard(TradeRecordListModel model) {
return Column(
children: [
Row(
children: [
'${_types[model.type]}-${model.content}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
Spacer(),
'${incom(model.type) ? '+' : '-'}¥${model.payAmount}'
.text
.size(28.sp)
.color(incom(model.type)
? Colors.red
: Colors.black.withOpacity(0.85))
.make(),
],
),
8.hb,
'${DateUtil.formatDateStr(model.createDate, format: 'MM/dd HH:mm')}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
],
);
}
}

@ -0,0 +1,76 @@
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/pages/personal/wallet/set_pay_password_verify_dialog.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:sms_autofill/sms_autofill.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class SetPayPasswordDialog extends StatefulWidget {
const SetPayPasswordDialog({Key? key, }) : super(key: key);
@override
_SetPayPasswordDialogState createState() => _SetPayPasswordDialogState();
}
class _SetPayPasswordDialogState extends State<SetPayPasswordDialog> {
String? _currentCode;
@override
Widget build(BuildContext context) {
return Center(
child: Padding(
padding:EdgeInsets.only(bottom: 300.w),
child: Material(
borderRadius: BorderRadius.circular(24.w),
child: Container(
width: 630.w,
height: 480.w,
padding: EdgeInsets.symmetric(horizontal: 32.w),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(24.w)),
child: Column(
children: [
96.hb,
'请先设置支付密码'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.85))
.bold
.make(),
40.hb,
'支付密码仅用于对钱包余额支付时确认'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
PinFieldAutoFill(
autoFocus: true,
currentCode: _currentCode,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
codeLength: 6,
onCodeChanged: (code) async {
if ((code?.length ?? 0) >= 6) {
Get.back();
Get.dialog(SetPayVerifyPasswordDialog(firstCode:code!,));
}
_currentCode = code;
},
decoration: UnderlineDecoration(
colorBuilder: FixedColorListBuilder([
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
])),
)
],
),
),
),
),
);
}
}

@ -0,0 +1,118 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/pages/personal/wallet/input_pay_password_dialog.dart';
import 'package:aku_new_community/pages/sign/login/psd_verify.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/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:sms_autofill/sms_autofill.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class SetPayVerifyPasswordDialog extends StatefulWidget {
final String firstCode;
const SetPayVerifyPasswordDialog({Key? key, required this.firstCode})
: super(key: key);
@override
_SetPayVerifyPasswordDialogState createState() =>
_SetPayVerifyPasswordDialogState();
}
class _SetPayVerifyPasswordDialogState
extends State<SetPayVerifyPasswordDialog> {
String _currentCode = '';
bool get checkVerify => widget.firstCode == _currentCode;
@override
Widget build(BuildContext context) {
return Center(
child: Padding(
padding: EdgeInsets.only(bottom: 300.w),
child: Material(
borderRadius: BorderRadius.circular(24.w),
child: Container(
width: 630.w,
height: 480.w,
padding: EdgeInsets.symmetric(horizontal: 32.w),
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(24.w)),
child: Column(
children: [
96.hb,
'请再次输入支付密码'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.85))
.bold
.make(),
40.hb,
'支付密码仅用于对钱包余额支付时确认'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
PinFieldAutoFill(
autoFocus: true,
currentCode: _currentCode,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
codeLength: 6,
onCodeChanged: (code) async {
_currentCode = code ?? '';
if ((code?.length ?? 0) >= 6) {
print(checkVerify);
if (!checkVerify) {
return;
}
var base = await NetUtil()
.post(SAASAPI.balance.setBalancePayPsd, params: {
'pwd': widget.firstCode,
'rePwd': _currentCode,
});
if (base.success) {
Get.back();
UserTool.userProvider.updateUserInfo();
} else {
BotToast.showText(text: base.msg);
Get.back();
}
}
setState(() {});
},
decoration: UnderlineDecoration(
colorBuilder: FixedColorListBuilder([
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
Colors.black.withOpacity(0.3),
])),
),
24.hb,
Offstage(
offstage: (_currentCode.isEmptyOrNull) || (checkVerify),
child: Row(
children: [
'密码输入不一致'
.text
.size(24.sp)
.isIntrinsic
.color(Colors.red)
.make(),
],
),
)
],
),
),
),
),
);
}
}

@ -0,0 +1,496 @@
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/pages/personal/wallet/pay_way_dialog.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bee_long_button.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:collection/src/iterable_extensions.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/src/size_extension.dart';
import 'package:get/get.dart';
import 'package:velocity_x/src/extensions/num_ext.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class WalletRechargePage extends StatefulWidget {
final initIndex;
const WalletRechargePage({Key? key, this.initIndex = 0}) : super(key: key);
@override
_WalletRechargePageState createState() => _WalletRechargePageState();
}
class _WalletRechargePageState extends State<WalletRechargePage>
with SingleTickerProviderStateMixin {
int _currentIndex = 0;
int _currentSelect = 0;
late TabController _tabController;
List<String> _tabs = ['余额充值', '积分充值'];
List<int> _balanceValue = [10, 20, 30, 50, 00, 200, 300, 500];
List<int> _pointValue = [10, 200, 300, 500, 1000, 2000, 5000, 10000];
int _rechargeValue = 0;
@override
void initState() {
_tabController =
TabController(length: 2, vsync: this, initialIndex: widget.initIndex);
_currentIndex = widget.initIndex;
_rechargeValue = widget.initIndex == 0 ? _balanceValue[0] : _pointValue[0];
super.initState();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '钱包充值',
actions: [
TextButton(
onPressed: () {},
child: '账单'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
),
],
body: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Row(
children: [
'余额:${UserTool.userProvider.userInfoModel!.balance ?? 0}'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
64.wb,
'积分:'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
'${UserTool.userProvider.userInfoModel!.points ?? 0}'
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
decoration: BoxDecoration(color: Colors.white),
child: Column(
children: [
Row(
children: _tabs
.mapIndexed((index, element) => GestureDetector(
onTap: () {
_currentIndex = index;
_tabController.animateTo(_currentIndex);
setState(() {});
},
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
element.text
.size(28.sp)
.fontWeight(_currentIndex == index
? FontWeight.bold
: FontWeight.normal)
.color(Colors.black.withOpacity(
_currentIndex == index ? 0.85 : 0.65))
.make(),
8.hb,
AnimatedOpacity(
duration: Duration(microseconds: 500),
opacity: _currentIndex == index ? 1 : 0,
child: Container(
width: 40.w,
height: 8.w,
decoration: BoxDecoration(
color: Colors.black,
borderRadius:
BorderRadius.circular(4.w),
),
),
)
],
),
))
.toList()
.sepWidget(separate: 48.wb),
),
48.hb,
Expanded(
child: TabBarView(controller: _tabController, children: [
_balanceView(),
_pointView(),
]),
),
],
),
),
),
],
),
bottomNavi: Padding(
padding: EdgeInsets.only(
left: 32.w,
right: 32.w,
bottom: 32.w + MediaQuery.of(context).padding.bottom),
child: BeeLongButton(
onPressed: () async {
if (_currentSelect == 9) {
_rechargeValue = 0;
Get.bottomSheet(_customValueDialog(_currentIndex == 0));
} else {
Get.bottomSheet(PayWayDialog(
isBalance: _currentIndex == 0,
amount: _rechargeValue,
insufficientBalance: _rechargeValue >
(UserTool.userProvider.userInfoModel!.balance ?? 0)));
}
},
text: '下一步'),
),
);
}
Widget _balanceView() {
return GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 20.w,
crossAxisSpacing: 20.w,
children: [
..._balanceValue
.mapIndexed((index, e) => _card(index, e, true))
.toList(),
_customValueCard(9, true)
],
);
}
Widget _pointView() {
return GridView.count(
mainAxisSpacing: 20.w,
crossAxisSpacing: 20.w,
crossAxisCount: 3,
children: [
..._pointValue
.mapIndexed((index, element) => _card(index, element, false))
.toList(),
_customValueCard(9, false)
],
);
}
Widget _card(int index, int value, bool isBalance) {
return GestureDetector(
onTap: () {
_currentSelect = index;
_rechargeValue = isBalance ? _balanceValue[index] : (_pointValue[index]~/10);
setState(() {});
},
child: Material(
color: Colors.transparent,
borderRadius: BorderRadius.circular(16.w),
child: Stack(
clipBehavior: Clip.antiAliasWithSaveLayer,
fit: StackFit.passthrough,
children: [
Container(
width: 214.w,
height: 202.w,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.w),
color:
_currentSelect != index ? Color(0xFFF9F9F9) : Colors.black,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Offstage(
offstage: isBalance,
child: Assets.icons.intergral
.image(width: 48.w, height: 48.w)),
8.hb,
'$value '
.richText
.withTextSpanChildren([
'${isBalance ? '' : '积分'} '
.textSpan
.size(26.sp)
.color(_currentSelect == index
? Color(0xFFFBE541)
: Colors.black.withOpacity(0.85))
.make(),
])
.color(_currentSelect == index
? Color(0xFFFBE541)
: Colors.black.withOpacity(0.85))
.size(40.w)
.make(),
16.hb,
Offstage(
offstage: isBalance,
child: '${value ~/ 10}'
.text
.size(26.sp)
.color(_currentSelect == index
? Color(0xFFFBE541)
: Colors.black.withOpacity(0.85))
.make(),
),
],
),
),
AnimatedPositioned(
bottom: 0,
right: 0,
child: Offstage(
offstage: _currentSelect != index,
child: ClipPath(
clipper: _TriangleClipPath(),
child: Container(
width: 40.w,
height: 48.w,
color: Color(0xFFFBE541),
child: Transform.translate(
offset: Offset(10.w, 12.w),
child: Icon(
CupertinoIcons.checkmark_alt,
size: 24.w,
),
),
),
),
),
duration: Duration(microseconds: 500))
],
),
),
);
}
Widget _customValueCard(int index, bool isBalance) {
return GestureDetector(
onTap: () {
_currentSelect = index;
setState(() {});
},
child: Material(
color: Colors.transparent,
borderRadius: BorderRadius.circular(16.w),
child: Stack(
clipBehavior: Clip.antiAliasWithSaveLayer,
fit: StackFit.passthrough,
children: [
Container(
width: 214.w,
height: 202.w,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.w),
color:
_currentSelect != index ? Color(0xFFF9F9F9) : Colors.black,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Offstage(
offstage: isBalance,
child: Assets.icons.intergral
.image(width: 48.w, height: 48.w)),
8.hb,
''
.richText
.withTextSpanChildren([
'${isBalance ? '其他金额' : '其他积分'} '
.textSpan
.size(26.sp)
.color(_currentSelect == index
? Color(0xFFFBE541)
: Colors.black.withOpacity(0.85))
.make(),
])
.color(_currentSelect == index
? Color(0xFFFBE541)
: Colors.black.withOpacity(0.85))
.size(40.w)
.make(),
16.hb,
Offstage(
offstage: isBalance,
child: '自定义'
.text
.size(26.sp)
.color(_currentSelect == index
? Color(0xFFFBE541)
: Colors.black.withOpacity(0.85))
.make(),
),
],
),
),
AnimatedPositioned(
bottom: 0,
right: 0,
child: Offstage(
offstage: _currentSelect != index,
child: ClipPath(
clipper: _TriangleClipPath(),
child: Container(
width: 40.w,
height: 48.w,
color: Color(0xFFFBE541),
child: Transform.translate(
offset: Offset(10.w, 12.w),
child: Icon(
CupertinoIcons.checkmark_alt,
size: 24.w,
),
),
),
),
),
duration: Duration(microseconds: 500))
],
),
),
);
}
Widget _customValueDialog(bool isBalance) {
return StatefulBuilder(
builder: (context, reSet) {
return Material(
color: Colors.transparent,
child: Container(
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
width: double.infinity,
color: Colors.white,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
'${isBalance ? '充值金额' : '充值积分'}'
.text
.size(32.sp)
.bold
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make(),
48.hb,
Container(
height: 88.w,
decoration: BoxDecoration(
color: Color(0xFFF5F5F5),
borderRadius: BorderRadius.circular(16.w)),
clipBehavior: Clip.antiAliasWithSaveLayer,
child: Row(
children: [
24.wb,
'¥'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
12.wb,
Expanded(
child: TextField(
autofocus: true,
onChanged: (text) {
if (text.trim().isNotEmpty) {
_rechargeValue = int.parse(text);
reSet(() {});
}
},
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
],
keyboardType: TextInputType.number,
decoration: InputDecoration(border: InputBorder.none),
)),
Offstage(
offstage: isBalance,
child: Row(
children: [
Assets.icons.intergral
.image(width: 32.w, height: 32.w),
16.wb,
(_rechargeValue * 10)
.text
.size(32.sp)
.color(Colors.black.withOpacity(0.855))
.make(),
12.wb,
],
),
),
GestureDetector(
onTap: () {
if (_rechargeValue == 0) {
BotToast.showText(text: '金额不能为0');
return;
}
Get.back();
Get.bottomSheet(PayWayDialog(
insufficientBalance: (UserTool.userProvider
.userInfoModel!.balance ??
0) <
_rechargeValue,
isBalance: isBalance,
amount: _rechargeValue));
},
child: Material(
child: Container(
width: 132.w,
color: Color(0xFFFBE541),
child: Center(
child: '去支付'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
),
),
),
),
],
),
)
],
),
),
);
},
);
}
}
class _TriangleClipPath extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path path = Path();
path.moveTo(0, size.height);
path.lineTo(size.width, size.height);
path.lineTo(size.width, 0 + 5.w);
path.lineTo(0, size.height);
path.close();
return path;
}
@override
bool shouldReclip(covariant CustomClipper<Path> oldClipper) {
return false;
}
}

@ -0,0 +1,44 @@
import 'package:aku_new_community/pages/personal/wallet/point_record_view.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/tab_bar/bee_tab_bar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'balance_record_view.dart';
class WalletTradeRecordPage extends StatefulWidget {
const WalletTradeRecordPage({Key? key}) : super(key: key);
@override
_WalletTradeRecordPageState createState() => _WalletTradeRecordPageState();
}
class _WalletTradeRecordPageState extends State<WalletTradeRecordPage>
with SingleTickerProviderStateMixin {
List<String> _tabs = ['余额账单', '积分账单'];
late TabController _tabController;
@override
void initState() {
_tabController = TabController(length: _tabs.length, vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: BeeTabBar(
controller: _tabController,
tabs: _tabs,
scrollable: true,
),
body: TabBarView(
controller: _tabController,
children: [
BalanceRecordView(),
PointRecordView(),
],
),
);
}
}

@ -1,10 +1,12 @@
import 'package:aku_new_community/pages/sign/sign_func.dart';
import 'package:aku_new_community/provider/clock_timer_provider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sms_autofill/sms_autofill.dart';
import 'package:velocity_x/velocity_x.dart';
@ -38,6 +40,7 @@ class _CodeMessagePageState extends State<CodeMessagePage> {
@override
Widget build(BuildContext context) {
ClockTimerProvider clockTimer = Provider.of<ClockTimerProvider>(context);
return BeeScaffold(
title: '',
body: SafeArea(
@ -115,14 +118,14 @@ class _CodeMessagePageState extends State<CodeMessagePage> {
.communityModel!.id);
if (base.success) {
_errorMessage = null;
UserTool.appProvider.startTimer();
clockTimer.startTimer();
} else {
BotToast.showText(text: base.msg);
}
},
child: (UserTool.appProvider.second >= 60
child: (clockTimer.second >= 60
? '重新发送验证码'
: '${UserTool.appProvider.second}秒后可重新发送')
: '${clockTimer.second}秒后可重新发送')
.text
.size(28.sp)
.color(Color(0xFF5096F1))

@ -1,6 +1,7 @@
import 'package:aku_new_community/pages/sign/login/forgot_set_psd_page.dart';
import 'package:aku_new_community/pages/sign/widget/login_button_widget.dart';
import 'package:aku_new_community/pages/sign/widget/tel_text_field.dart';
import 'package:aku_new_community/provider/clock_timer_provider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
@ -8,6 +9,7 @@ import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.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';
import '../sign_func.dart';
@ -30,6 +32,7 @@ class _ForgotPsdPageState extends State<ForgotPsdPage> {
@override
Widget build(BuildContext context) {
ClockTimerProvider clockTimer = Provider.of<ClockTimerProvider>(context);
return BeeScaffold(
title: '',
bodyColor: Colors.white,
@ -83,7 +86,7 @@ class _ForgotPsdPageState extends State<ForgotPsdPage> {
Get.to(() => ForgotSetPsdPage(
tel: _telController.text,
));
UserTool.appProvider.startTimer();
clockTimer.startTimer();
} else {
BotToast.showText(text: base.msg);
}

@ -3,6 +3,7 @@ import 'package:aku_new_community/pages/sign/login/psd_verify.dart';
import 'package:aku_new_community/pages/sign/sign_func.dart';
import 'package:aku_new_community/pages/sign/widget/login_button_widget.dart';
import 'package:aku_new_community/pages/sign/widget/psd_text_field.dart';
import 'package:aku_new_community/provider/clock_timer_provider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
@ -10,6 +11,7 @@ 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 ForgotSetPsdPage extends StatefulWidget {
@ -52,6 +54,7 @@ class _ForgotSetPsdPageState extends State<ForgotSetPsdPage> {
@override
Widget build(BuildContext context) {
ClockTimerProvider clockTimer = Provider.of<ClockTimerProvider>(context);
return BeeScaffold(
title: '',
bodyColor: Colors.white,
@ -129,7 +132,7 @@ class _ForgotSetPsdPageState extends State<ForgotSetPsdPage> {
Get.to(() => ForgotSetPsdPage(
tel: widget.tel,
));
UserTool.appProvider.startTimer();
clockTimer.startTimer();
} else {
BotToast.showText(text: base.msg);
}
@ -137,7 +140,7 @@ class _ForgotSetPsdPageState extends State<ForgotSetPsdPage> {
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
'${UserTool.appProvider.second < 60 ? '${UserTool.appProvider.second}秒后重新获取' : '获取验证码'}'
'${clockTimer.second < 60 ? '${clockTimer.second}秒后重新获取' : '获取验证码'}'
.text
.size(28.sp)
.color(Color(0xFF5096F1))

@ -6,6 +6,7 @@ import 'package:aku_new_community/pages/sign/widget/login_button_widget.dart';
import 'package:aku_new_community/pages/sign/widget/psd_text_field.dart';
import 'package:aku_new_community/pages/sign/widget/tel_text_field.dart';
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/provider/clock_timer_provider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
@ -153,7 +154,7 @@ class _OtherLoginPageState extends State<OtherLoginPage> {
}
Widget _verificationView() {
AppProvider appProvider = Provider.of<AppProvider>(context);
ClockTimerProvider clockTimer = Provider.of<ClockTimerProvider>(context);
return ListView(
padding: EdgeInsets.symmetric(horizontal: 32.w),
children: [
@ -170,7 +171,7 @@ class _OtherLoginPageState extends State<OtherLoginPage> {
),
100.w.heightBox,
LoginButtonWidget(
onTap: UserTool.appProvider.second < 60
onTap: clockTimer.second < 60
? () {}
: () async {
var check = checkInput();
@ -183,13 +184,13 @@ class _OtherLoginPageState extends State<OtherLoginPage> {
.communityModel!.id);
if (base.success) {
Get.to(() => CodeMessagePage(tel: _tel.text));
appProvider.startTimer();
clockTimer.startTimer();
} else {
BotToast.showText(text: base.msg);
}
},
text: appProvider.timerStart
? '${appProvider.second}秒后重新获取'
text: clockTimer.timerStart
? '${clockTimer.second}秒后重新获取'
: '获取验证码'),
24.w.heightBox,
Row(

@ -0,0 +1,147 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/pages/setting_page/agreement_page/agreement_page.dart';
import 'package:aku_new_community/pages/setting_page/agreement_page/privacy_page.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
class AppVerifyDialog extends StatelessWidget {
const AppVerifyDialog({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: Container(
width: 600.w,
height: 700.w,
clipBehavior: Clip.antiAliasWithSaveLayer,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(24.w),
),
child: Material(
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [
0,
0.3,
],
colors: [
Color(0x33FBE541),
Colors.white,
])),
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 40.w),
child: Column(
children: [
52.hb,
Text(
'欢迎使用小蜜蜂',
style: TextStyle(
color: Colors.black.withOpacity(0.85),
fontSize: 28.sp,
fontWeight: FontWeight.bold),
),
45.hb,
Text(
'''
使使
访访
使
''',
style: TextStyle(
color: Colors.black.withOpacity(0.85),
fontSize: 24.sp),
),
30.hb,
RichText(
text: TextSpan(
text: '更多详细信息,请您阅读',
style: TextStyle(
color: Colors.black.withOpacity(0.85),
fontSize: 24.sp),
children: [
TextSpan(
text: '《用户协议》',
style: TextStyle(
color: kPrimaryColor, fontSize: 24.sp),
recognizer: TapGestureRecognizer()
..onTap = () {
Get.to(() => AgreementPage());
},
),
TextSpan(
text: '',
style: TextStyle(
color: Colors.black.withOpacity(0.85),
fontSize: 24.sp),
),
TextSpan(
text: '《小蜜蜂隐私保护政策》',
style: TextStyle(
color: kPrimaryColor, fontSize: 24.sp),
recognizer: TapGestureRecognizer()
..onTap = () {
Get.to(() => PrivacyPage());
},
),
]),
),
],
),
),
Spacer(),
BeeDivider.horizontal(),
ConstrainedBox(
constraints: BoxConstraints(maxHeight: 100.w),
child: Row(
children: [
Expanded(
child: MaterialButton(
padding: EdgeInsets.symmetric(vertical: 30.w),
onPressed: () {
Get.back(result: false);
},
child: Text('退出',
style: TextStyle(
fontSize: 24.sp
),),
),
),
Container(
width: 2.w,
height: double.infinity,
color: Color(0xFFF0F0F0),
),
Expanded(
child: MaterialButton(
padding: EdgeInsets.symmetric(vertical: 20.w),
onPressed: () {
Get.back(result: true);
},
child: Text('确认',style: TextStyle(
fontSize: 24.sp
),),
),
),
],
),
),
],
),
),
),
),
);
}
}

@ -5,6 +5,7 @@ import 'package:aku_new_community/main_initialize.dart';
import 'package:aku_new_community/pages/setting_page/agreement_page/agreement_page.dart';
import 'package:aku_new_community/pages/setting_page/agreement_page/privacy_page.dart';
import 'package:aku_new_community/pages/sign/login/other_login_page.dart';
import 'package:aku_new_community/pages/splash/app_verify_dialog.dart';
import 'package:aku_new_community/utils/developer_util.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/utils/hive_store.dart';
@ -33,52 +34,54 @@ class _SplashPageState extends State<SplashPage> {
TapGestureRecognizer _privacyRecognizer = TapGestureRecognizer();
Future<bool?> _showLoginVerify() async {
return await showCupertinoDialog(
barrierDismissible: false,
context: context,
builder: (context) {
return CupertinoAlertDialog(
title: Text('隐私政策和用户协议'),
content: RichText(
text: TextSpan(
text: '点击登录即表示您已阅读并同意',
style: TextStyle(color: Colors.black),
children: [
TextSpan(
text: '《用户协议》',
style: TextStyle(color: Colors.blue),
recognizer: _agreementRecognizer
..onTap = () {
Get.to(() => AgreementPage());
}),
TextSpan(
text: '《隐私政策》',
style: TextStyle(color: Colors.blue),
recognizer: _privacyRecognizer
..onTap = () {
Get.to(() => PrivacyPage());
}),
TextSpan(
style: TextStyle(color: Colors.black),
text:
'(特别是免除或限制责任、管辖等粗体下划线标注的条款)。如您不同意上述协议的任何条款,您应立即停止登录及使用本软件及服务。')
]),
),
// ),
actions: [
CupertinoDialogAction(
child: Text('拒绝'),
onPressed: () => Get.back(result: false),
),
CupertinoDialogAction(
child: Text('同意'),
onPressed: () => Get.back(result: true),
),
],
);
},
);
var re = await Get.dialog(AppVerifyDialog());
return re;
// return await showCupertinoDialog(
// barrierDismissible: false,
// context: context,
// builder: (context) {
// return CupertinoAlertDialog(
// title: Text('隐私政策和用户协议'),
// content: RichText(
// text: TextSpan(
// text: '点击登录即表示您已阅读并同意',
// style: TextStyle(color: Colors.black),
// children: [
// TextSpan(
// text: '《用户协议》',
// style: TextStyle(color: Colors.blue),
// recognizer: _agreementRecognizer
// ..onTap = () {
// Get.to(() => AgreementPage());
// }),
// TextSpan(
// text: '《隐私政策》',
// style: TextStyle(color: Colors.blue),
// recognizer: _privacyRecognizer
// ..onTap = () {
// Get.to(() => PrivacyPage());
// }),
// TextSpan(
// style: TextStyle(color: Colors.black),
// text:
// '(特别是免除或限制责任、管辖等粗体下划线标注的条款)。如您不同意上述协议的任何条款,您应立即停止登录及使用本软件及服务。')
// ]),
// ),
//
// // ),
// actions: [
// CupertinoDialogAction(
// child: Text('拒绝'),
// onPressed: () => Get.back(result: false),
// ),
// CupertinoDialogAction(
// child: Text('同意'),
// onPressed: () => Get.back(result: true),
// ),
// ],
// );
// },
// );
}
@override

@ -138,13 +138,10 @@ class _TabNavigatorState extends State<TabNavigator>
//
Get.offAll(() => OtherLoginPage());
} else {}
if (UserTool.userProvider.userInfoModel?.name == null) {
Get.dialog(CertificationDialog());
} else {
_tabController!.animateTo(2, curve: Curves.easeInOutCubic);
_currentIndex = 2;
setState(() {});
}
},
child: Material(
color: Colors.transparent,

@ -302,29 +302,34 @@ class AppProvider extends ChangeNotifier {
List<AddressModel> get addressModels => _addressModels;
AddressModel? _addressModel;
///
AddressModel? _defaultAddressModel;
AddressModel? get addressModel => _addressModel;
///
AddressModel? get defaultAddressModel => _defaultAddressModel;
///
Future getMyAddress() async {
BaseModel model = await NetUtil().get(SAASAPI.market.address.myAddress);
if (model.data?.length == 0)
return [];
else {
if ((model.data as List).length == 0) {
_addressModels.clear();
_defaultAddressModel=null;
notifyListeners();
return ;
} else {
_addressModels =
(model.data as List).map((e) => AddressModel.fromJson(e)).toList();
if (_addressModels.isEmpty) {
_addressModel = null;
_defaultAddressModel = null;
} else {
_addressModels.forEach((element) {
for (var element in _addressModels) {
if (element.isDefault == 1) {
_addressModel = element;
_defaultAddressModel = element;
notifyListeners();
return;
}
});
}
_defaultAddressModel = null;
}
}
notifyListeners();
@ -350,30 +355,7 @@ class AppProvider extends ChangeNotifier {
notifyListeners();
}
///
int second = 60;
bool timerStart = false;
Timer? timer;
void startTimer() {
timerStart = true;
timer = Timer.periodic(Duration(seconds: 1), (timer) {
if (second > 0) {
second--;
notifyListeners();
} else {
stopTimer();
}
});
}
void stopTimer() {
second = 60;
timerStart = false;
timer?.cancel();
timer = null;
notifyListeners();
}
notifyListeners();
}

@ -0,0 +1,30 @@
import 'dart:async';
import 'package:flutter/material.dart';
class ClockTimerProvider extends ChangeNotifier{
///
int second = 60;
bool timerStart = false;
Timer? timer;
void startTimer() {
timerStart = true;
timer = Timer.periodic(Duration(seconds: 1), (timer) {
if (second > 0) {
second--;
notifyListeners();
} else {
stopTimer();
}
});
}
void stopTimer() {
second = 60;
timerStart = false;
timer?.cancel();
timer = null;
notifyListeners();
}
}

@ -9,7 +9,7 @@ import 'package:get/get.dart';
import 'activity_detail_page.dart';
class ActivityCard extends StatelessWidget {
final bool? home;
final bool home;
final HomeActivityModel? model;
const ActivityCard({
@ -22,10 +22,9 @@ class ActivityCard extends StatelessWidget {
Widget build(BuildContext context) {
return ConstrainedBox(
constraints: BoxConstraints(maxHeight: home! ? 450.w : 540.w),
constraints: BoxConstraints(maxHeight: home ? 450.w : 540.w),
child: MaterialButton(
clipBehavior: Clip.antiAlias,
color: Colors.white,
padding: EdgeInsets.zero,
onPressed: () => Get.to(() => ActivityDetailPage(id: model!.id)),
elevation: 0,
@ -46,7 +45,7 @@ class ActivityCard extends StatelessWidget {
child: BeeImageNetwork(
imgs: model!.imgList ?? [],
width: double.infinity,
height: home! ? 250.w : 340.w,
height: home ? 250.w : 340.w,
),
),
),
@ -78,54 +77,46 @@ class ActivityCard extends StatelessWidget {
],
),
24.hb,
Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
constraints: BoxConstraints(maxWidth: 340.w),
child: Text(
model == null ? '' : model!.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Color(0xD9000000),
fontSize: 28.sp,
fontWeight: FontWeight.bold),
),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
constraints: BoxConstraints(maxWidth: 340.w),
child: Text(
model == null ? '' : model!.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Color(0xD9000000),
fontSize: 28.sp,
fontWeight: FontWeight.bold),
),
Spacer(),
],
),
),
Spacer(),
],
),
Spacer(),
Padding(
padding: home!?EdgeInsets.only(left: 32.w,right: 32.w,): EdgeInsets.only(left: 32.w,right: 32.w,bottom: 32.w),
child: Row(
children: [
Flexible(
child: AvatarsParticipate(
avatars:
(model?.avatarImgList?.map((e) => e.url).toList() ?? []),
pNum: model?.registrationNum ?? 0,
hasIcon: false,
),
24.hb,
Row(
children: [
Flexible(
child: AvatarsParticipate(
avatars:
(model?.avatarImgList?.map((e) => e.url).toList() ??
[]),
pNum: model?.registrationNum ?? 0,
hasIcon: false,
),
// Spacer(),
Offstage(
offstage: ActivityFunc.dateCheck(model!.end) == '已结束',
child: ActivityFunc.dateCheck(model!.end)
.text
.size(24.sp)
.black
.make()),
],
),
),
// Spacer(),
Offstage(
offstage: ActivityFunc.dateCheck(model!.end) == '已结束',
child: ActivityFunc.dateCheck(model!.end)
.text
.size(24.sp)
.black
.make()),
],
)
],
),
),

@ -8,7 +8,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
class ActivityListPage extends StatefulWidget {
ActivityListPage({Key? key}) : super(key: key);
ActivityListPage({Key? key}) : super(key: key);
@override
_ActivityListPageState createState() => _ActivityListPageState();
@ -44,9 +44,15 @@ class _ActivityListPageState extends State<ActivityListPage> {
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 20.w),
itemBuilder: (context, index) {
final HomeActivityModel model = items[index];
return ActivityCard(model: model);
return Container(
padding:
EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16.w)),
child: ActivityCard(model: model));
},
separatorBuilder: (_, __) => 20.hb,
separatorBuilder: (_, __) => 32.hb,
itemCount: items.length,
);
},

@ -7,6 +7,7 @@ import 'package:aku_new_community/models/home/home_activity_model.dart';
import 'package:aku_new_community/models/home/home_announce_model.dart';
import 'package:aku_new_community/models/home/home_swiper_model.dart';
import 'package:aku_new_community/models/market/goods_popular_model.dart';
import 'package:aku_new_community/models/market/integral_goods_list_model.dart';
import 'package:aku_new_community/models/market/market_all_category_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/models/market/market_statistics_model.dart';
@ -106,6 +107,17 @@ class CommunityFunc {
.toList();
}
///
static Future<List<IntegralGoodsListModel>> getIntegralGoods(int num) async {
var baseList = await NetUtil().getList(
SAASAPI.market.integralGood.list,
params: {'pageNum': 1, 'size': num},
);
return baseList.rows
.map((e) => IntegralGoodsListModel.fromJson(e))
.toList();
}
///
static Future<List<MarketAllCategoryModel>> getCategory() async {
BaseModel model = await NetUtil().get(

@ -1,3 +1,4 @@
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/saas_model/task/hall_list_model.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
@ -98,6 +99,7 @@ class HallCard extends StatelessWidget {
),
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
head,
24.w.heightBox,
@ -164,6 +166,7 @@ class HallCard extends StatelessWidget {
),
24.w.heightBox,
BeeDivider.horizontal(),
20.hb,
_cardBottom()
],
),

@ -3,6 +3,8 @@ import 'dart:io';
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/pages/personal/wallet/input_pay_password_dialog.dart';
import 'package:aku_new_community/pages/personal/wallet/set_pay_password_dialog.dart';
import 'package:aku_new_community/ui/function_and_service/task/task_func.dart';
import 'package:aku_new_community/ui/function_and_service/task/task_map.dart';
import 'package:aku_new_community/ui/function_and_service/task/task_remark_page.dart';
@ -12,6 +14,7 @@ import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_record_voice_widget.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bee_long_button.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:aku_new_community/widget/picker/bee_date_picker.dart';
import 'package:aku_new_community/widget/picker/bee_pick_image_widget.dart';
import 'package:aku_new_community/widget/picker/bee_picker_box.dart';
@ -118,6 +121,21 @@ class _PublishTaskPageState extends State<PublishTaskPage> {
if (!canTap) {
return;
}
var psdCode = '';
if (_rewardType == 1) {
var balance = int.parse(_rewardController.text.trim());
if (balance >
(UserTool.userProvider.userInfoModel!.balance ?? 0)) {
BotToast.showText(text: '余额不足,请前往充值');
} else {
if (!UserTool.userProvider.userInfoModel!.isBalancePayPwd) {
Get.dialog(SetPayPasswordDialog());
} else {
psdCode = await Get.dialog(InputPayPasswordDialog());
}
}
}
var cancel = BotToast.showLoading();
var _voiceUrl;
if (_voiceUri != null) {
@ -130,7 +148,6 @@ class _PublishTaskPageState extends State<PublishTaskPage> {
BotToast.showText(text: base.msg);
}
} catch (e) {
print(22222);
print(e.toString());
}
}
@ -160,7 +177,8 @@ class _PublishTaskPageState extends State<PublishTaskPage> {
voiceUrl: _voiceUrl,
imgUrls: imgs,
rewardType: _rewardType,
reward: _rewardController.text);
reward: _rewardController.text,
psd: psdCode);
if (re) {
Get.back();
}

@ -20,6 +20,7 @@ class TaskFunc {
required List<String> imgUrls,
required int rewardType,
required String reward,
required String psd,
}) async {
var base = await NetUtil().post(SAASAPI.task.insert,
params: {
@ -39,6 +40,7 @@ class TaskFunc {
'imgUrls': imgUrls,
'rewardType': rewardType,
'reward': reward,
'balancePayPwd':psd,
},
showMessage: true);
return base.success;

@ -1,15 +1,81 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/saas_model/work_order/work_order_list_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:power_logger/power_logger.dart';
import 'package:velocity_x/src/extensions/num_ext.dart';
import '../work_order_card.dart';
class AllOrderView extends StatefulWidget {
const AllOrderView({Key? key}) : super(key: key);
final EasyRefreshController refreshController;
final int index;
const AllOrderView(
{Key? key, required this.refreshController, required this.index})
: super(key: key);
@override
_AllOrderViewState createState() => _AllOrderViewState();
}
class _AllOrderViewState extends State<AllOrderView> {
class _AllOrderViewState extends State<AllOrderView>
with SingleTickerProviderStateMixin {
int _page = 1;
int _size = 10;
List<WorkOrderListModel> _models = [];
@override
Widget build(BuildContext context) {
return Container();
return EasyRefresh(
firstRefresh: true,
controller: widget.refreshController,
header: MaterialHeader(),
footer: MaterialFooter(),
onRefresh: () async {
_page = 1;
try {
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': widget.index == 0 ? null : widget.index,
});
_models =
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList();
} catch (e) {
LoggerData.addData(e.toString());
}
setState(() {});
},
onLoad: () async {
_page++;
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': widget.index == 0 ? null : widget.index,
});
if (_models.length < base.total) {
_models.addAll(
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList());
setState(() {});
} else {
widget.refreshController.finishLoad(noMore: true);
}
},
child: _models.isEmpty
? Container()
: ListView.separated(
padding: EdgeInsets.all(24.w),
itemBuilder: (context, index) {
return WorkOrderCard(
model: _models[index],
refresh: widget.refreshController.callRefresh,
);
},
separatorBuilder: (context, index) {
return 24.w.heightBox;
},
itemCount: _models.length));
;
}
}

@ -1,8 +1,6 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/saas_model/work_order/work_order_list_model.dart';
import 'package:aku_new_community/ui/function_and_service/work_order/publish_work_order_page.dart';
import 'package:aku_new_community/ui/function_and_service/work_order/work_order_card.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/ui/function_and_service/work_order/work_order_view.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/tab_bar/bee_tab_bar.dart';
import 'package:flutter/cupertino.dart';
@ -10,7 +8,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:power_logger/power_logger.dart';
import 'package:velocity_x/velocity_x.dart';
class WorkOrderPage extends StatefulWidget {
@ -62,68 +59,16 @@ class _WorkOrderPageState extends State<WorkOrderPage>
],
appBarBottom: BeeTabBar(
tabs: _tabs,
onTap: (index) {
_models.clear();
setState(() {});
},
controller: _tabController,
),
body: TabBarView(
controller: _tabController,
children:
_tabs.mapIndexed((e, index) => _getOrderView(index)).toList()),
children: _tabs
.mapIndexed((e, index) => WorkOrderView(
refreshController: _refreshControllers[index],
index: index,
))
.toList()),
);
}
Widget _getOrderView(int index) {
return EasyRefresh(
firstRefresh: true,
controller: _refreshControllers[index],
header: MaterialHeader(),
footer: MaterialFooter(),
onRefresh: () async {
_page = 1;
try {
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': index == 0 ? null : index,
});
_models =
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList();
} catch (e) {
LoggerData.addData(e.toString());
}
setState(() {});
},
onLoad: () async {
_page++;
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': index == 0 ? null : index,
});
if (_models.length < base.total) {
_models.addAll(
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList());
setState(() {});
} else {
_refreshControllers[index].finishLoad(noMore: true);
}
},
child: _models.isEmpty
? Container()
: ListView.separated(
padding: EdgeInsets.all(24.w),
itemBuilder: (context, index) {
return WorkOrderCard(
model: _models[index],
refresh: _refreshControllers[index].callRefresh,
);
},
separatorBuilder: (context, index) {
return 24.w.heightBox;
},
itemCount: _models.length));
}
}

@ -0,0 +1,79 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/saas_model/work_order/work_order_list_model.dart';
import 'package:aku_new_community/ui/function_and_service/work_order/work_order_card.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:power_logger/power_logger.dart';
import 'package:velocity_x/src/extensions/num_ext.dart';
class WorkOrderView extends StatefulWidget {
final EasyRefreshController refreshController;
final int index;
const WorkOrderView(
{Key? key, required this.refreshController, required this.index})
: super(key: key);
@override
_WorkOrderViewState createState() => _WorkOrderViewState();
}
class _WorkOrderViewState extends State<WorkOrderView> {
int _page = 1;
int _size = 10;
List<WorkOrderListModel> _models = [];
@override
Widget build(BuildContext context) {
return EasyRefresh(
firstRefresh: true,
controller: widget.refreshController,
header: MaterialHeader(),
footer: MaterialFooter(),
onRefresh: () async {
_page = 1;
try {
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': widget.index == 0 ? null : widget.index,
});
_models =
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList();
} catch (e) {
LoggerData.addData(e.toString());
}
setState(() {});
},
onLoad: () async {
_page++;
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': widget.index == 0 ? null : widget.index,
});
if (_models.length < base.total) {
_models.addAll(
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList());
setState(() {});
} else {
widget.refreshController.finishLoad(noMore: true);
}
},
child: _models.isEmpty
? Container()
: ListView.separated(
padding: EdgeInsets.all(24.w),
itemBuilder: (context, index) {
return WorkOrderCard(
model: _models[index],
refresh: widget.refreshController.callRefresh,
);
},
separatorBuilder: (context, index) {
return 24.w.heightBox;
},
itemCount: _models.length));
;
}
}

@ -38,7 +38,7 @@ class _AllApplicationPageState extends State<AllApplicationPage> {
? null
: () {
if (LoginUtil.isNotLogin) return;
if (!LoginUtil.haveRealName(object.title)) return;
// if (!LoginUtil.haveRealName(object.title)) return;
if (object.callback == null || !online) {
BotToast.showText(
text: '正在准备上线中,敬请期待', align: Alignment(0, 0.5));

@ -0,0 +1,114 @@
import 'package:aku_new_community/extensions/num_ext.dart';
import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/utils/application_utils.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/src/extensions/iterable_ext.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
class AllApplicationNewPage extends StatefulWidget {
const AllApplicationNewPage({Key? key}) : super(key: key);
@override
_AllApplicationNewPageState createState() => _AllApplicationNewPageState();
}
class _AllApplicationNewPageState extends State<AllApplicationNewPage> {
List<String> rootTypes = ['物业服务', '出行安全', '居民生活', '关于社区', '智慧服务', '附近市场'];
List<String> getApplications(int index) {
switch (index) {
case 0:
return ['报事报修', '设施预约', '生活缴费', '装修管理'];
case 1:
return [
'开门码',
'物品出门',
'地理信息',
'小蜜蜂任务',
];
case 2:
return ['便民电话', '问卷调查', '活动投票', '快递包裹', '投诉表扬', '业委会', '社区介绍', '借还管理'];
case 3:
return ['服务浏览', '周边企业', '住房说明', '电子商务'];
case 4:
return ['智慧养老', '任务发布', '周边服务', '共享投屏'];
case 5:
return ['自营商城', '邻家宠物', '共享停车', '二手市场'];
default:
return [];
}
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '全部应用',
body: ListView(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
children: rootTypes
.mapIndexed((e, index) => _applicationTile(index))
.toList()
.sepWidget(separate: 16.hb),
));
}
Container _applicationTile(int index) {
return Container(
width: 686.w,
padding: EdgeInsets.symmetric(
vertical: 32.w,
),
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(16.w)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(left: 32.w, bottom: 24.w),
child: rootTypes[index]
.text
.size(32.sp)
.color(Color(0xFF2B2B2B))
.bold
.make(),
),
ConstrainedBox(
constraints: BoxConstraints(
maxHeight: getApplications(index).length ~/ 4 * 140.w +
((getApplications(index).length - 4) ~/ 4 * 30.w)),
child: GridView.count(
shrinkWrap: true,
crossAxisCount: 4,
physics: NeverScrollableScrollPhysics(),
children: ApplicationUtil(getApplications(index))
.elements
.map((e) => applicationItem(e))
.toList(),
),
),
],
),
);
}
Widget applicationItem(AppElement appElement) {
return GestureDetector(
onTap: appElement.onTap,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Image.asset(
appElement.imgPath,
width: 96.w,
height: 96.w,
),
8.hb,
appElement.title.text.size(24.sp).color(Color(0xFF333333)).make(),
],
),
);
}
}

@ -1,11 +1,14 @@
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/models/market/integral_goods_list_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
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';
@ -17,33 +20,74 @@ class IntegralExchangePage extends StatefulWidget {
}
class _IntegralExchangePageState extends State<IntegralExchangePage> {
List<IntegralSkuModel> _models = IntegralSkuModel.examples;
List<IntegralGoodsListModel> _models = [];
int _pageNum = 1;
int _size = 10;
EasyRefreshController _easyRefreshController = EasyRefreshController();
@override
void dispose() {
_easyRefreshController.dispose();
super.dispose();
}
@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]);
})),
child: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
footer: MaterialFooter(),
controller: _easyRefreshController,
onRefresh: () async {
_pageNum = 1;
var baseList = await NetUtil().getList(
SAASAPI.market.integralGood.list,
params: {'pageNum': _pageNum, 'size': _size},
);
_models = baseList.rows
.map((e) => IntegralGoodsListModel.fromJson(e))
.toList();
setState(() {});
},
onLoad: () async {
_pageNum++;
var baseList = await NetUtil().getList(
SAASAPI.market.integralGood.list,
params: {'pageNum': _pageNum, 'size': _size},
);
if (baseList.total > _models.length) {
_models.addAll(baseList.rows
.map((e) => IntegralGoodsListModel.fromJson(e))
.toList());
} else {
_easyRefreshController.finishLoad(noMore: true);
}
setState(() {});
},
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) {
Widget _card(IntegralGoodsListModel model) {
return GestureDetector(
onTap: () {
Get.to(() => GoodDetailPage(
goodId: model.goodId,
integral: model.integral,
goodId: model.id,
integral: model.points,
integralGood: true,
));
},
@ -51,7 +95,8 @@ class _IntegralExchangePageState extends State<IntegralExchangePage> {
children: [
Container(
color: Color(0xFFF9F9F),
child: Image.network(model.imgPath, width: 332.w, height: 332.w)),
child:
Image.network(model.mainPhoto, width: 332.w, height: 332.w)),
16.w.heightBox,
'${model.skuName}'
.text
@ -65,9 +110,9 @@ class _IntegralExchangePageState extends State<IntegralExchangePage> {
children: [
Assets.icons.intergral.image(width: 24.w, height: 24.w),
4.w.widthBox,
'${model.integral}'.text.size(24.sp).color(Colors.red).make(),
'${model.points}'.text.size(24.sp).color(Colors.red).make(),
Spacer(),
'已售${model.sold}'
'已售${model.saleNum ?? 0}'
.text
.size(24.sp)
.color(Color(0xFFBDBDBD))

@ -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,
});
}

@ -7,6 +7,7 @@ import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/good/market_swiper_model.dart';
import 'package:aku_new_community/models/market/goods_popular_model.dart';
import 'package:aku_new_community/models/market/integral_goods_list_model.dart';
import 'package:aku_new_community/models/market/market_all_category_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/models/market/market_statistics_model.dart';
@ -14,7 +15,6 @@ 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';
@ -75,7 +75,7 @@ class _MarketPageState extends State<MarketPage>
List<GoodsPopularModel> _goodsPopularModelList = [];
List<IntegralSkuModel> get _integralModelList => IntegralSkuModel.examples;
List<IntegralGoodsListModel> _integralModelList = [];
int? orderBySalesVolume;
int? orderByPrice;
@ -204,7 +204,7 @@ class _MarketPageState extends State<MarketPage>
print(_goodsClassificationList.length);
_goodsPopularModelList = await CommunityFunc.getGoodsPopularModel(6);
_integralModelList = await CommunityFunc.getIntegralGoods(6);
setState(() {});
}
@ -321,9 +321,9 @@ class _MarketPageState extends State<MarketPage>
tabBarHeight +
hotGoodHeight +
ScreenUtil().statusBarHeight +
kToolbarHeight,
//
// 172 * 2.w,
kToolbarHeight +
//
172 * 2.w,
flexibleSpace: _flexibleSpaceBar(context),
bottom: PreferredSize(
preferredSize: Size.fromHeight(tabBarHeight),
@ -483,8 +483,8 @@ class _MarketPageState extends State<MarketPage>
_buttonTitle(),
20.hb,
_recommend(),
// 20.hb,
// _integralMarket(),
20.hb,
_integralMarket(),
],
),
],
@ -556,14 +556,14 @@ class _MarketPageState extends State<MarketPage>
separatorBuilder: (_, __) {
return 24.wb;
},
itemCount: 4),
itemCount: _integralModelList.length),
),
],
),
);
}
Widget _horizontalListCard(IntegralSkuModel model) {
Widget _horizontalListCard(IntegralGoodsListModel model) {
return GestureDetector(
onTap: () {},
child: SizedBox(
@ -571,7 +571,7 @@ class _MarketPageState extends State<MarketPage>
child: Column(
children: [
Image.network(
model.imgPath,
model.mainPhoto,
width: 148.w,
height: 148.w,
),
@ -587,7 +587,7 @@ class _MarketPageState extends State<MarketPage>
children: [
Assets.icons.intergral.image(width: 24.w, height: 24.w),
4.wb,
'${model.integral}'.text.size(24.sp).color(Colors.red).make()
'${model.points}'.text.size(24.sp).color(Colors.red).make()
],
)
],

@ -6,7 +6,6 @@ import 'package:aku_new_community/model/user/adress_model.dart';
import 'package:aku_new_community/models/market/good_detail_model.dart';
import 'package:aku_new_community/pages/personal/address/address_list_page.dart';
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/ui/market/collection/collection_func.dart';
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';
@ -69,9 +68,15 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
Timer? _timer;
String get receiveAddress {
final appProvider = Provider.of<AppProvider>(Get.context!);
if (_addressModel == null) {
return (_goodDetail!.defaultLocation ?? '') +
(_goodDetail!.defaultAddressDetail ?? '');
print(appProvider.defaultAddressModel?.locationName);
if (appProvider.defaultAddressModel == null) {
return '选择收货地址';
} else {
return (appProvider.defaultAddressModel!.locationName ?? '') +
(appProvider.defaultAddressModel!.addressDetail ?? '');
}
} else {
return (_addressModel!.locationName ?? '') +
(_addressModel!.addressDetail ?? '');
@ -80,16 +85,15 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
@override
void initState() {
final appProvider = Provider.of<AppProvider>(Get.context!);
super.initState();
_pageController = PageController();
_sliverListController = ScrollController();
_refreshController = EasyRefreshController();
if (appProvider.addressModel != null) {
_addressModel = appProvider.addressModel!;
} else {
_addressModel = null;
}
// if (appProvider.defaultAddressModel != null) {
// _addressModel = appProvider.defaultAddressModel!;
// } else {
// _addressModel = null;
// }
if (widget.integralGood) {
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {});
@ -413,10 +417,7 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
Container(
width: 430.w,
child: Text(
_addressModel == null
? '请先选择地址'
: (_addressModel!.locationName ?? '') +
(_addressModel!.addressDetail ?? ''),
receiveAddress,
style:
TextStyle(fontSize: 24.sp, color: ktextPrimary),
maxLines: 1,
@ -436,17 +437,21 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
120.wb,
_goodDetail!.stockStatus == 1
? '有货'
.text
.color(Color(0xFFE52E2E))
.size(28.sp)
.make()
: '无货'
.text
.color(Color(0xFFE52E2E))
.size(28.sp)
.make(),
20.hb,
Offstage(
offstage: receiveAddress == '选择收货地址',
child: (_goodDetail!.stockStatus == 1)
? '有货'
.text
.color(Color(0xFFE52E2E))
.size(28.sp)
.make()
: '无货'
.text
.color(Color(0xFFE52E2E))
.size(28.sp)
.make(),
)
],
),
],
@ -661,7 +666,10 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
children: [
GestureDetector(
onTap: () async {
await SearchFunc.addGoodsCar(_goodDetail!.id);
var re = await SearchFunc.addGoodsCar(_goodDetail!.id);
if (re) {
Get.back();
}
},
child: Container(
width: 230.w,
@ -684,7 +692,11 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
GestureDetector(
onTap: () {
if (_goodDetail!.stockStatus == 0) {
BotToast.showText(text: '商品库存不足');
if (receiveAddress == '选择收货地址') {
BotToast.showText(text: '请添加收货地址');
} else {
BotToast.showText(text: '商品库存不足');
}
} else {
Get.to(() => SubmitOrderNormalPage(
goodModel: _goodDetail!,
@ -768,5 +780,4 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
return count + '';
}
_getSpecifications() {}
}

@ -78,13 +78,8 @@ class SearchFunc {
///
static Future<bool> addGoodsCar(int jcookGoodsId) async {
BaseModel model = await NetUtil().get(
SAASAPI.market.shopCart.insert,
params: {'appGoodsPushId': jcookGoodsId},
);
if (!model.success) {
BotToast.showText(text: model.msg);
}
BaseModel model = await NetUtil().get(SAASAPI.market.shopCart.insert,
params: {'appGoodsPushId': jcookGoodsId}, showMessage: true);
return model.success;
}

@ -57,8 +57,8 @@ class _SubmitOrderPageState extends State<SubmitOrderPage> {
SettlementGoodsDTO(appGoodsPushId: element.id, num: element.num));
});
if (appProvider.addressModel != null) {
_addressModel = appProvider.addressModel!;
if (appProvider.defaultAddressModel != null) {
_addressModel = appProvider.defaultAddressModel!;
createOrder(_addressModel!.id!, _goodsList);
} else {
_addressModel = null;

@ -59,8 +59,8 @@ class _SubmitOrderNormalPageState extends State<SubmitOrderNormalPage> {
_goodsList
.add(SettlementGoodsDTO(appGoodsPushId: widget.goodModel.id, num: 1));
if (appProvider.addressModel != null) {
_addressModel = appProvider.addressModel!;
if (appProvider.defaultAddressModel != null) {
_addressModel = appProvider.defaultAddressModel!;
createOrder(_addressModel!.id!, _goodsList);
} else {
_addressModel = null;
@ -153,12 +153,11 @@ class _SubmitOrderNormalPageState extends State<SubmitOrderNormalPage> {
}
Function cancel = BotToast.showLoading();
BaseModel baseModel = await NetUtil()
.post(API.pay.jcookOrderCreateByIntegral, params: {
.post(SAASAPI.market.integralGood.createPointsOrder, params: {
"addressId": _addressModel!.id!,
"settlementGoodsDTOList":
_goodsList.map((v) => v.toJson()).toList(),
"payType": 10, //
"payPrice": totalPrice,
'points': widget.integral,
});
if (baseModel.success) {

@ -11,6 +11,7 @@ import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bee_check_radio.dart';
import 'package:aku_new_community/widget/buttons/end_button.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -293,7 +294,7 @@ class _ShopCarPageState extends State<ShopCarPage> {
'¥'
.richText
.withTextSpanChildren([
sellPrice
NumUtil.add(sellPrice, 0)
.toInt()
.toString()
.textSpan
@ -326,6 +327,9 @@ class _ShopCarPageState extends State<ShopCarPage> {
children: [
GestureDetector(
onTap: () {
if (model.goodStatus == GoodStatus.unSell) {
return;
}
if (_selectIndex.contains(index)) {
_selectIndex.remove(index);
_chooseModels.remove(model);
@ -409,6 +413,8 @@ class _ShopCarPageState extends State<ShopCarPage> {
),
),
Positioned(
top: 0,
left: 0,
child: _getGoodsStatusImg(model.goodStatus) ?? SizedBox())
],
),
@ -470,9 +476,12 @@ class _ShopCarPageState extends State<ShopCarPage> {
switch (status) {
case GoodStatus.unSell:
return Container(
width: double.infinity,
height: double.infinity,
color: Color(0xFF000000).withOpacity(0.5),
width: 220.w,
height: 220.w,
decoration: BoxDecoration(
color: Color(0xFF000000).withOpacity(0.5),
borderRadius: BorderRadius.circular(16.w),
),
alignment: Alignment.center,
child: Text(
'已下架',

@ -140,11 +140,7 @@ class _MyFamilyPageState extends State<MyFamilyPage>
child: AddHouseButton(
text: '添加房屋',
onTap: () async {
if (UserTool.userProvider.userInfoModel?.name == null) {
await Get.dialog(CertificationDialog());
} else {
Get.to(() => AddHousePage());
}
}),
)
: SizedBox(),

@ -76,11 +76,8 @@ class _MyHousePageState extends State<MyHousePage> {
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
child: AddHouseButton(
onTap: () async {
if (UserTool.userProvider.userInfoModel?.name == null) {
await Get.dialog(CertificationDialog());
} else {
Get.to(() => AddHousePage());
}
},
text: '添加房屋',
),

@ -77,7 +77,7 @@ class _BeeSearchState extends State<BeeSearch> {
return MaterialButton(
onPressed: () {
if (LoginUtil.isNotLogin) return;
if (!LoginUtil.haveRealName(e.title)) return;
// if (!LoginUtil.haveRealName(e.title)) return;
if (e.callback == null) {
BotToast.showText(text: '该功能正在准备上线中,敬请期待', align: Alignment(0, 0.5));
} else {

@ -0,0 +1,302 @@
import 'dart:ui';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/pages/community_introduce/community_introduce_page.dart';
import 'package:aku_new_community/pages/convenient_phone/convenient_phone_page.dart';
import 'package:aku_new_community/pages/electronic_commerc/electronic_commerc_page.dart';
import 'package:aku_new_community/pages/event_activity/event_voting_page.dart';
import 'package:aku_new_community/pages/express_packages/express_package_page.dart';
import 'package:aku_new_community/pages/geographic_information/geographic_information_page.dart';
import 'package:aku_new_community/pages/goods_deto_page/goods_deto_page.dart';
import 'package:aku_new_community/pages/goods_manage_page/select_borrow_return_page.dart';
import 'package:aku_new_community/pages/house_introduce/house_introduce.dart';
import 'package:aku_new_community/pages/industry_committee/industry_committee_page.dart';
import 'package:aku_new_community/pages/life_pay/life_pay_page_new.dart';
import 'package:aku_new_community/pages/opening_code_page/opening_code_page.dart';
import 'package:aku_new_community/pages/renovation_manage/new_renovation/new_renovation_page.dart';
import 'package:aku_new_community/pages/service_browse/service_browse_page.dart';
import 'package:aku_new_community/pages/services/old_age/old_age_support_page_simple.dart';
import 'package:aku_new_community/pages/surrounding_enterprises/surrounding_enterprises_page.dart';
import 'package:aku_new_community/ui/community/facility/facility_appointment_page.dart';
import 'package:aku_new_community/ui/function_and_service/task/task_page.dart';
import 'package:aku_new_community/ui/function_and_service/work_order/work_order_page.dart';
import 'package:aku_new_community/ui/home/application/all_application.dart';
import 'package:aku_new_community/ui/manager/advice/advice_page.dart';
import 'package:aku_new_community/ui/manager/questionnaire/questionnaire_page.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:equatable/equatable.dart';
import 'package:get/get.dart';
class ApplicationUtil {
ApplicationUtil(this.titles);
List<String> titles = [];
List<AppElement> get elements {
var list = <AppElement>[];
this.titles.forEach((element) {
var re = _findByTitle(element);
if (re != null) {
list.add(re);
}
});
return list;
}
AppElement? _findByTitle(String title) {
for (var item in allApplications) {
if (title == item.title) {
return item;
} else if (item.nickTitles.contains(title)) {
return item;
}
}
}
List<AppElement> get allApplications => [
AppElement(
title: '开门码',
imgPath: Assets.newIcon.icKmm.path,
onTap: () => Get.to(() => OpeningCodePage())),
// AppElement('访客邀请', R.ASSETS_ICONS_FUNC_FKYQ_PNG, () => Get.to(()=>VisitorAccessPage()),
AppElement(
title: '报事报修',
imgPath: Assets.home.icBsbx.path,
onTap: () => Get.to(() => WorkOrderPage())),
AppElement(
title: '生活缴费',
imgPath: Assets.home.icShjf.path,
onTap: () => Get.to(() => LifePayPageNew())),
AppElement(
title: '业委会',
imgPath: Assets.newIcon.icYwh.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
Get.to(() => IndustryCommitteePage());
}),
// AppElement('建议咨询', R.ASSETS_ICONS_FUNC_JYZX_PNG,
// () => AdvicePage(type: AdviceType.SUGGESTION)),
AppElement(
title: '便民电话',
imgPath: Assets.newIcon.imgBmdh.path,
onTap: () {
Get.to(() => ConvenientPhonePage());
}),
AppElement(
title: '活动投票',
imgPath: Assets.newIcon.icHdtp.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
Get.to(() => EventVotingPage());
}),
AppElement(
title: '物品出门',
imgPath: Assets.newIcon.imgWpcm.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
Get.to(() => GoodsDetoPage());
}),
AppElement(
title: '投诉表扬',
imgPath: Assets.newIcon.icTsby.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
Get.to(() => AdvicePage(type: AdviceType.COMPLAIN));
}),
AppElement(
title: '问卷调查',
imgPath: Assets.newIcon.icWjdc.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
Get.to(() => QuestionnairePage());
}),
AppElement(
title: '装修管理',
imgPath: Assets.newIcon.imgZxgl.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => NewRenovationPage());
}),
AppElement(
title: '借还管理',
imgPath: Assets.newIcon.icJhgl.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
Get.to(SelectBorrowReturnPage());
}),
// AppElement('一键报警', Assets.newIcon.yj, () => AlarmPage()),
AppElement(
title: '设施预约',
imgPath: Assets.home.icSsyy.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => FacilityAppointmentPage());
}),
AppElement(
title: '快递包裹',
imgPath: Assets.newIcon.icKdbg.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => ExpressPackagePage());
}),
AppElement(
title: '电子商务',
imgPath: Assets.newIcon.icDzsw.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => ElectronicCommercPage());
}),
AppElement(
title: '服务浏览',
imgPath: Assets.newIcon.icFwll.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => ServiceBrowsePage());
}),
AppElement(
title: '社区介绍',
imgPath: Assets.newIcon.icSqjs.path,
onTap: () {
Get.to(() => CommunityIntroducePage());
}),
// AppElement('家政服务', R.ASSETS_ICONS_FUNC_JZFW_PNG, () => HouseKeepingPage()),
AppElement(
title: '地理信息',
imgPath: Assets.newIcon.icDlxx.path,
onTap: () {
Get.to(() => GeographicInformationPage());
}),
AppElement(
title: '周边企业',
imgPath: Assets.newIcon.icZbqy.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => SurroundingEnterprisesPage());
}),
AppElement(
title: '住房说明',
imgPath: Assets.newIcon.icRwsm.path,
onTap: () {
BotToast.showText(text: '此功能升级中,敬请期待');
return;
Get.to(() => HouseIntroducePage());
}),
AppElement(
title: '智慧养老',
imgPath: Assets.home.icZhyl.path,
onTap: () {
Get.to(() => OldAgeSupportPageSimple());
}),
AppElement(
title: '周边服务',
imgPath: Assets.home.icZbfw.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
}),
AppElement(
title: '任务发布',
imgPath: Assets.home.icRwfb.path,
onTap: () => Get.to(() => TaskPage()),
nickTitles: ['小蜜蜂任务']),
AppElement(
title: '自营商城',
imgPath: Assets.newIcon.icZysc.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
}),
AppElement(
title: '邻家宠物',
imgPath: Assets.home.icLjcw.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
}),
AppElement(
title: '共享停车',
imgPath: Assets.newIcon.icGxtc.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
}),
AppElement(
title: '二手市场',
imgPath: Assets.newIcon.icEssc.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
}),
AppElement(
title: '共享投屏',
imgPath: Assets.newIcon.icGxtp.path,
onTap: () {
BotToast.showText(text: '此功能暂未上线');
return;
}),
AppElement(
title: '全部应用',
imgPath: Assets.home.icQbyy.path,
onTap: () => Get.to(() => AllApplicationPage())),
// AppElement(
// '小区教育',
// R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// () => BeeScaffold(title: '小区教育'),
// ),
// AppElement(
// '健康运动',
// R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// () => BeeScaffold(title: '健康运动'),
// ),
// AppElement(
// '家政服务',
// R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// () => BeeScaffold(title: '家政服务'),
// ),
// AppElement(
// '居家养老',
// R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// () => BeeScaffold(title: '居家养老'),
// ),
// AppElement(
// '物业租赁',
// R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// () => BeeScaffold(title: '物业租赁'),
// ),
];
}
class AppElement extends Equatable {
final String title;
final String imgPath;
final VoidCallback onTap;
final List<String> nickTitles;
const AppElement({
required this.title,
required this.imgPath,
required this.onTap,
this.nickTitles = const [],
});
@override
List<Object?> get props => [
title,
imgPath,
onTap,
];
}

@ -37,7 +37,7 @@ class HiveStore {
Hive.registerAdapter(HistoryLoginModelAdapter()); //HiveTypeId:4
Hive.registerAdapter(UserConfigModelAdapter()); //HiveTypeId:5
Hive.registerAdapter(PickedCityModelAdapter()); //HiveTypeId:6
Hive.registerAdapter(CommunityModelAdapter());
Hive.registerAdapter(CommunityModelAdapter()); //HiveTypeId:7
_appBox = await Hive.openBox('app');
_userBox = await Hive.openBox('userBox');
_dataBox = await Hive.openBox('dataBox');

@ -30,16 +30,16 @@ class LoginUtil {
///
static bool get isNotLogin => !isLogin;
static bool haveRealName(String name) {
// if (!name.contains(RegExp('访客邀请|报事报修|建议咨询|生活缴费|物品出门|投诉表扬|我的访客|我的报修|我的缴费')))
// return true;
final userProvider = Provider.of<UserProvider>(Get.context!, listen: false);
if (userProvider.userInfoModel!.name == null) {
Get.dialog(CertificationDialog());
return false;
}
return true;
}
// static bool haveRealName(String name) {
// // if (!name.contains(RegExp('访客邀请|报事报修|建议咨询|生活缴费|物品出门|投诉表扬|我的访客|我的报修|我的缴费')))
// // return true;
// final userProvider = Provider.of<UserProvider>(Get.context!, listen: false);
// if (userProvider.userInfoModel!.name == null) {
// Get.dialog(CertificationDialog());
// return false;
// }
// return true;
// }
static bool haveRoom(String name) {
// if (!name.contains(RegExp('访客邀请|报事报修|建议咨询|生活缴费|物品出门|投诉表扬|我的访客|我的报修|我的缴费')))

@ -3,10 +3,12 @@ import 'dart:typed_data';
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/pages/sign/login/other_login_page.dart';
import 'package:aku_new_community/pages/splash/app_verify_dialog.dart';
import 'package:aku_new_community/provider/user_provider.dart';
import 'package:aku_new_community/utils/developer_util.dart';
import 'package:aku_new_community/utils/network/base_list_model.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/widget/dialog/certification_dialog.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:common_utils/common_utils.dart';
import 'package:dio/dio.dart';
@ -212,9 +214,10 @@ class NetUtil {
userProvider.logout();
//
Get.offAll(() => OtherLoginPage());
if (userProvider.isLogin) {
BotToast.showText(text: model.msg);
}
}
if (model.code==10100) {
BotToast.showText(text: '请先实名认证');
Get.dialog(CertificationDialog());
}
}
}

@ -9,9 +9,15 @@ class BeeCheckRadio<T> extends StatefulWidget {
final List<T>? groupValue;
final Widget? indent;
final Color? backColor;
final double? size;
BeeCheckRadio(
{Key? key, this.value, this.groupValue, this.indent, this.backColor})
{Key? key,
this.value,
this.groupValue,
this.indent,
this.backColor,
this.size})
: super(key: key);
@override
@ -30,8 +36,8 @@ class _BeeCheckRadioState extends State<BeeCheckRadio> {
@override
Widget build(BuildContext context) {
return AnimatedContainer(
height: 40.w,
width: 40.w,
height: widget.size ?? 40.w,
width: widget.size ?? 40.w,
decoration: BoxDecoration(
color: widget.backColor ?? kPrimaryColor.withOpacity(_selected ? 1 : 0),
border: Border.all(
@ -40,7 +46,7 @@ class _BeeCheckRadioState extends State<BeeCheckRadio> {
: (_selected ? kPrimaryColor : Color(0xFF979797)),
width: 3.w,
),
borderRadius: BorderRadius.circular(20.w),
borderRadius: BorderRadius.circular((widget.size??40.w)/2),
),
duration: Duration(milliseconds: 300),
curve: Curves.easeInOutCubic,

@ -8,13 +8,14 @@ class BeeLongButton extends StatelessWidget {
final String text;
final Color backColor;
final BorderSide border;
final double? width;
const BeeLongButton({Key? key, required this.onPressed, required this.text})
const BeeLongButton({Key? key, required this.onPressed, required this.text, this.width})
: backColor = kPrimaryColor,
border = BorderSide.none,
super(key: key);
BeeLongButton.white({Key? key, required this.onPressed, required this.text})
BeeLongButton.white({Key? key, required this.onPressed, required this.text, this.width})
: backColor = Colors.white,
border = BorderSide(color: Colors.black.withOpacity(0.45)),
super(key: key);
@ -24,6 +25,7 @@ class BeeLongButton extends StatelessWidget {
return MaterialButton(
elevation: 0,
height: 93.w,
minWidth: width,
disabledColor: Colors.black.withOpacity(0.06),
disabledTextColor: Colors.black.withOpacity(0.25),
textColor: Colors.black.withOpacity(0.85),

@ -1,3 +1,4 @@
import 'package:aku_new_community/widget/picker/bee_month_pick_body.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -7,8 +8,7 @@ import 'package:velocity_x/velocity_x.dart';
import 'package:aku_new_community/widget/picker/bee_custom_picker.dart';
class BeeDatePicker {
static Future<DateTime?> pick(
DateTime initDate, {
static Future<DateTime?> pick(DateTime initDate, {
CupertinoDatePickerMode mode = CupertinoDatePickerMode.date,
DateTime? min,
DateTime? max,
@ -29,6 +29,12 @@ class BeeDatePicker {
mode: CupertinoDatePickerMode.dateAndTime,
));
}
static Future<DateTime?> monthPicker(DateTime initDate) async {
return await Get.bottomSheet(
BeeMonthPickBody(initTime: initDate)
);
}
}
class _BeeDatePicker extends StatefulWidget {

@ -88,9 +88,9 @@ class _BeeHouseCascadePickerState extends State<BeeHouseCascadePicker> {
child: CupertinoPicker(
onSelectedItemChanged: (int value) {
_pickBuildingIndex = value;
// _pickUnitIndex = 0;
// _pickFloorIndex = 0;
// _pickHouseIndex = 0;
_pickUnitIndex = 0;
_pickFloorIndex = 0;
_pickHouseIndex = 0;
_unitController.jumpToItem(0);
_floorController.jumpToItem(0);
_houseController.jumpToItem(0);
@ -111,8 +111,8 @@ class _BeeHouseCascadePickerState extends State<BeeHouseCascadePicker> {
child: CupertinoPicker(
onSelectedItemChanged: (int value) {
_pickUnitIndex = value;
// _pickFloorIndex = 0;
// _pickHouseIndex = 0;
_pickFloorIndex = 0;
_pickHouseIndex = 0;
_floorController.jumpToItem(0);
_houseController.jumpToItem(0);
setState(() {});
@ -132,7 +132,7 @@ class _BeeHouseCascadePickerState extends State<BeeHouseCascadePicker> {
child: CupertinoPicker(
onSelectedItemChanged: (int value) {
_pickFloorIndex = value;
// _pickHouseIndex = 0;
_pickHouseIndex = 0;
_houseController.jumpToItem(0);
setState(() {});
},

@ -0,0 +1,111 @@
import 'package:aku_new_community/saas_model/login/china_region_model.dart';
import 'package:aku_new_community/saas_model/login/picked_city_model.dart';
import 'package:aku_new_community/utils/hive_store.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'bee_picker_box.dart';
class BeeMonthPickBody extends StatefulWidget {
final DateTime initTime;
BeeMonthPickBody({Key? key, required this.initTime}) : super(key: key);
@override
_BeeMonthPickBodyState createState() => _BeeMonthPickBodyState();
}
class _BeeMonthPickBodyState extends State<BeeMonthPickBody> {
final FixedExtentScrollController _yearController =
FixedExtentScrollController();
final FixedExtentScrollController _monthController =
FixedExtentScrollController();
DateTime get _pickedTime => DateTime(_pickYear,_pickMonth) ;
List<int> get _years => List.generate(
DateTime.now().year - widget.initTime.year+1,
(index) => widget.initTime.year + index);
late int _pickYear;
late int _pickMonth;
List<int> get _months => List.generate(
_pickYear == DateTime.now().year ? DateTime.now().month : 12,
(index) => index + 1);
@override
void initState() {
_pickYear = widget.initTime.year;
_pickMonth = 1;
super.initState();
}
@override
void dispose() {
_yearController.dispose();
_monthController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeePickerBox(
onPressed: () {
Navigator.pop(context, _pickedTime);
},
child: Row(
children: [
Expanded(
child: CupertinoPicker(
itemExtent: 80.w,
magnification: 1.0,
looping: false,
scrollController: _yearController,
onSelectedItemChanged: (index) {
_pickYear = _years[index];
_pickMonth = 1;
setState(() {});
},
children: _years
.map((e) => Center(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 20.w),
child:
Text(e.toString()+'', textAlign: TextAlign.center),
),
))
.toList()),
),
Expanded(
child: CupertinoPicker(
itemExtent: 80.w,
magnification: 1.0,
// offAxisFraction: 0.6,
looping: true,
scrollController: _monthController,
onSelectedItemChanged: (index) {
_pickMonth = _months[index];
setState(() {});
},
children: _months.isEmpty
? [Container()]
: _months
.map((e) => Center(
child: Padding(
padding: EdgeInsets.only(
left: 20.w,
right: 20.w,
top: 10.w,
bottom: 10.w),
child: Text(e.toString()+'',
textAlign: TextAlign.center),
),
))
.toList(),
),
),
],
),
);
}
}

@ -34,7 +34,7 @@ class _ApplicationViewState extends State<ApplicationView> {
padding: EdgeInsets.zero,
onPressed: () {
if (LoginUtil.isNotLogin) return;
if (!LoginUtil.haveRealName(object.title)) return;
// if (!LoginUtil.haveRealName(object.title)) return;
if (object.callback == null) {
BotToast.showText(text: '该功能正在准备上线中,敬请期待', align: Alignment(0, 0.5));
} else {

File diff suppressed because it is too large Load Diff

@ -20,7 +20,7 @@ dependencies:
#状态管理
provider: ^6.0.0
#屏幕适配
flutter_screenutil: ^5.0.0+2
flutter_screenutil: ^5.3.1
#图标集合
cupertino_icons: ^1.0.3
#超链接 跳转拨号等
@ -150,7 +150,6 @@ flutter:
- assets/tab/
- assets/applications/
- assets/static/
- assets/json/
- assets/bracelet/
- assets/home/
- assets/newIcon/

@ -1,19 +0,0 @@
class Config {
///
static const String homeDir = '/users/zhangmeng';
///
static const String packageName = 'aku_new_community';
///
static String get buildPath =>
'./build/app/outputs/flutter-apk/app-release.apk';
///
static String get apkDevDir =>
'/users/zhangmeng/team/bee/app/aku_new_community/dev';
///
static String get apkDir =>
'/users/zhangmeng/team/bee/app/aku_new_community/release';
}
Loading…
Cancel
Save