Jolie 4 months ago
parent
commit
adaa6c1203
11 changed files with 181 additions and 66 deletions
  1. 9
      lib/controller/mine/auth_controller.dart
  2. 21
      lib/controller/mine/user_controller.dart
  3. 62
      lib/extension/router_service.dart
  4. 50
      lib/model/mine/user_data.dart
  5. 42
      lib/pages/home/nearby_tab.dart
  6. 42
      lib/pages/home/recommend_tab.dart
  7. 3
      lib/pages/main/main_page.dart
  8. 6
      lib/pages/mine/auth_center_page.dart
  9. 3
      lib/pages/mine/mine_page.dart
  10. 8
      pubspec.lock
  11. 1
      pubspec.yaml

9
lib/controller/mine/auth_controller.dart

@ -74,6 +74,11 @@ class AuthController extends GetxController {
return id[17].toUpperCase() == checkCode;
}
void changeAuth(int index){
AuthCard card = dataList.firstWhere((item) => item.index == index);
card.authed = true;
}
Future<void> startAuthing() async {
if (name.value.isEmpty) {
SmartDialog.showToast('请输入姓名');
@ -103,7 +108,7 @@ class AuthController extends GetxController {
if (response.data.isSuccess) {
GlobalData().userData?.realAuth = true;
SmartDialog.showToast('认证成功');
Get.back(result: {'index': 3});
Get.back(result: 3);
} else {
SmartDialog.showToast(response.data.message);
}
@ -120,7 +125,7 @@ class AuthCard {
final String title;
final String desc;
final int index;
final bool authed;
bool authed;
AuthCard({
required this.desc,

21
lib/controller/mine/user_controller.dart

@ -75,6 +75,16 @@ class UserController extends GetxController {
final response = await _userApi.getMarriageInformationDetail();
if (response.data.isSuccess) {
// data是否为null或者是空对象
print(78111);
if(response.data.data == null){
if(isMain){
SmartDialog.showToast('转到完善信息');
Get.to(() => UserInfoPage());
} else {
Get.offAll(() => UserInfoPage());
}
return;
}
final information = response.data.data!;
if (information.id.isNotEmpty) {
final result = await _userApi.getCertificationList(information.id);
@ -83,16 +93,21 @@ class UserController extends GetxController {
information.realAuth = record.status == 1;
}
GlobalData().userData = information;
print(95111);
print(GlobalData().userData);
if (information.id.isEmpty || information.genderCode.isNaN || information.birthYear == null) {
//
SmartDialog.showToast('转到完善信息');
//
Get.offAll(() => UserInfoPage());
if(isMain){
SmartDialog.showToast('转到完善信息');
Get.to(() => UserInfoPage());
} else {
Get.offAll(() => UserInfoPage());
}
} else if(!isMain){
Get.offAll(MainPage());
}
} else {
//
}
} catch (e) {
//

62
lib/extension/router_service.dart

@ -0,0 +1,62 @@
//
import 'package:dating_touchme_app/controller/global.dart';
import 'package:get/get.dart';
import '../pages/mine/user_info_page.dart';
class RouteGuardService extends GetxService {
static RouteGuardService get to => Get.find();
//
Future<T?> toWithAuth<T>(dynamic page, dynamic arguments) async {
bool checked = false;
if (GlobalData().userData != null) {
final information = GlobalData().userData!;
if(information.id.isNotEmpty && information.birthYear != null){
checked = true;
}
}
if(!checked){
final result = await Get.to(() => UserInfoPage());
if (result != true) {
// return null;
}
return null;
}
return Get.to(() => page, arguments: arguments);
}
//
// Future<T?> toWithRole<T>(dynamic page, String requiredRole) async {
// //
// if (!await _checkAuth()) return null;
//
// //
// if (!AuthService.to.hasRole(requiredRole)) {
// Get.snackbar('权限不足', '需要$requiredRole权限');
// return null;
// }
//
// return Get.to(() => page);
// }
// VIP
// Future<T?> toWithVIP<T>(dynamic page) async {
// if (!await _checkAuth()) return null;
//
// if (!AuthService.to.isVIP.value) {
// final result = await Get.to(() => VIPPurchasePage());
// if (result != true) return null;
// }
// return Get.to(() => page);
// }
// Future<bool> _checkAuth() async {
// if (!AuthService.to.isLoggedIn.value) {
// final result = await Get.to(() => LoginPage());
// return result == true;
// }
// return true;
// }
}

50
lib/model/mine/user_data.dart

@ -9,55 +9,55 @@ class UserData {
final String genderValue;
final String? homeCountryCode;
final String? homeCountry;
final String? provinceCode;
final int? provinceCode;
final String? provinceName;
final String? cityCode;
final int? cityCode;
final String? cityName;
final String? districtCode;
final int? districtCode;
final String? districtName;
final String? birthYear;
final String? birthDate;
final String? constellationCode;
final int? constellationCode;
final String? constellation;
final String? chineseZodiacCode;
final int? chineseZodiacCode;
final String? chineseZodiac;
final String? height;
final String? weight;
final int? height;
final int? weight;
final int? educationCode;
final String? education;
final String? maritalStatusCode;
final int? maritalStatusCode;
final String? maritalStatusName;
final String? minimumIncome;
final String? maximumIncome;
final String? incomeCode;
final int? minimumIncome;
final int? maximumIncome;
final int? incomeCode;
final String? income;
final String? describeInfo;
final String? domicilePlaceProvinceCode;
final int? domicilePlaceProvinceCode;
final String? domicilePlaceProvinceName;
final String? domicilePlaceCityCode;
final int? domicilePlaceCityCode;
final String? domicilePlaceCityName;
final String? nationCode;
final int? nationCode;
final String? nation;
final String? bodilyFormCode;
final int? bodilyFormCode;
final String? bodilyForm;
final String? accountTypeCode;
final int? accountTypeCode;
final String? accountTypeName;
final String? nationalityCode;
final int? nationalityCode;
final String? nationality;
final String? nativePlaceCode;
final int? nativePlaceCode;
final String? nativePlaceName;
final String? industryCode;
final int? industryCode;
final String? industry;
final String? occupationCode;
final int? occupationCode;
final String? occupation;
final String? onlyChild;
final String? carPurchaseSituationCode;
final int? onlyChild;
final int? carPurchaseSituationCode;
final String? carPurchaseSituation;
final String? propertyPermitsCode;
final int? propertyPermitsCode;
final String? propertyPermits;
final String? hometownProvinceCode;
final int? hometownProvinceCode;
final String? hometownProvinceName;
final String? hometownCityCode;
final int? hometownCityCode;
final String? hometownCityName;
bool? realAuth;

42
lib/pages/home/nearby_tab.dart

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:dating_touchme_app/controller/home/home_controller.dart';
import 'package:dating_touchme_app/model/home/marriage_data.dart';
import 'package:dating_touchme_app/pages/home/content_card.dart';
@ -16,15 +16,12 @@ class NearbyTab extends StatefulWidget {
class _NearbyTabState extends State<NearbyTab>
with AutomaticKeepAliveClientMixin {
final HomeController controller = Get.find<HomeController>();
late final EasyRefreshController _refreshController;
late final RefreshController _refreshController;
@override
void initState() {
super.initState();
_refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
_refreshController = RefreshController(initialRefresh: false);
}
@override
@ -46,46 +43,57 @@ class _NearbyTabState extends State<NearbyTab>
final bool isLoading = controller.nearbyIsLoading.value;
final bool hasMore = controller.nearbyHasMore.value;
return EasyRefresh(
return SmartRefresher(
controller: _refreshController,
header: MaterialHeader(backgroundColor: Colors.red.withOpacity(0.9)),
footer: MaterialFooter(backgroundColor: Colors.red.withOpacity(0.9)),
enablePullDown: true,
enablePullUp: true,
header: const ClassicHeader(
refreshingText: '正在刷新...',
completeText: '刷新完成',
idleText: '下拉刷新',
releaseText: '释放刷新',
),
footer: ClassicFooter(
idleText: '上拉加载',
loadingText: '正在加载...',
noDataText: '没有更多数据',
canLoadingText: '释放加载',
),
//
onRefresh: () async {
print('同城列表下拉刷新被触发');
try {
await controller.refreshNearbyData();
_refreshController.finishRefresh(IndicatorResult.success);
_refreshController.refreshCompleted();
print('同城列表刷新完成');
} catch (e) {
print('同城列表刷新失败: $e');
_refreshController.finishRefresh(IndicatorResult.fail);
_refreshController.refreshFailed();
}
},
//
onLoad: () async {
onLoading: () async {
print('同城列表上拉加载被触发, hasMore: $hasMore');
if (hasMore && controller.nearbyHasMore.value) {
try {
await controller.loadNearbyMoreData();
//
if (controller.nearbyHasMore.value) {
_refreshController.finishLoad(IndicatorResult.success);
_refreshController.loadComplete();
print('同城列表加载更多成功');
} else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('同城列表没有更多数据了');
}
} catch (e) {
print('同城列表加载更多失败: $e');
_refreshController.finishLoad(IndicatorResult.fail);
_refreshController.loadFailed();
}
} else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('同城列表没有更多数据');
}
},
// EasyRefresh child Widget
child: ListView.separated(
// 使
physics: const AlwaysScrollableScrollPhysics(

42
lib/pages/home/recommend_tab.dart

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:dating_touchme_app/controller/home/home_controller.dart';
import 'package:dating_touchme_app/model/home/marriage_data.dart';
import 'package:dating_touchme_app/pages/home/content_card.dart';
@ -16,15 +16,12 @@ class RecommendTab extends StatefulWidget {
class _RecommendTabState extends State<RecommendTab>
with AutomaticKeepAliveClientMixin {
final HomeController controller = Get.find<HomeController>();
late final EasyRefreshController _refreshController;
late final RefreshController _refreshController;
@override
void initState() {
super.initState();
_refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
_refreshController = RefreshController(initialRefresh: false);
}
@override
@ -46,46 +43,57 @@ class _RecommendTabState extends State<RecommendTab>
final bool isLoading = controller.recommendIsLoading.value;
final bool hasMore = controller.recommendHasMore.value;
return EasyRefresh(
return SmartRefresher(
controller: _refreshController,
header: MaterialHeader(backgroundColor: Colors.red.withOpacity(0.9)),
footer: MaterialFooter(backgroundColor: Colors.red.withOpacity(0.9)),
enablePullDown: true,
enablePullUp: true,
header: const ClassicHeader(
refreshingText: '正在刷新...',
completeText: '刷新完成',
idleText: '下拉刷新',
releaseText: '释放刷新',
),
footer: ClassicFooter(
idleText: '上拉加载',
loadingText: '正在加载...',
noDataText: '没有更多数据',
canLoadingText: '释放加载',
),
//
onRefresh: () async {
print('推荐列表下拉刷新被触发');
try {
await controller.refreshRecommendData();
_refreshController.finishRefresh(IndicatorResult.success);
_refreshController.refreshCompleted();
print('推荐列表刷新完成');
} catch (e) {
print('推荐列表刷新失败: $e');
_refreshController.finishRefresh(IndicatorResult.fail);
_refreshController.refreshFailed();
}
},
//
onLoad: () async {
onLoading: () async {
print('推荐列表上拉加载被触发, hasMore: $hasMore');
if (hasMore && controller.recommendHasMore.value) {
try {
await controller.loadRecommendMoreData();
//
if (controller.recommendHasMore.value) {
_refreshController.finishLoad(IndicatorResult.success);
_refreshController.loadComplete();
print('推荐列表加载更多成功');
} else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('推荐列表没有更多数据了');
}
} catch (e) {
print('推荐列表加载更多失败: $e');
_refreshController.finishLoad(IndicatorResult.fail);
_refreshController.loadFailed();
}
} else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('推荐列表没有更多数据');
}
},
// EasyRefresh child Widget
child: ListView.separated(
// 使
physics: const AlwaysScrollableScrollPhysics(

3
lib/pages/main/main_page.dart

@ -7,6 +7,7 @@ import 'package:get_storage/get_storage.dart';
import 'package:dating_touchme_app/controller/mine/user_controller.dart';
import '../../extension/router_service.dart';
import '../../widget/double_tap_to_exit_widget.dart';
import '../discover/discover_page.dart';
import '../home/home_page.dart';
@ -43,7 +44,7 @@ class _MainPageState extends State<MainPage> {
// UserController并调用获取环信用户token的方法
final userController = Get.put(UserController());
userController.getHxUserToken();
Get.put(RouteGuardService());
// token并调用获取婚姻信息详情的方法
checkTokenAndFetchMarriageInfo();
}

6
lib/pages/mine/auth_center_page.dart

@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../controller/mine/auth_controller.dart';
import '../../extension/router_service.dart';
import 'edit_info_page.dart';
class AuthCenterPage extends StatelessWidget {
@ -115,9 +116,12 @@ class AuthCenterPage extends StatelessWidget {
if(!item.authed){
if(item.index == 2){
Get.to(() => EditInfoPage());
// Get.to(widget.path);
} else if(item.index == 3){
final result = await Get.to(() => RealNamePage());
print(result);
if(result > 0){
controller.changeAuth(result);
}
}
}
});

3
lib/pages/mine/mine_page.dart

@ -6,6 +6,8 @@ import 'package:dating_touchme_app/generated/assets.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../extension/router_service.dart';
class MinePage extends StatefulWidget {
const MinePage({super.key});
@ -239,6 +241,7 @@ class _BlockItemState extends State<BlockItem> {
onTap: (){
// context.pushNamed(widget.path);
Get.to(widget.path);
// RouteGuardService.to.toWithAuth(widget.path, null);
},
child: Container(
width: 170.w,

8
pubspec.lock

@ -1157,6 +1157,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.0"
pull_to_refresh:
dependency: "direct main"
description:
name: pull_to_refresh
sha256: bbadd5a931837b57739cf08736bea63167e284e71fb23b218c8c9a6e042aad12
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
rational:
dependency: transitive
description:

1
pubspec.yaml

@ -66,6 +66,7 @@ dependencies:
fluwx: ^5.7.5
tobias: ^5.3.1
agora_rtc_engine: ^6.5.3
pull_to_refresh: ^2.0.0
dev_dependencies:
flutter_test:

Loading…
Cancel
Save