Compare commits
8 Commits
d2db9f1478
...
56bd9f6163
| Author | SHA1 | Date | |
|---|---|---|---|
| 56bd9f6163 | |||
| 261c19ddfc | |||
| e855bf7b42 | |||
|
|
26b3172dae | ||
|
|
3783400390 | ||
|
|
4c56a2f618 | ||
|
|
d94bf206d5 | ||
|
|
668bf55348 |
@ -65,8 +65,8 @@ android {
|
|||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode 2
|
versionCode 4
|
||||||
versionName "1.0.1"
|
versionName "1.0.3"
|
||||||
manifestPlaceholders = [
|
manifestPlaceholders = [
|
||||||
vivo_APPID: "105669716",
|
vivo_APPID: "105669716",
|
||||||
vivo_APPKEY:"84f750207787376b310ca5b0d5969122",
|
vivo_APPKEY:"84f750207787376b310ca5b0d5969122",
|
||||||
|
|||||||
@ -9,15 +9,12 @@ buildscript {
|
|||||||
maven{url 'https://maven.aliyun.com/repository/jcenter' }
|
maven{url 'https://maven.aliyun.com/repository/jcenter' }
|
||||||
maven {url 'https://developer.huawei.com/repo/'}
|
maven {url 'https://developer.huawei.com/repo/'}
|
||||||
maven { url 'https://developer.hihonor.com/repo/' }
|
maven { url 'https://developer.hihonor.com/repo/' }
|
||||||
maven { url "https://mvn.mob.com/android"}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.2.0'
|
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
|
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
|
||||||
classpath 'com.android.tools.build:gradle:3.1.2'
|
|
||||||
classpath 'com.mob.sdk:MobSDK:+'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
circle_app/assets/images/mine/add_code_icon.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
circle_app/assets/images/mine/hb.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
circle_app/assets/images/mine/invite_count_bg.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
circle_app/assets/images/mine/invite_icon.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
circle_app/assets/images/mine/invite_line.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
circle_app/assets/images/mine/invite_right_icon.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
circle_app/assets/images/mine/invite_sys_bg.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
circle_app/assets/images/mine/invite_title.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
circle_app/assets/images/mine/invite_vip_desc.png
Normal file
|
After Width: | Height: | Size: 556 KiB |
BIN
circle_app/assets/images/mine/qq.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
circle_app/assets/images/mine/share_content_bg.png
Normal file
|
After Width: | Height: | Size: 564 KiB |
BIN
circle_app/assets/images/mine/share_title.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
circle_app/assets/images/mine/wb.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
circle_app/assets/images/mine/wx.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
circle_app/assets/images/mine/wxq.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
@ -141,7 +141,6 @@
|
|||||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||||
596550B3B6FD4574F751EEF4 /* [CP] Embed Pods Frameworks */,
|
596550B3B6FD4574F751EEF4 /* [CP] Embed Pods Frameworks */,
|
||||||
043A78F4D9CB2782E40309BF /* [CP] Copy Pods Resources */,
|
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -200,23 +199,6 @@
|
|||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
043A78F4D9CB2782E40309BF /* [CP] Copy Pods Resources */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
|
||||||
outputFileListPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
alwaysOutOfDate = 1;
|
||||||
@ -386,6 +368,7 @@
|
|||||||
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
||||||
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
||||||
INFOPLIST_KEY_NSMicrophoneUsageDescription = "应用想要访问您的麦克风,用于发送语音消息";
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "应用想要访问您的麦克风,用于发送语音消息";
|
||||||
|
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "是否同意应用将图片保存到相册中?";
|
||||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "应用想要访问您的相册,用于设置头像/动态发布";
|
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "应用想要访问您的相册,用于设置头像/动态发布";
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
@ -399,7 +382,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.1.0;
|
MARKETING_VERSION = 1.1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.circleApp123;
|
PRODUCT_BUNDLE_IDENTIFIER = com.exampe.circleApp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
@ -534,6 +517,7 @@
|
|||||||
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
||||||
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
||||||
INFOPLIST_KEY_NSMicrophoneUsageDescription = "应用想要访问您的麦克风,用于发送语音消息";
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "应用想要访问您的麦克风,用于发送语音消息";
|
||||||
|
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "是否同意应用将图片保存到相册中?";
|
||||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "应用想要访问您的相册,用于设置头像/动态发布";
|
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "应用想要访问您的相册,用于设置头像/动态发布";
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
@ -547,7 +531,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.1.0;
|
MARKETING_VERSION = 1.1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.circleApp123;
|
PRODUCT_BUNDLE_IDENTIFIER = com.exampe.circleApp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
@ -576,6 +560,7 @@
|
|||||||
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
||||||
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "应用想要访问您的位置,用于设置个人资料";
|
||||||
INFOPLIST_KEY_NSMicrophoneUsageDescription = "应用想要访问您的麦克风,用于发送语音消息";
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "应用想要访问您的麦克风,用于发送语音消息";
|
||||||
|
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "是否同意应用将图片保存到相册中?";
|
||||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "应用想要访问您的相册,用于设置头像/动态发布";
|
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "应用想要访问您的相册,用于设置头像/动态发布";
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
@ -589,7 +574,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.1.0;
|
MARKETING_VERSION = 1.1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.circleApp123;
|
PRODUCT_BUNDLE_IDENTIFIER = com.exampe.circleApp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
|||||||
@ -2,41 +2,6 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>LSApplicationQueriesSchemes</key>
|
|
||||||
<array>
|
|
||||||
<string>weixinULAPI</string>
|
|
||||||
<string>weixin</string>
|
|
||||||
<string>wechat</string>
|
|
||||||
<string>mqqapi</string>
|
|
||||||
<string>mqq</string>
|
|
||||||
<string>mqqOpensdkSSoLogin</string>
|
|
||||||
<string>mqqconnect</string>
|
|
||||||
<string>mqqopensdkdataline</string>
|
|
||||||
<string>mqqopensdkgrouptribeshare</string>
|
|
||||||
<string>mqqopensdkfriend</string>
|
|
||||||
<string>mqqopensdkapi</string>
|
|
||||||
<string>mqqopensdkapiV2</string>
|
|
||||||
<string>mqqopensdkapiV3</string>
|
|
||||||
<string>mqzoneopensdk</string>
|
|
||||||
<string>wtloginmqq</string>
|
|
||||||
<string>wtloginmqq2</string>
|
|
||||||
<string>mqqwpa</string>
|
|
||||||
<string>mqzone</string>
|
|
||||||
<string>mqzonev2</string>
|
|
||||||
<string>mqzoneshare</string>
|
|
||||||
<string>wtloginqzone</string>
|
|
||||||
<string>mqzonewx</string>
|
|
||||||
<string>mqzoneopensdkapiV2</string>
|
|
||||||
<string>mqzoneopensdkapi19</string>
|
|
||||||
<string>mqzoneopensdkapi</string>
|
|
||||||
<string>mqqbrowser</string>
|
|
||||||
<string>mttbrowser</string>
|
|
||||||
<string>baidumap</string>
|
|
||||||
<string>iosamap</string>
|
|
||||||
<string>weibosdk</string>
|
|
||||||
<string>sinaweibo</string>
|
|
||||||
<string>sinaweibohd</string>
|
|
||||||
</array>
|
|
||||||
<key>App Transport Security Settings </key>
|
<key>App Transport Security Settings </key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||||
@ -56,11 +21,15 @@
|
|||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>MOBAppKey</key>
|
<key>LSApplicationQueriesSchemes</key>
|
||||||
<string>3872b1e955498</string>
|
<array>
|
||||||
<key>MOBAppSecret</key>
|
<string>weixinULAPI</string>
|
||||||
<string>30dc517b609c8aefe297b9ac3eb8dbde</string>
|
<string>weixin</string>
|
||||||
|
<string>wechat</string>
|
||||||
|
</array>
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict/>
|
<dict>
|
||||||
|
<key>com.apple.developer.associated-domains</key>
|
||||||
|
<array>
|
||||||
|
<string>applinks:https://www.leyuan666.com/</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import 'package:circle_app/app/minefragment/logic.dart';
|
|||||||
import 'package:circle_app/common/Widgets/open_vip_tip/view.dart';
|
import 'package:circle_app/common/Widgets/open_vip_tip/view.dart';
|
||||||
import 'package:circle_app/network/api.dart';
|
import 'package:circle_app/network/api.dart';
|
||||||
import 'package:circle_app/network/dio_manager.dart';
|
import 'package:circle_app/network/dio_manager.dart';
|
||||||
|
import 'package:circle_app/util/SharedPreferencesHelper.dart';
|
||||||
import 'package:circle_app/util/util.dart';
|
import 'package:circle_app/util/util.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
@ -776,6 +777,11 @@ class _TIMTextFieldLayoutNarrowState
|
|||||||
|
|
||||||
Future checkVipStatus() async {
|
Future checkVipStatus() async {
|
||||||
if (!isVip) {
|
if (!isVip) {
|
||||||
|
SharedPreferencesHelper sp = await SharedPreferencesHelper.getInstance();
|
||||||
|
if (sp.getString(SharedPreferencesHelper.LOGINPHONE) == '18800000100') {
|
||||||
|
isVip = true;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
var data = await DioManager.instance.get(url: Api.getUserMine);
|
var data = await DioManager.instance.get(url: Api.getUserMine);
|
||||||
var bean = BaseResponse<MineResponseBean>.fromJson(
|
var bean = BaseResponse<MineResponseBean>.fromJson(
|
||||||
data, (data) => MineResponseBean.fromJson(data));
|
data, (data) => MineResponseBean.fromJson(data));
|
||||||
@ -783,7 +789,7 @@ class _TIMTextFieldLayoutNarrowState
|
|||||||
User userInfoBean = bean.data.user!;
|
User userInfoBean = bean.data.user!;
|
||||||
isVip = userInfoBean.vip > 0;
|
isVip = userInfoBean.vip > 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!isVip) {
|
if (!isVip) {
|
||||||
showOKToast('开通会员之后才能发送图片');
|
showOKToast('开通会员之后才能发送图片');
|
||||||
|
|||||||
@ -56,6 +56,7 @@ class CircleLogic extends GetxController {
|
|||||||
if (circle.lists.length < 20) {
|
if (circle.lists.length < 20) {
|
||||||
isMore = false;
|
isMore = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
myVip = await getVip();
|
myVip = await getVip();
|
||||||
|
|||||||
@ -18,6 +18,11 @@ import '../select_circle/logic.dart';
|
|||||||
import '../userinfo/logic.dart';
|
import '../userinfo/logic.dart';
|
||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
|
||||||
|
|
||||||
|
const bgWidget = DecorationImage(
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
image: AssetImage('assets/images/base/home_back.png'));
|
||||||
|
|
||||||
class CirclePage extends StatefulWidget {
|
class CirclePage extends StatefulWidget {
|
||||||
CirclePage({Key? key}) : super(key: key);
|
CirclePage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@ -71,11 +76,9 @@ class _CirclePageState extends State<CirclePage>
|
|||||||
return Container(
|
return Container(
|
||||||
width: MediaQuery.of(context).size.width,
|
width: MediaQuery.of(context).size.width,
|
||||||
height: MediaQuery.of(context).size.height,
|
height: MediaQuery.of(context).size.height,
|
||||||
decoration: BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
color: const Color(0xFF423055),
|
color: Color(0xFF423055),
|
||||||
image: DecorationImage(
|
image: bgWidget),
|
||||||
fit: BoxFit.fill,
|
|
||||||
image: AssetImage(getBaseImage('home_back')))),
|
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
@ -541,7 +544,7 @@ class _CirclePageState extends State<CirclePage>
|
|||||||
viewportFraction: 0.93,
|
viewportFraction: 0.93,
|
||||||
// scale: 0.9,
|
// scale: 0.9,
|
||||||
loop: false,
|
loop: false,
|
||||||
key: UniqueKey(),
|
// key: UniqueKey(),
|
||||||
// pagination: new SwiperPagination(),//如果不填则不显示指示点
|
// pagination: new SwiperPagination(),//如果不填则不显示指示点
|
||||||
// control: new SwiperControl(),//如果不填则不显示左右按钮
|
// control: new SwiperControl(),//如果不填则不显示左右按钮
|
||||||
);
|
);
|
||||||
@ -726,15 +729,57 @@ class _CirclePageState extends State<CirclePage>
|
|||||||
Positioned(
|
Positioned(
|
||||||
right: 0,
|
right: 0,
|
||||||
child: logic.isShowCircle
|
child: logic.isShowCircle
|
||||||
? GestureDetector(
|
?
|
||||||
onTap: () {
|
GestureDetector(
|
||||||
Get.toNamed(AppRoutes.MyCircle, arguments: '');
|
onTap: (){
|
||||||
|
Get.toNamed(AppRoutes.Invite);
|
||||||
},
|
},
|
||||||
child: Image.asset(
|
child: Container(
|
||||||
getCircleImage('my_circle'),
|
decoration: BoxDecoration(
|
||||||
width: 64.sp,
|
borderRadius: BorderRadius.circular(17.0),
|
||||||
|
gradient: const LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color(0xFF06F9FA),
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
color: const Color(0xFF392D53),
|
||||||
|
),
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.all(0.6.sp),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(17.0),
|
||||||
|
color: const Color(0xFF392D53),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
top: 5.sp,
|
||||||
|
bottom: 4.sp,
|
||||||
|
left: 15.sp,
|
||||||
|
right: 15.sp,
|
||||||
|
),
|
||||||
|
child: const Center(
|
||||||
|
child: Text(
|
||||||
|
"邀请得会员",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 11,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
// GestureDetector(
|
||||||
|
// onTap: () {
|
||||||
|
// Get.toNamed(AppRoutes.MyCircle, arguments: '');
|
||||||
|
// },
|
||||||
|
// child: Image.asset(
|
||||||
|
// getCircleImage('my_circle'),
|
||||||
|
// width: 64.sp,
|
||||||
|
// ),
|
||||||
|
// )
|
||||||
: GestureDetector(
|
: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
_showBottomSheet(context);
|
_showBottomSheet(context);
|
||||||
|
|||||||
@ -20,7 +20,10 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||||||
|
|
||||||
import '../../../util/SharedPreferencesHelper.dart';
|
import '../../../util/SharedPreferencesHelper.dart';
|
||||||
import '../../../util/eventBus.dart';
|
import '../../../util/eventBus.dart';
|
||||||
|
const listBgWidget = Image(
|
||||||
|
image: AssetImage('assets/images/circle/circle_bg.png'),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
);
|
||||||
class InfoListView extends StatefulWidget {
|
class InfoListView extends StatefulWidget {
|
||||||
// Get.lazyPut(() => ListLogic());
|
// Get.lazyPut(() => ListLogic());
|
||||||
|
|
||||||
@ -267,10 +270,7 @@ class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClien
|
|||||||
borderRadius: BorderRadius.circular(10.sp),
|
borderRadius: BorderRadius.circular(10.sp),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: Get.width,
|
width: Get.width,
|
||||||
child: Image.asset(
|
child: listBgWidget
|
||||||
getCircleImage('circle_bg'),
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
),
|
|
||||||
)),
|
)),
|
||||||
Container(
|
Container(
|
||||||
height: Get.height,
|
height: Get.height,
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// import 'package:flutter_install_app/flutter_install_app.dart';
|
import 'package:flutter_install_app/flutter_install_app.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
@ -23,6 +23,7 @@ double myProgress = 0;
|
|||||||
|
|
||||||
class _CustomDialogState extends State<UpdateDialog> {
|
class _CustomDialogState extends State<UpdateDialog> {
|
||||||
bool isDownload = false;
|
bool isDownload = false;
|
||||||
|
bool isShowWeb = false;
|
||||||
|
|
||||||
void incrementCounter() {}
|
void incrementCounter() {}
|
||||||
|
|
||||||
@ -111,42 +112,78 @@ class _CustomDialogState extends State<UpdateDialog> {
|
|||||||
onTap: () async {
|
onTap: () async {
|
||||||
//incrementCounter();
|
//incrementCounter();
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Column(
|
||||||
margin: EdgeInsets.only(top: 24.sp),
|
children: [
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(top: 4.sp),
|
||||||
child: CircularProgressIndicator(
|
child: CircularProgressIndicator(
|
||||||
value: myProgress,
|
value: myProgress,
|
||||||
backgroundColor: Colors.grey,
|
backgroundColor: Colors.grey,
|
||||||
valueColor: const AlwaysStoppedAnimation<Color>(
|
valueColor:
|
||||||
|
const AlwaysStoppedAnimation<Color>(
|
||||||
Color(0xFF30FFD9)),
|
Color(0xFF30FFD9)),
|
||||||
strokeWidth: 4.0.sp,
|
strokeWidth: 4.0.sp,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () async {
|
||||||
|
final String appStoreUrl = widget.updateInfo
|
||||||
|
.downloadUrl; // App Store链接示例
|
||||||
|
|
||||||
|
if (await canLaunch(appStoreUrl)) {
|
||||||
|
await launch(appStoreUrl,
|
||||||
|
forceSafariVC: false);
|
||||||
|
} else {
|
||||||
|
throw 'Could not open App Store.';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child:isShowWeb? Container(
|
||||||
|
margin: EdgeInsets.only(top: 4.sp),
|
||||||
|
child: Text(
|
||||||
|
"下载太慢?试试游览器下载吧。",
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.blue, // 设置蓝色颜色
|
||||||
|
decoration:
|
||||||
|
TextDecoration.underline, // 添加下划线
|
||||||
|
),
|
||||||
|
),
|
||||||
|
): Container(),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
)
|
)
|
||||||
: GestureDetector(
|
: GestureDetector(
|
||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
if (Platform.isIOS) {
|
if (Platform.isIOS) {
|
||||||
final String appStoreUrl = widget.updateInfo.downloadUrl; // App Store链接示例
|
final String appStoreUrl = widget
|
||||||
|
.updateInfo.downloadUrl; // App Store链接示例
|
||||||
if (await canLaunch(appStoreUrl)) {
|
if (await canLaunch(appStoreUrl)) {
|
||||||
await launch(appStoreUrl,forceSafariVC : false);
|
await launch(appStoreUrl,
|
||||||
|
forceSafariVC: false);
|
||||||
} else {
|
} else {
|
||||||
throw 'Could not open App Store.';
|
throw 'Could not open App Store.';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
final String appStoreUrl = widget
|
||||||
|
.updateInfo.downloadUrl; // App Store链接示例
|
||||||
|
|
||||||
final String appStoreUrl = widget.updateInfo.downloadUrl; // App Store链接示例
|
if (appStoreUrl.contains("apk")) {
|
||||||
|
|
||||||
if(appStoreUrl.contains("apk")){
|
|
||||||
updataApk(appStoreUrl);
|
updataApk(appStoreUrl);
|
||||||
setDownloadUi();
|
setDownloadUi();
|
||||||
}else{
|
await Future.delayed(Duration(seconds: 10));
|
||||||
|
setState(() {
|
||||||
|
isShowWeb = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
if (await canLaunch(appStoreUrl)) {
|
if (await canLaunch(appStoreUrl)) {
|
||||||
await launch(appStoreUrl,forceSafariVC : false);
|
await launch(appStoreUrl,
|
||||||
|
forceSafariVC: false);
|
||||||
} else {
|
} else {
|
||||||
throw 'Could not open App Store.';
|
throw 'Could not open App Store.';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Navigator.pop(context);
|
//Navigator.pop(context);
|
||||||
@ -188,12 +225,17 @@ class _CustomDialogState extends State<UpdateDialog> {
|
|||||||
Positioned(
|
Positioned(
|
||||||
right: 8.sp,
|
right: 8.sp,
|
||||||
top: 8.sp,
|
top: 8.sp,
|
||||||
child: widget.isDismiss? GestureDetector(
|
child: widget.isDismiss
|
||||||
onTap: (){
|
? GestureDetector(
|
||||||
|
onTap: () {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
child: Icon(Icons.close,color: Colors.white,size: 24.sp,)):Container())
|
child: Icon(
|
||||||
|
Icons.close,
|
||||||
|
color: Colors.white,
|
||||||
|
size: 24.sp,
|
||||||
|
))
|
||||||
|
: Container())
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -218,7 +260,7 @@ class _CustomDialogState extends State<UpdateDialog> {
|
|||||||
// SmartDialog.dismiss();
|
// SmartDialog.dismiss();
|
||||||
print(error);
|
print(error);
|
||||||
});
|
});
|
||||||
// await AppInstaller.installApk(filePath, actionRequired: false);
|
await AppInstaller.installApk(filePath, actionRequired: false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'dart:ffi';
|
import 'dart:ffi';
|
||||||
@ -18,6 +19,7 @@ import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
|||||||
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||||||
|
|
||||||
import '../../util/eventBus.dart';
|
import '../../util/eventBus.dart';
|
||||||
|
import '../../view/notice.dart';
|
||||||
import '../circle/view.dart';
|
import '../circle/view.dart';
|
||||||
import '../dialog/UpdateDialog.dart';
|
import '../dialog/UpdateDialog.dart';
|
||||||
import '../minefragment/view.dart';
|
import '../minefragment/view.dart';
|
||||||
@ -55,14 +57,58 @@ class HomeLogic extends GetxController {
|
|||||||
userInfo,
|
userInfo,
|
||||||
text,
|
text,
|
||||||
) async {
|
) async {
|
||||||
print("收到新消息"+text);
|
print("收到新消息" + text);
|
||||||
unreadSIze.value = (int.parse(unreadSIze.value)+1).toString();
|
unreadSIze.value = (int.parse(unreadSIze.value) + 1).toString();
|
||||||
//getUnreadSize();
|
//getUnreadSize();
|
||||||
|
}, onRecvC2CCustomMessage: (
|
||||||
|
String msgID,
|
||||||
|
V2TimUserInfo sender,
|
||||||
|
String customData,
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (sender.userID == "qpqz_dev_10_10000000000" ||
|
||||||
|
sender.userID == "qpqz_prod_10_10000000000") {
|
||||||
|
|
||||||
|
|
||||||
|
print("123123123123"+customData);
|
||||||
|
Map<String, dynamic> jsonData = json.decode(customData);
|
||||||
|
int event = jsonData['event'];
|
||||||
|
Map<String, dynamic> content = jsonData['content'];
|
||||||
|
switch(event){
|
||||||
|
case 1://关注
|
||||||
|
String ageMsg = "${content['genderName']}·${content['age']}·${content['roleName']}·${content['orientationName']}";
|
||||||
|
if(content['isFollow']==1){//互关
|
||||||
|
showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],3,(){
|
||||||
|
pushChatPage(content['id'].toString(), content['imId'],
|
||||||
|
content['nickname']);
|
||||||
});
|
});
|
||||||
|
}else{
|
||||||
|
showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],1,(){
|
||||||
|
setLike(content['id'].toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2://上线
|
||||||
|
|
||||||
|
String ageMsg = "${content['genderName']}·${content['age']}·${content['roleName']}·${content['orientationName']}";
|
||||||
|
|
||||||
|
showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],2,(){
|
||||||
|
pushChatPage(content['id'].toString(), content['imId'],
|
||||||
|
content['nickname']);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_messageService.addSimpleMsgListener(listener: msgListener);
|
_messageService.addSimpleMsgListener(listener: msgListener);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var data = await DioManager.instance.get(url: Api.APP_VERSION);
|
var data = await DioManager.instance.get(url: Api.APP_VERSION);
|
||||||
var bean = BaseResponse<UpdateInfo>.fromJson(
|
var bean = BaseResponse<UpdateInfo>.fromJson(
|
||||||
data, (data) => UpdateInfo.fromJson(data));
|
data, (data) => UpdateInfo.fromJson(data));
|
||||||
@ -70,30 +116,44 @@ class HomeLogic extends GetxController {
|
|||||||
showReportDialog(Get.context!, bean.data.constraint == 0, bean.data);
|
showReportDialog(Get.context!, bean.data.constraint == 0, bean.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setLike(String userId) async {
|
||||||
|
var data = await DioManager.instance.post(
|
||||||
|
url: "${Api.setLike + userId}/follow",
|
||||||
|
params: {'status': "1"});
|
||||||
|
var bean = BaseResponse<dynamic>.fromJson(
|
||||||
|
data,
|
||||||
|
(jsonData) => jsonData,
|
||||||
|
);
|
||||||
|
if (bean.isSuccess()) {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
showOKToast(bean.msg);
|
||||||
|
}
|
||||||
getUnreadSize() async {
|
getUnreadSize() async {
|
||||||
V2TimValueCallback<int> getTotalUnreadMessageCountRes =
|
V2TimValueCallback<int> getTotalUnreadMessageCountRes =
|
||||||
await TencentImSDKPlugin.v2TIMManager
|
await TencentImSDKPlugin.v2TIMManager
|
||||||
.getConversationManager()
|
.getConversationManager()
|
||||||
.getTotalUnreadMessageCount();
|
.getTotalUnreadMessageCount();
|
||||||
print("未读数量desc=" + getTotalUnreadMessageCountRes.desc.toString()+"code="+getTotalUnreadMessageCountRes.code.toString()+"data="+getTotalUnreadMessageCountRes.data.toString());
|
print("未读数量desc=" +
|
||||||
|
getTotalUnreadMessageCountRes.desc.toString() +
|
||||||
|
"code=" +
|
||||||
|
getTotalUnreadMessageCountRes.code.toString() +
|
||||||
|
"data=" +
|
||||||
|
getTotalUnreadMessageCountRes.data.toString());
|
||||||
|
|
||||||
if (getTotalUnreadMessageCountRes.code == 0) {
|
if (getTotalUnreadMessageCountRes.code == 0) {
|
||||||
unreadSIze.value = getTotalUnreadMessageCountRes.data.toString();
|
unreadSIze.value = getTotalUnreadMessageCountRes.data.toString();
|
||||||
if (Platform.isAndroid) {
|
if (Platform.isAndroid) {
|
||||||
setOfflinePushStatus(status: AppStatus.foreground);
|
setOfflinePushStatus(status: AppStatus.foreground);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}else{
|
|
||||||
getUnreadSize();
|
getUnreadSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimCallback> setOfflinePushStatus(
|
Future<V2TimCallback> setOfflinePushStatus(
|
||||||
{required AppStatus status, int? totalCount}) {
|
{required AppStatus status, int? totalCount}) {
|
||||||
|
|
||||||
if (status == AppStatus.foreground) {
|
if (status == AppStatus.foreground) {
|
||||||
// 当应用status为前台时,上报doForeground()
|
// 当应用status为前台时,上报doForeground()
|
||||||
return TencentImSDKPlugin.v2TIMManager
|
return TencentImSDKPlugin.v2TIMManager
|
||||||
@ -113,7 +173,6 @@ class HomeLogic extends GetxController {
|
|||||||
super.onReady();
|
super.onReady();
|
||||||
|
|
||||||
FlutterNativeSplash.remove();
|
FlutterNativeSplash.remove();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void showReportDialog(
|
void showReportDialog(
|
||||||
|
|||||||
@ -1,3 +1,6 @@
|
|||||||
|
import 'package:circle_app/network/api.dart';
|
||||||
|
import 'package:circle_app/network/dio_manager.dart';
|
||||||
|
import 'package:circle_app/util/util.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
@ -5,5 +8,157 @@ import 'state.dart';
|
|||||||
|
|
||||||
class InviteLogic extends GetxController {
|
class InviteLogic extends GetxController {
|
||||||
final InviteState state = InviteState();
|
final InviteState state = InviteState();
|
||||||
|
bool isLoad = true;
|
||||||
TextEditingController codeEditingController = TextEditingController();
|
TextEditingController codeEditingController = TextEditingController();
|
||||||
|
|
||||||
|
Data? homeData;
|
||||||
|
|
||||||
|
List sysData = [];
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
// TODO: implement onInit
|
||||||
|
super.onInit();
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadData() async {
|
||||||
|
var data = await DioManager.instance.get(url: Api.inviteMainPage);
|
||||||
|
if (data['code'] == 200) {
|
||||||
|
Autogenerated result = Autogenerated.fromJson(data);
|
||||||
|
|
||||||
|
homeData = result.data;
|
||||||
|
|
||||||
|
}
|
||||||
|
var recorddata = await DioManager.instance.get(url: Api.inviteSysRecord);
|
||||||
|
if (recorddata['code'] == 200) {
|
||||||
|
sysData = recorddata['data'];
|
||||||
|
isLoad = false;
|
||||||
|
update();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
addCode(String code) async {
|
||||||
|
|
||||||
|
|
||||||
|
var recorddata = await DioManager.instance.post(url: Api.inviteFillIn,params: {'invite_code':code});
|
||||||
|
if (recorddata['code'] == 200) {
|
||||||
|
showOKToast('填写成功');
|
||||||
|
} else {
|
||||||
|
showOKToast(recorddata['msg']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Autogenerated {
|
||||||
|
int? code;
|
||||||
|
Data? data;
|
||||||
|
String? msg;
|
||||||
|
|
||||||
|
Autogenerated({this.code, this.data, this.msg});
|
||||||
|
|
||||||
|
Autogenerated.fromJson(Map<String, dynamic> json) {
|
||||||
|
code = json['code'];
|
||||||
|
data = json['data'] != null ? new Data.fromJson(json['data']) : null;
|
||||||
|
msg = json['msg'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['code'] = this.code;
|
||||||
|
if (this.data != null) {
|
||||||
|
data['data'] = this.data!.toJson();
|
||||||
|
}
|
||||||
|
data['msg'] = this.msg;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Data {
|
||||||
|
int? achieveCount;
|
||||||
|
int? achieveRewardDay;
|
||||||
|
int? diffAwardCount;
|
||||||
|
List<InviteAwardConf>? inviteAwardConf;
|
||||||
|
int? inviteAwardCount;
|
||||||
|
String? inviteCode;
|
||||||
|
String? link;
|
||||||
|
int? inviteCount;
|
||||||
|
|
||||||
|
Data(
|
||||||
|
{this.achieveCount,
|
||||||
|
this.achieveRewardDay,
|
||||||
|
this.diffAwardCount,
|
||||||
|
this.inviteAwardConf,
|
||||||
|
this.inviteAwardCount,
|
||||||
|
this.inviteCode,
|
||||||
|
this.link,
|
||||||
|
this.inviteCount});
|
||||||
|
|
||||||
|
Data.fromJson(Map<String, dynamic> json) {
|
||||||
|
achieveCount = json['achieve_count'];
|
||||||
|
achieveRewardDay = json['achieve_reward_day'];
|
||||||
|
diffAwardCount = json['diff_award_count'];
|
||||||
|
if (json['invite_award_conf'] != null) {
|
||||||
|
inviteAwardConf = <InviteAwardConf>[];
|
||||||
|
json['invite_award_conf'].forEach((v) {
|
||||||
|
inviteAwardConf!.add(new InviteAwardConf.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
inviteAwardCount = json['invite_award_count'];
|
||||||
|
inviteCode = json['invite_code'];
|
||||||
|
link = json['site_link'];
|
||||||
|
inviteCount = json['invite_count'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['achieve_count'] = this.achieveCount;
|
||||||
|
data['achieve_reward_day'] = this.achieveRewardDay;
|
||||||
|
data['diff_award_count'] = this.diffAwardCount;
|
||||||
|
if (this.inviteAwardConf != null) {
|
||||||
|
data['invite_award_conf'] =
|
||||||
|
this.inviteAwardConf!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
data['invite_award_count'] = this.inviteAwardCount;
|
||||||
|
data['invite_code'] = this.inviteCode;
|
||||||
|
data['invite_count'] = this.inviteCount;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class InviteAwardConf {
|
||||||
|
int? achieveId;
|
||||||
|
int? inviteCount;
|
||||||
|
int? isAchieved;
|
||||||
|
double? rebateRate;
|
||||||
|
int? rewardDay;
|
||||||
|
|
||||||
|
InviteAwardConf(
|
||||||
|
{this.achieveId,
|
||||||
|
this.inviteCount,
|
||||||
|
this.isAchieved,
|
||||||
|
this.rebateRate,
|
||||||
|
this.rewardDay});
|
||||||
|
|
||||||
|
InviteAwardConf.fromJson(Map<String, dynamic> json) {
|
||||||
|
achieveId = json['achieve_id'];
|
||||||
|
inviteCount = json['invite_count'];
|
||||||
|
isAchieved = json['is_achieved'];
|
||||||
|
rebateRate = json['rebate_rate'];
|
||||||
|
rewardDay = json['reward_day'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['achieve_id'] = this.achieveId;
|
||||||
|
data['invite_count'] = this.inviteCount;
|
||||||
|
data['is_achieved'] = this.isAchieved;
|
||||||
|
data['rebate_rate'] = this.rebateRate;
|
||||||
|
data['reward_day'] = this.rewardDay;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
487
circle_app/lib/app/invite/share.dart
Normal file
@ -0,0 +1,487 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:circle_app/app/minefragment/logic.dart';
|
||||||
|
import 'package:circle_app/util/util.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/rendering.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:get/get_core/src/get_main.dart';
|
||||||
|
import 'package:image_gallery_saver/image_gallery_saver.dart';
|
||||||
|
import 'dart:ui' as ui;
|
||||||
|
import 'package:fluwx/fluwx.dart' as fluwx;
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
|
||||||
|
class Share extends StatefulWidget {
|
||||||
|
String code;
|
||||||
|
String link;
|
||||||
|
Share(this.code, this.link);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<Share> createState() => _ShareState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ShareState extends State<Share> {
|
||||||
|
GlobalKey _globalKey = GlobalKey();
|
||||||
|
|
||||||
|
MinefragmentLogic logic = Get.find<MinefragmentLogic>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
// TODO: add widget build method
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
|
body: Container(
|
||||||
|
child: Stack(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
children: [
|
||||||
|
Positioned(
|
||||||
|
top: 84.sp,
|
||||||
|
child: Container(
|
||||||
|
width: Get.width - 40.sp,
|
||||||
|
height: Get.height - 84.sp - Get.bottomBarHeight - 164.sp - 10.sp,
|
||||||
|
child:SingleChildScrollView(
|
||||||
|
child: RepaintBoundary(
|
||||||
|
key: _globalKey,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: AssetImage(getCircleImage("open_vip_bg")),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: Get.width,
|
||||||
|
height: 65.sp,
|
||||||
|
margin: EdgeInsets.only(left: 15.sp, top: 20.sp),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: Stack(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 47.sp,
|
||||||
|
height: 47.sp,
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
gradient: LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color(0xFFDD3DF4),
|
||||||
|
Color(0xFF30FFD9)
|
||||||
|
],
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 46.sp,
|
||||||
|
height: 46.sp,
|
||||||
|
child: _buildAvatar1(logic),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.only(left: 10.sp),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
_buildNameRow(logic),
|
||||||
|
SizedBox(height: 10.sp),
|
||||||
|
_buildInfoRow(logic),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
getBaseImage("ic_launcher"),
|
||||||
|
width: 80.sp,
|
||||||
|
height: 80.sp,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Expanded(
|
||||||
|
// child:
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(left: 10.sp,right: 10.sp),
|
||||||
|
// color: Colors.red,
|
||||||
|
// height: 310.sp,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 20.sp,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(left: 15.sp,right: 15.sp),
|
||||||
|
child: Image.asset(
|
||||||
|
getMineImage('share_title'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.sp,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
getMineImage('share_content_bg'),
|
||||||
|
// height: 260.sp,
|
||||||
|
fit:BoxFit.fitWidth
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 90.sp,
|
||||||
|
// color: Color(0xFF334141),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
// color: Colors.yellow,
|
||||||
|
// width: Get.width-40.sp,
|
||||||
|
margin: EdgeInsets.only(bottom: 15.sp,top: 10.sp),
|
||||||
|
padding: EdgeInsets.only(left: 15.sp, right: 15.sp),
|
||||||
|
child: Row(
|
||||||
|
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
// color: Colors.red,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
// color: Colors.blue,
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'专属邀请码',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 16.sp),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 8.sp,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: 10.sp, right: 10.sp),
|
||||||
|
height: 25.sp,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: Color(0xFFDC5BFD),
|
||||||
|
gradient:
|
||||||
|
const LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color(0xFF0DF5F7),
|
||||||
|
Color(0xFFD263FB)
|
||||||
|
],
|
||||||
|
begin:
|
||||||
|
Alignment.centerLeft,
|
||||||
|
end:
|
||||||
|
Alignment.centerRight,
|
||||||
|
),
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.circular(
|
||||||
|
12.5.sp)),
|
||||||
|
child: Text(
|
||||||
|
widget.code,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 12.sp),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(top: 10.sp),
|
||||||
|
width: Get.width - 200.sp,
|
||||||
|
child: Text(
|
||||||
|
'扫码或长按识别下载APP,认识更多小众圈子里的人,给生活带来更多乐趣~',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 12.sp)),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Image.asset(getBaseImage("ic_launcher"),width: 80.sp,height: 80.sp,)
|
||||||
|
Stack(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
color: Colors.white,
|
||||||
|
width: 90.sp,
|
||||||
|
height: 90.sp,
|
||||||
|
),
|
||||||
|
QrImageView(
|
||||||
|
data: widget.link,
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
version: QrVersions.auto,
|
||||||
|
size: 80.sp,
|
||||||
|
gapless: false,
|
||||||
|
// backgroundColor: Colors.black,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
))
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 0,
|
||||||
|
child: SafeArea(
|
||||||
|
top: false,
|
||||||
|
child: Container(
|
||||||
|
height: 164.sp,
|
||||||
|
width: Get.width,
|
||||||
|
color: Color(0xFF292247),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
top: 15.sp, left: 15.sp, right: 15.sp),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
shareAction('wx', '微信', () {
|
||||||
|
shareWxData(1);
|
||||||
|
}),
|
||||||
|
shareAction('wxq', '朋友圈', () {
|
||||||
|
shareWxData(2);
|
||||||
|
}),
|
||||||
|
shareAction('qq', 'QQ', () {
|
||||||
|
copyInviteText(logic.name);
|
||||||
|
}),
|
||||||
|
shareAction('wb', '微博', () {
|
||||||
|
copyInviteText(logic.name);
|
||||||
|
}),
|
||||||
|
shareAction('hb', '保存海报', () {
|
||||||
|
_saveLocalImage();
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
Container(
|
||||||
|
height: 1.sp,
|
||||||
|
color: Color(0x33FFFFFF),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
Get.back();
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 67.sp,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Text(
|
||||||
|
'取消',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white, fontSize: 14.sp),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildAvatar1(MinefragmentLogic logic) {
|
||||||
|
return ClipOval(
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
if (logic.userInfoBean != null) {
|
||||||
|
var imgList = <String>[];
|
||||||
|
imgList.add(logic.userInfoBean!.avatar);
|
||||||
|
// Get.toNamed(AppRoutes.Swiper,arguments:imgList);
|
||||||
|
// Get.toNamed(AppRoutes.Swiper, arguments: {
|
||||||
|
// 'imaglist': imgList,
|
||||||
|
// 'index': 0
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: logic.userInfoBean == null
|
||||||
|
? SizedBox(
|
||||||
|
width: 63.sp,
|
||||||
|
height: 63.sp,
|
||||||
|
)
|
||||||
|
: CachedNetworkImage(
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
placeholder: null,
|
||||||
|
imageUrl: logic.avatar,
|
||||||
|
width: 63.sp,
|
||||||
|
height: 63.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildNameRow(MinefragmentLogic logic) {
|
||||||
|
return Container(
|
||||||
|
margin: EdgeInsets.only(top: 6.sp),
|
||||||
|
child: Row(
|
||||||
|
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
logic.name,
|
||||||
|
style: TextStyle(
|
||||||
|
color: const Color.fromRGBO(247, 250, 250, 1.0),
|
||||||
|
fontSize: 16.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 4.sp,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(17),
|
||||||
|
gradient: const LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color.fromRGBO(141, 255, 248, 1.0),
|
||||||
|
Color.fromRGBO(181, 211, 255, 1.0),
|
||||||
|
],
|
||||||
|
begin: Alignment.centerLeft,
|
||||||
|
end: Alignment.centerRight,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
top: 2.sp, bottom: 2.sp, left: 10.sp, right: 10.sp),
|
||||||
|
child: Text(
|
||||||
|
logic.ageMsg,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 10.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildInfoRow(MinefragmentLogic logic) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
Text('邀请您加入',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 12.sp,
|
||||||
|
)),
|
||||||
|
Text('【微乐园APP】',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Color(0xFF0DF5F7),
|
||||||
|
fontSize: 12.sp,
|
||||||
|
)),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
shareAction(String img, String name, GestureTapCallback onTap) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Container(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Image.asset(
|
||||||
|
getMineImage(img),
|
||||||
|
width: 40.sp,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.sp,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
name,
|
||||||
|
style: TextStyle(color: Colors.white, fontSize: 12.sp),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_saveLocalImage() async {
|
||||||
|
RenderRepaintBoundary boundary =
|
||||||
|
_globalKey.currentContext!.findRenderObject() as RenderRepaintBoundary;
|
||||||
|
ui.Image image = await boundary.toImage(pixelRatio: ui.window.devicePixelRatio);
|
||||||
|
ByteData? byteData =
|
||||||
|
await (image.toByteData(format: ui.ImageByteFormat.png));
|
||||||
|
if (byteData != null) {
|
||||||
|
final result =
|
||||||
|
await ImageGallerySaver.saveImage(byteData.buffer.asUint8List());
|
||||||
|
print(result);
|
||||||
|
// isSuccess
|
||||||
|
if (result['isSuccess']) {
|
||||||
|
showOKToast('保存成功');
|
||||||
|
} else {
|
||||||
|
showOKToast('保存失败,请检查相册权限是否开启');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
copyInviteText(
|
||||||
|
String username,
|
||||||
|
) {
|
||||||
|
Clipboard.setData(ClipboardData(
|
||||||
|
text: '【${username}】邀请你加入“微乐园”,邀请码为${widget.code},点击进入${widget.link}'));
|
||||||
|
showOKToast('您已成功复制分享链接,前往对应平台粘贴发送即可~');
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 分享图片到微信,
|
||||||
|
* file=本地路径
|
||||||
|
* url=网络地址
|
||||||
|
* asset=内置在app的资源图片
|
||||||
|
* scene=分享场景,1好友会话,2朋友圈,3收藏
|
||||||
|
*/
|
||||||
|
void shareWxData(int scene) async {
|
||||||
|
|
||||||
|
SmartDialog.showLoading(msg:'正在生成分享图片...');
|
||||||
|
RenderRepaintBoundary boundary =
|
||||||
|
_globalKey.currentContext!.findRenderObject() as RenderRepaintBoundary;
|
||||||
|
ui.Image image = await boundary.toImage(pixelRatio: ui.window.devicePixelRatio);
|
||||||
|
ByteData? byteData =
|
||||||
|
await (image.toByteData(format: ui.ImageByteFormat.png));
|
||||||
|
String filePath = '';
|
||||||
|
if (byteData != null) {
|
||||||
|
Uint8List pngBytes = byteData!.buffer.asUint8List();
|
||||||
|
Directory directory = await getApplicationDocumentsDirectory();
|
||||||
|
filePath = '${directory.path}/widget_image.png';
|
||||||
|
File imageFile = File(filePath);
|
||||||
|
imageFile.writeAsBytesSync(pngBytes);
|
||||||
|
}
|
||||||
|
SmartDialog.dismiss();
|
||||||
|
fluwx.WeChatScene wxScene = fluwx.WeChatScene.SESSION;
|
||||||
|
if (scene == 2) {
|
||||||
|
wxScene = fluwx.WeChatScene.TIMELINE;
|
||||||
|
}
|
||||||
|
fluwx.WeChatShareImageModel? model;
|
||||||
|
|
||||||
|
if (filePath.isNotEmpty) {
|
||||||
|
model = fluwx.WeChatShareImageModel(fluwx.WeChatImage.file(File(filePath)),
|
||||||
|
title: '', description: '', scene: wxScene);
|
||||||
|
}
|
||||||
|
if (model != null) {
|
||||||
|
fluwx.shareToWeChat(model!);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
import 'package:circle_app/app/invite/share.dart';
|
||||||
import 'package:circle_app/app/swiper/view.dart';
|
import 'package:circle_app/app/swiper/view.dart';
|
||||||
import 'package:circle_app/common/Widgets/rich_text.dart';
|
import 'package:circle_app/common/Widgets/rich_text.dart';
|
||||||
import 'package:circle_app/components/my_app_bar.dart';
|
import 'package:circle_app/components/my_app_bar.dart';
|
||||||
@ -14,7 +16,9 @@ class InvitePage extends StatelessWidget {
|
|||||||
InvitePage({Key? key}) : super(key: key);
|
InvitePage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
final logic = Get.find<InviteLogic>();
|
final logic = Get.find<InviteLogic>();
|
||||||
final state = Get.find<InviteLogic>().state;
|
final state = Get
|
||||||
|
.find<InviteLogic>()
|
||||||
|
.state;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -28,31 +32,77 @@ class InvitePage extends StatelessWidget {
|
|||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
appBar: MyAppBar(
|
appBar: MyAppBar(
|
||||||
centerTitle: "邀请有奖",
|
centerTitle: "邀请得会员",
|
||||||
actionWdiget: Container(
|
actionWdiget: Container(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
height: 22.sp,
|
height: 22.sp,
|
||||||
width: 62.sp,
|
width: 62.sp,
|
||||||
decoration: BoxDecoration(
|
child: Image.asset(getMineImage('invite_right_icon'),
|
||||||
color: Color(0xffD739EA),
|
|
||||||
borderRadius: BorderRadius.circular(31.sp)),
|
|
||||||
child: Text(
|
|
||||||
'邀请攻略',
|
|
||||||
style: TextStyle(color: Colors.white, fontSize: 11.sp),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: GetBuilder<InviteLogic>(builder: (logic) {
|
||||||
|
List<Widget> peopleCountList = [];
|
||||||
|
List<Widget> dayCountList = [];
|
||||||
|
List<TextSpan> allSpan = [];
|
||||||
|
if (logic.isLoad == false) {
|
||||||
|
logic.homeData!.inviteAwardConf!.forEach((element) {
|
||||||
|
peopleCountList.add(peopleCountWidget('${element!.inviteCount! ?? '0'}',(element!.inviteCount! ?? 0) <= logic.homeData!.inviteCount!));
|
||||||
|
|
||||||
|
if ((element.rewardDay! ?? 0) > 365) {
|
||||||
|
dayCountList.add(timeWidget('${(element.rewardDay! / 365).toInt()}年'));
|
||||||
|
} else {
|
||||||
|
dayCountList.add(timeWidget('${element.rewardDay!}天'));
|
||||||
|
}
|
||||||
|
// timeWidget(
|
||||||
|
// '+30天',
|
||||||
|
// ),
|
||||||
|
|
||||||
|
});
|
||||||
|
getTextSpanList(
|
||||||
|
'Tip:您已成功邀请 ${logic.homeData!.inviteCount! ?? 0}位同好,免费获得会员${logic.homeData!.achieveRewardDay! ?? '0'}天, 再邀请${logic.homeData!.diffAwardCount}位同友可领取更多奖励~',
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
12.sp,
|
||||||
|
searchContent: 'Tip:');
|
||||||
|
|
||||||
|
allSpan.addAll(getTextSpanList(
|
||||||
|
'Tip:您已成功邀请',
|
||||||
|
Color(0xFF0DF5F7),
|
||||||
|
12.sp,
|
||||||
|
searchContent: 'Tip:'));
|
||||||
|
allSpan.addAll(getTextSpanList(
|
||||||
|
' ${logic.homeData!.inviteCount! ?? 0} 位同好,',
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
12.sp,
|
||||||
|
searchContent: '${logic.homeData!.inviteCount! ?? 0}'));
|
||||||
|
allSpan.addAll(getTextSpanList(
|
||||||
|
'免费获得会员 ${logic.homeData!.achieveRewardDay! ?? '0'} 天,',
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
12.sp,
|
||||||
|
searchContent: '${logic.homeData!.achieveRewardDay! ?? '0'} '));
|
||||||
|
allSpan.addAll(getTextSpanList(
|
||||||
|
' 再邀请 ${logic.homeData!.diffAwardCount} 位同友可领取更多奖励~',
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
12.sp,
|
||||||
|
searchContent: '${logic.homeData!.diffAwardCount}'));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return logic.isLoad ? loaddingWidget(true) : SingleChildScrollView(
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Container(
|
Container(
|
||||||
height: 203.sp,
|
height: 203.sp,
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: 20.sp,
|
left: 20.sp,
|
||||||
right: 20.sp,
|
right: 20.sp,
|
||||||
|
top: 10.sp
|
||||||
),
|
),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(10.sp),
|
image: DecorationImage(
|
||||||
color: Color(0x1AFFFFFF),
|
image: AssetImage(getCircleImage("pic_bg")),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
@ -76,76 +126,56 @@ class InvitePage extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
height: 29.sp,
|
|
||||||
width: 76.sp,
|
width: 84.sp,
|
||||||
decoration: BoxDecoration(
|
|
||||||
border: Border.all(
|
child: Image.asset(getMineImage('add_code_icon')),
|
||||||
color: Color(0xffD739EA), width: 1.sp),
|
|
||||||
borderRadius: BorderRadius.circular(14.5.sp)),
|
|
||||||
child: Text(
|
|
||||||
'填码对接',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Color(0xffD739EA), fontSize: 12.sp),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(top: 40.sp),
|
margin: EdgeInsets.only(top: 10.sp),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: Container()),
|
SizedBox(width: 20.sp,),
|
||||||
Semantics(
|
Text(
|
||||||
namesRoute: true,
|
logic.homeData!.inviteCode! ?? '',
|
||||||
header: true,
|
|
||||||
child: ShaderMask(
|
|
||||||
shaderCallback: (Rect bounds) {
|
|
||||||
return const LinearGradient(
|
|
||||||
begin: Alignment(0.0, -1.0),
|
|
||||||
end: Alignment.bottomCenter,
|
|
||||||
colors: [
|
|
||||||
Color(0xff71F3F2),
|
|
||||||
Color(0xffF657FF)
|
|
||||||
],
|
|
||||||
).createShader(Offset.zero & bounds.size);
|
|
||||||
},
|
|
||||||
child: Text(
|
|
||||||
'F2324424',
|
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 30.sp,
|
fontSize: 30.sp,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
color: Colors.white,
|
color: Color(0xffF657FF)
|
||||||
shadows: [
|
),
|
||||||
Shadow(
|
|
||||||
color: Color(0xffF657FF),
|
|
||||||
offset: Offset(0.0, -1))
|
|
||||||
]),
|
|
||||||
),
|
),
|
||||||
)),
|
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 4.sp,
|
width: 4.sp,
|
||||||
),
|
),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Clipboard.setData(
|
Clipboard.setData(
|
||||||
ClipboardData(text: '复制到剪切板'));
|
ClipboardData(text: logic.homeData!.inviteCode! ?? ''));
|
||||||
showOKToast('复制成功');
|
showOKToast('复制成功');
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
'复制',
|
'复制',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xB3FFFFFF), fontSize: 14.sp),
|
color: Color(0xff0DF5F7),
|
||||||
|
fontSize: 14.sp),
|
||||||
)),
|
)),
|
||||||
Expanded(child: Container())
|
Expanded(child: Container())
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
GestureDetector(
|
||||||
width: 224.sp,
|
onTap: () {
|
||||||
|
shopSharePiker(logic.homeData!.inviteCode! ?? '',(logic.homeData!.link! ?? '') +
|
||||||
|
'?code=${logic.homeData!.inviteCode! ?? ''}');
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
width: 174.sp,
|
||||||
height: 42.sp,
|
height: 42.sp,
|
||||||
margin: EdgeInsets.only(top: 15.sp),
|
margin: EdgeInsets.only(top: 35.sp),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(21.sp),
|
borderRadius: BorderRadius.circular(21.sp),
|
||||||
gradient: const LinearGradient(
|
gradient: const LinearGradient(
|
||||||
@ -158,39 +188,46 @@ class InvitePage extends StatelessWidget {
|
|||||||
child: Text(
|
child: Text(
|
||||||
'立即邀请',
|
'立即邀请',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white,
|
color: Color(0xFF000000),
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
fontWeight: FontWeight.w600),
|
fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
height: 40.sp,
|
height: 62.sp,
|
||||||
margin: EdgeInsets.only(left: 20.sp, right: 20.sp, top: 30.sp),
|
margin: EdgeInsets.only(
|
||||||
|
left: 20.sp, right: 20.sp, top: 15.sp),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Color(0x1AFFFFFF),
|
image: DecorationImage(
|
||||||
borderRadius: BorderRadius.circular(10.sp)),
|
image: AssetImage(getMineImage("invite_sys_bg")),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
child: Swiper(
|
child: Swiper(
|
||||||
physics: NeverScrollableScrollPhysics(),
|
physics: NeverScrollableScrollPhysics(),
|
||||||
autoplay: true,
|
autoplay: true,
|
||||||
// controller: 5,
|
// controller: 5,
|
||||||
index: 0,
|
index: 0,
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
|
Map data = logic.sysData[index];
|
||||||
return Container(
|
return Container(
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'哟刚说A',
|
data['inviter_name'],
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xFFDC5BFD),
|
color: Color(0xff0DF5F7),
|
||||||
fontSize: 14.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w500),
|
fontWeight: FontWeight.w500),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 5.sp, right: 5.sp),
|
margin: EdgeInsets.only(
|
||||||
|
left: 5.sp, right: 5.sp),
|
||||||
child: Text(
|
child: Text(
|
||||||
'邀请',
|
'邀请',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
@ -199,9 +236,9 @@ class InvitePage extends StatelessWidget {
|
|||||||
fontWeight: FontWeight.w500),
|
fontWeight: FontWeight.w500),
|
||||||
)),
|
)),
|
||||||
Text(
|
Text(
|
||||||
'扥扥',
|
data['invitee_name'],
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xFFDC5BFD),
|
color: Color(0xff0DF5F7),
|
||||||
fontSize: 14.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w500),
|
fontWeight: FontWeight.w500),
|
||||||
),
|
),
|
||||||
@ -218,28 +255,43 @@ class InvitePage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemCount: 5,
|
itemCount: logic.sysData.length,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
height: 203.sp,
|
height: 220.sp,
|
||||||
|
width: Get.width-30.sp,
|
||||||
margin:
|
margin:
|
||||||
EdgeInsets.only(left: 20.sp, right: 20.sp, top: 20.sp),
|
EdgeInsets.only(top: 15.sp),
|
||||||
|
padding: EdgeInsets.only(top: 10.sp,bottom: 10.sp,left: 10.sp,right: 10.sp),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(10.sp),
|
image:DecorationImage(
|
||||||
color: Color(0x1AFFFFFF),
|
image: AssetImage(getMineImage("invite_count_bg")),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
height: 80.sp,
|
margin: EdgeInsets.only(top: 15.sp),
|
||||||
margin: EdgeInsets.only(left: 15.sp, right: 15.sp),
|
alignment: Alignment.center,
|
||||||
|
child: Image.asset(getMineImage('invite_title'),height: 22.sp,),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(top: 15.sp),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Image.asset(getMineImage('invite_line'),height: 1.2.sp,),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 70.sp,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
left: 15.sp, right: 15.sp),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'邀请人数',
|
'邀请人数',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xFFDC5BFD),
|
color: Color(0xFF0DF5F7),
|
||||||
fontSize: 14.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w500),
|
fontWeight: FontWeight.w500),
|
||||||
),
|
),
|
||||||
@ -252,19 +304,15 @@ class InvitePage extends StatelessWidget {
|
|||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: 61.sp, right: 46.sp),
|
left: 61.sp, right: 46.sp),
|
||||||
height: 2.sp,
|
height: 2.sp,
|
||||||
color: Color(0xFFDC5BFD).withOpacity(0.4),
|
color: Color(0xFF0DF5F7),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 15.sp),
|
margin: EdgeInsets.only(
|
||||||
|
left: 15.sp),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment:
|
mainAxisAlignment:
|
||||||
MainAxisAlignment.spaceBetween,
|
MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children:peopleCountList,
|
||||||
peopleCountWidget('20', true),
|
|
||||||
peopleCountWidget('50', true),
|
|
||||||
peopleCountWidget('100', true),
|
|
||||||
peopleCountWidget('500', true),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
@ -272,14 +320,15 @@ class InvitePage extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
Container(
|
Container(
|
||||||
height: 80.sp,
|
height: 20.sp,
|
||||||
margin: EdgeInsets.only(left: 15.sp, right: 15.sp),
|
margin: EdgeInsets.only(
|
||||||
|
left: 15.sp, right: 15.sp),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'会员时长',
|
'会员时长',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xFFDC5BFD),
|
color: Color(0xFF0DF5F7),
|
||||||
fontSize: 14.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w500),
|
fontWeight: FontWeight.w500),
|
||||||
),
|
),
|
||||||
@ -290,42 +339,34 @@ class InvitePage extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: 20.sp, right: 10.sp),
|
left: 25.sp, right: 15.sp),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment:
|
mainAxisAlignment:
|
||||||
MainAxisAlignment.spaceBetween,
|
MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: dayCountList
|
||||||
timeWidget(
|
|
||||||
'+30天',
|
|
||||||
),
|
|
||||||
timeWidget(
|
|
||||||
'+100天',
|
|
||||||
),
|
|
||||||
timeWidget(
|
|
||||||
'+365天',
|
|
||||||
),
|
|
||||||
timeWidget(
|
|
||||||
'+3年',
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
|
Expanded(child: Container()),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 15.sp, right: 15.sp),
|
margin: EdgeInsets.only(
|
||||||
|
left: 15.sp, right: 15.sp,bottom: 15.sp),
|
||||||
child: RichText(
|
child: RichText(
|
||||||
text: TextSpan(
|
text: TextSpan(
|
||||||
children: getTextSpanList(
|
children: allSpan
|
||||||
'Tip:您已成功邀请 19位同好,免费获得会员120天, 再邀请1位同友可领取更多奖励~',
|
|
||||||
Color(0xFFDC5BFD),
|
|
||||||
14.sp,
|
|
||||||
searchContent: 'Tip:'),
|
|
||||||
)))
|
)))
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
|
SafeArea(
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.only(top: 15.sp),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Image.asset(getMineImage('invite_vip_desc'),width: Get.width-30.sp,),
|
||||||
|
),
|
||||||
|
),
|
||||||
// Container(
|
// Container(
|
||||||
// height: 203.sp,
|
// height: 203.sp,
|
||||||
// margin:
|
// margin:
|
||||||
@ -369,7 +410,8 @@ class InvitePage extends StatelessWidget {
|
|||||||
// itemCount: 5,
|
// itemCount: 5,
|
||||||
// ))
|
// ))
|
||||||
// ])),
|
// ])),
|
||||||
]))));
|
]));
|
||||||
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
peopleCountWidget(String count, bool isCheck) {
|
peopleCountWidget(String count, bool isCheck) {
|
||||||
@ -378,10 +420,10 @@ class InvitePage extends StatelessWidget {
|
|||||||
height: 46.sp,
|
height: 46.sp,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
decoration:
|
decoration:
|
||||||
BoxDecoration(color: Color(0xFFDC5BFD), shape: BoxShape.circle),
|
BoxDecoration(color: isCheck ? Color(0xFF0DF5F7) : Color(0xFF504261), shape: BoxShape.circle),
|
||||||
child: Text(
|
child: Text(
|
||||||
'$count人',
|
'$count人',
|
||||||
style: TextStyle(color: Colors.white, fontSize: 12.sp),
|
style: TextStyle(color:isCheck ? Color(0xFF000000) : Colors.white, fontSize: 12.sp),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -392,6 +434,13 @@ class InvitePage extends StatelessWidget {
|
|||||||
style: TextStyle(color: Colors.white, fontSize: 12.sp),
|
style: TextStyle(color: Colors.white, fontSize: 12.sp),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void shopSharePiker(String code,String link) {
|
||||||
|
Get.bottomSheet(
|
||||||
|
Share(code,link), isScrollControlled: true,
|
||||||
|
enableDrag: false
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void showCodePicker(InviteLogic logic) {
|
void showCodePicker(InviteLogic logic) {
|
||||||
@ -420,7 +469,7 @@ void showCodePicker(InviteLogic logic) {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 20, right: 20.sp,top: 30.sp),
|
margin: EdgeInsets.only(left: 20, right: 20.sp, top: 30.sp),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Color(0x1AFFFFFF),
|
color: Color(0x1AFFFFFF),
|
||||||
borderRadius: BorderRadius.circular(6.sp)),
|
borderRadius: BorderRadius.circular(6.sp)),
|
||||||
@ -450,7 +499,8 @@ void showCodePicker(InviteLogic logic) {
|
|||||||
),
|
),
|
||||||
Expanded(child: Container()),
|
Expanded(child: Container()),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 40.sp,right: 40.sp,bottom: 20.sp),
|
margin: EdgeInsets.only(
|
||||||
|
left: 40.sp, right: 40.sp, bottom: 20.sp),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
@ -467,12 +517,20 @@ void showCodePicker(InviteLogic logic) {
|
|||||||
color: Color(0x1AFFFFFF)),
|
color: Color(0x1AFFFFFF)),
|
||||||
child: const Text(
|
child: const Text(
|
||||||
'放弃对接',
|
'放弃对接',
|
||||||
style: TextStyle(color: Colors.white, fontSize: 16),
|
style: TextStyle(
|
||||||
|
color: Colors.white, fontSize: 16),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {},
|
onTap: () {
|
||||||
|
if (logic.codeEditingController.text.isEmpty) {
|
||||||
|
showOKToast('请输入邀请码');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Get.back();
|
||||||
|
logic.addCode(logic.codeEditingController.text);
|
||||||
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
width: 114.sp,
|
width: 114.sp,
|
||||||
@ -488,7 +546,7 @@ void showCodePicker(InviteLogic logic) {
|
|||||||
child: const Text(
|
child: const Text(
|
||||||
'确认对接',
|
'确认对接',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white, fontSize: 16),
|
color: Colors.black, fontSize: 16),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@ -6,7 +6,10 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
const loginBgWidget = Image(
|
||||||
|
image: AssetImage('assets/images/base/bg.png'),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
);
|
||||||
class LoginPage extends StatelessWidget {
|
class LoginPage extends StatelessWidget {
|
||||||
LoginPage({Key? key}) : super(key: key);
|
LoginPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@ -19,13 +22,9 @@ class LoginPage extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Stack(
|
return Stack(
|
||||||
|
fit: StackFit.expand,
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
loginBgWidget,
|
||||||
getBaseImage('bg'),
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
width: Get.width,
|
|
||||||
height: Get.height,
|
|
||||||
),
|
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
@ -61,10 +60,10 @@ class LoginPage extends StatelessWidget {
|
|||||||
|
|
||||||
child: Container(
|
child: Container(
|
||||||
width: 280.sp,
|
width: 280.sp,
|
||||||
height: 50.sp,
|
height: 60.sp,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
// color: Colors.white60,
|
// color: Colors.white60,
|
||||||
borderRadius: BorderRadius.circular(25.sp),
|
borderRadius: BorderRadius.circular(30.sp),
|
||||||
border: Border.all(color: Colors.white60,width: 0.5.sp)
|
border: Border.all(color: Colors.white60,width: 0.5.sp)
|
||||||
),)),
|
),)),
|
||||||
Row(
|
Row(
|
||||||
@ -118,7 +117,7 @@ class LoginPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(top: 20.sp),
|
margin: EdgeInsets.only(top: 25.sp),
|
||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
@ -127,10 +126,10 @@ class LoginPage extends StatelessWidget {
|
|||||||
|
|
||||||
child: Container(
|
child: Container(
|
||||||
width: 280.sp,
|
width: 280.sp,
|
||||||
height: 50.sp,
|
height: 60.sp,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
// color: Colors.white60,
|
// color: Colors.white60,
|
||||||
borderRadius: BorderRadius.circular(25.sp),
|
borderRadius: BorderRadius.circular(30.sp),
|
||||||
border: Border.all(color: Colors.white60,width: 0.5.sp)
|
border: Border.all(color: Colors.white60,width: 0.5.sp)
|
||||||
),)),
|
),)),
|
||||||
Row(
|
Row(
|
||||||
@ -205,18 +204,18 @@ class LoginPage extends StatelessWidget {
|
|||||||
logic.login();
|
logic.login();
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
width: 168.sp,
|
width: 200.sp,
|
||||||
height: 42.sp,
|
height: 50.sp,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(21.sp),
|
borderRadius: BorderRadius.circular(25.sp),
|
||||||
gradient: const LinearGradient(
|
gradient: const LinearGradient(
|
||||||
begin: Alignment.centerLeft,
|
begin: Alignment.centerLeft,
|
||||||
end: Alignment.centerRight,
|
end: Alignment.centerRight,
|
||||||
colors: [Color(0xff0AFCFF), Color(0xffD739EA)])),
|
colors: [Color(0xff0AFCFF), Color(0xffD739EA)])),
|
||||||
child: Text(
|
child: Text(
|
||||||
'登录',
|
'登录',
|
||||||
style: TextStyle(color: Colors.white, fontSize: 16.sp),
|
style: TextStyle(color: Colors.white, fontSize: 16.sp,fontWeight: FontWeight.w500),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -232,13 +231,13 @@ class LoginPage extends StatelessWidget {
|
|||||||
child: Container(
|
child: Container(
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
!logic.check ? Container(width: 14.sp,height: 14.sp,decoration: BoxDecoration(border: Border.all(color: Colors.white70,width: 1.sp),borderRadius: BorderRadius.circular(10)),): Icon(Icons.check_circle_rounded,size: 15.sp,color: Color(0xff00FFF4),),
|
!logic.check ? Container(width: 18.sp,height: 18.sp,decoration: BoxDecoration(border: Border.all(color: Colors.white70,width: 1.sp),borderRadius: BorderRadius.circular(10)),): Icon(Icons.check_circle_rounded,size: 19.sp,color: Color(0xff00FFF4),),
|
||||||
SizedBox(width: 4.sp,),
|
SizedBox(width: 4.sp,),
|
||||||
Text(
|
Text(
|
||||||
'同意',
|
'同意',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontSize: 11.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w600),
|
fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
@ -252,7 +251,7 @@ class LoginPage extends StatelessWidget {
|
|||||||
'《用户协议》',
|
'《用户协议》',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xff00FFF4),
|
color: Color(0xff00FFF4),
|
||||||
fontSize: 11.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -261,7 +260,7 @@ class LoginPage extends StatelessWidget {
|
|||||||
'和',
|
'和',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontSize: 11.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w600),
|
fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
@ -275,7 +274,7 @@ class LoginPage extends StatelessWidget {
|
|||||||
'《隐私协议》',
|
'《隐私协议》',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xff00FFF4),
|
color: Color(0xff00FFF4),
|
||||||
fontSize: 11.sp,
|
fontSize: 14.sp,
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -2,8 +2,10 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:circle_app/app/circle/view.dart';
|
||||||
import 'package:circle_app/router/app_routers.dart';
|
import 'package:circle_app/router/app_routers.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
@ -12,11 +14,18 @@ import '../../util/SharedPreferencesHelper.dart';
|
|||||||
import '../../util/util.dart';
|
import '../../util/util.dart';
|
||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
|
||||||
|
const vipIcon = 'assets/images/home/icon_vip.png';
|
||||||
|
|
||||||
|
const MyImageWidget = const Image(
|
||||||
|
image: AssetImage(vipIcon),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
);
|
||||||
class MinefragmentPage extends StatelessWidget {
|
class MinefragmentPage extends StatelessWidget {
|
||||||
MinefragmentPage({Key? key}) : super(key: key);
|
MinefragmentPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
final logic = Get.lazyPut(() => MinefragmentLogic());
|
final logic = Get.lazyPut(() => MinefragmentLogic());
|
||||||
|
|
||||||
|
|
||||||
final state = Get
|
final state = Get
|
||||||
.find<MinefragmentLogic>()
|
.find<MinefragmentLogic>()
|
||||||
.state;
|
.state;
|
||||||
@ -34,11 +43,8 @@ class MinefragmentPage extends StatelessWidget {
|
|||||||
body: Container(
|
body: Container(
|
||||||
width: Get.width,
|
width: Get.width,
|
||||||
height: Get.height,
|
height: Get.height,
|
||||||
decoration: BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
image: DecorationImage(
|
image: bgWidget
|
||||||
image: AssetImage(getBaseImage("home_back")),
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
@ -55,17 +61,14 @@ class MinefragmentPage extends StatelessWidget {
|
|||||||
showRechargeDialog(logic);
|
showRechargeDialog(logic);
|
||||||
},
|
},
|
||||||
child: Stack(children: [
|
child: Stack(children: [
|
||||||
Image(
|
MyImageWidget,
|
||||||
image: AssetImage(getHomeImage("icon_vip")),
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
),
|
|
||||||
Positioned(
|
Positioned(
|
||||||
top: 54.sp,
|
top: 58.sp,
|
||||||
left: 71.3.sp,
|
left: 90.sp,
|
||||||
child: Text(logic.vipMsg,style: TextStyle(color: const Color(0x99FFFFFF),fontSize: 12.sp),)),
|
child: Text(logic.vipMsg,style: TextStyle(color: const Color(0x99FFFFFF),fontSize: 12.sp),)),
|
||||||
Positioned(
|
Positioned(
|
||||||
top: 24.sp,
|
top: 32.sp,
|
||||||
left: 71.3.sp,
|
left: 90.sp,
|
||||||
child: Text("会员-微乐园贵宾",style: TextStyle(color: const Color(0xFFFFFFFF),fontSize: 16.sp),))
|
child: Text("会员-微乐园贵宾",style: TextStyle(color: const Color(0xFFFFFFFF),fontSize: 16.sp),))
|
||||||
],),
|
],),
|
||||||
),
|
),
|
||||||
@ -80,7 +83,7 @@ class MinefragmentPage extends StatelessWidget {
|
|||||||
|
|
||||||
Widget _circleLiveView(MinefragmentLogic logic) {
|
Widget _circleLiveView(MinefragmentLogic logic) {
|
||||||
return Column(
|
return Column(
|
||||||
children: [_circleItemView(logic), _helpItemView(), _invienItemView(), _setUpItemView()],
|
children: [_circleItemView(logic), _invienItemView(), _helpItemView(),_setUpItemView()],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +191,7 @@ class MinefragmentPage extends StatelessWidget {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Image(
|
Image(
|
||||||
image: AssetImage(getHomeImage("mine_help")),
|
image: AssetImage(getMineImage("invite_icon")),
|
||||||
width: 24.sp,
|
width: 24.sp,
|
||||||
height: 24.sp,
|
height: 24.sp,
|
||||||
),
|
),
|
||||||
@ -203,7 +206,7 @@ class MinefragmentPage extends StatelessWidget {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const Text(
|
const Text(
|
||||||
"免费领领会员",
|
"免费领取会员",
|
||||||
style: TextStyle(color: Colors.white60),
|
style: TextStyle(color: Colors.white60),
|
||||||
),
|
),
|
||||||
Image(
|
Image(
|
||||||
|
|||||||
@ -211,6 +211,16 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
|
|||||||
.where(
|
.where(
|
||||||
(element) => (element?.groupID != null || element?.userID != null))
|
(element) => (element?.groupID != null || element?.userID != null))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
|
// 过滤指定的 userID
|
||||||
|
String devtTargetUserID = "qpqz_dev_10_10000000000";
|
||||||
|
String prodTargetUserID = "qpqz_dev_10_10000000000";
|
||||||
|
filteredConversationList = filteredConversationList
|
||||||
|
.where((conversation) =>
|
||||||
|
conversation?.userID != devtTargetUserID ||conversation?.userID != prodTargetUserID)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
|
||||||
if (widget.conversationCollector != null) {
|
if (widget.conversationCollector != null) {
|
||||||
filteredConversationList = filteredConversationList
|
filteredConversationList = filteredConversationList
|
||||||
.where(widget.conversationCollector!)
|
.where(widget.conversationCollector!)
|
||||||
@ -455,6 +465,7 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
|
|||||||
Map myInfo = jsonDecode(myuserFullInfo!
|
Map myInfo = jsonDecode(myuserFullInfo!
|
||||||
.customInfo!['Label']
|
.customInfo!['Label']
|
||||||
.toString());
|
.toString());
|
||||||
|
if (myInfo != null) {
|
||||||
if (myInfo.containsKey('city')) {
|
if (myInfo.containsKey('city')) {
|
||||||
if (myInfo['city']
|
if (myInfo['city']
|
||||||
.toString()
|
.toString()
|
||||||
@ -463,6 +474,7 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (userFullInfo != null) {
|
if (userFullInfo != null) {
|
||||||
List<String> userIdList =
|
List<String> userIdList =
|
||||||
|
|||||||
@ -68,7 +68,7 @@ class Sys_notify_listPage extends StatelessWidget {
|
|||||||
if (data.image != null) {
|
if (data.image != null) {
|
||||||
widgets.add(Image.network(
|
widgets.add(Image.network(
|
||||||
data.image!,
|
data.image!,
|
||||||
width: 267,
|
width: 0.712 * Get.width,
|
||||||
height: 114.sp,
|
height: 114.sp,
|
||||||
fit: BoxFit.fill,
|
fit: BoxFit.fill,
|
||||||
));
|
));
|
||||||
@ -171,7 +171,7 @@ class Sys_notify_listPage extends StatelessWidget {
|
|||||||
Column(
|
Column(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
width: 267.sp,
|
width: 0.712 * Get.width,
|
||||||
margin: EdgeInsets.only(left: 10.sp),
|
margin: EdgeInsets.only(left: 10.sp),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(10.sp),
|
borderRadius: BorderRadius.circular(10.sp),
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:circle_app/app/circle/logic.dart';
|
import 'package:circle_app/app/circle/logic.dart';
|
||||||
|
import 'package:circle_app/app/circle/view.dart';
|
||||||
import 'package:circle_app/common/Widgets/open_vip_tip/view.dart';
|
import 'package:circle_app/common/Widgets/open_vip_tip/view.dart';
|
||||||
import 'package:circle_app/main.dart';
|
import 'package:circle_app/main.dart';
|
||||||
import 'package:circle_app/network/api.dart';
|
import 'package:circle_app/network/api.dart';
|
||||||
@ -63,10 +64,8 @@ class MsgPage extends StatelessWidget {
|
|||||||
Container(
|
Container(
|
||||||
width: MediaQuery.of(context).size.width,
|
width: MediaQuery.of(context).size.width,
|
||||||
height: MediaQuery.of(context).size.height,
|
height: MediaQuery.of(context).size.height,
|
||||||
decoration: BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
image: DecorationImage(
|
image: bgWidget),
|
||||||
fit: BoxFit.fill,
|
|
||||||
image: AssetImage(getBaseImage('home_back')))),
|
|
||||||
),
|
),
|
||||||
SafeArea(
|
SafeArea(
|
||||||
child: GetBuilder(builder: (MsgLogic controller) {
|
child: GetBuilder(builder: (MsgLogic controller) {
|
||||||
@ -253,8 +252,7 @@ class MsgPage extends StatelessWidget {
|
|||||||
width: Get.width,
|
width: Get.width,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Column(
|
||||||
child: Column(
|
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
getMsgImage('msg_first'),
|
getMsgImage('msg_first'),
|
||||||
@ -269,7 +267,6 @@ class MsgPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
|
|||||||
@ -23,8 +23,6 @@ class SplashLogic extends GetxController {
|
|||||||
void onReady() async {
|
void onReady() async {
|
||||||
// TODO: implement onReady
|
// TODO: implement onReady
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -32,19 +30,16 @@ class SplashLogic extends GetxController {
|
|||||||
super.onInit();
|
super.onInit();
|
||||||
// await Future.delayed(Duration(seconds: 30));
|
// await Future.delayed(Duration(seconds: 30));
|
||||||
if ((await getAuthorization()).isEmpty) {
|
if ((await getAuthorization()).isEmpty) {
|
||||||
if(Platform.isIOS){
|
if (Platform.isIOS) {
|
||||||
pushLoginPage();
|
pushLoginPage();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool isAgreemement = await getAgreemement();
|
bool isAgreemement = await getAgreemement();
|
||||||
if(!isAgreemement){
|
if (!isAgreemement) {
|
||||||
showReportDialog();
|
showReportDialog();
|
||||||
}else{
|
} else {
|
||||||
pushLoginPage();
|
pushLoginPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var data =
|
var data =
|
||||||
await DioManager.instance.put(url: Api.refreshToken, params: {});
|
await DioManager.instance.put(url: Api.refreshToken, params: {});
|
||||||
@ -65,7 +60,10 @@ class SplashLogic extends GetxController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else if(bean.code == 5000||bean.code == 5001||bean.code == 5002||bean.code == 5003){
|
} else if (bean.code == 5000 ||
|
||||||
|
bean.code == 5001 ||
|
||||||
|
bean.code == 5002 ||
|
||||||
|
bean.code == 5003) {
|
||||||
pushLoginPage();
|
pushLoginPage();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -73,7 +71,7 @@ class SplashLogic extends GetxController {
|
|||||||
if (bean.code == 500) {
|
if (bean.code == 500) {
|
||||||
await Future.delayed(Duration(seconds: 5));
|
await Future.delayed(Duration(seconds: 5));
|
||||||
onInit();
|
onInit();
|
||||||
}else {
|
} else {
|
||||||
pushLoginPage();
|
pushLoginPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +79,6 @@ class SplashLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void showReportDialog() {
|
void showReportDialog() {
|
||||||
FlutterNativeSplash.remove();
|
FlutterNativeSplash.remove();
|
||||||
showDialog(
|
showDialog(
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
@ -15,6 +17,7 @@ import '../../util/SharedPreferencesHelper.dart';
|
|||||||
import '../../util/eventBus.dart';
|
import '../../util/eventBus.dart';
|
||||||
import '../../util/qiniu.dart';
|
import '../../util/qiniu.dart';
|
||||||
import '../../util/util.dart';
|
import '../../util/util.dart';
|
||||||
|
import '../../view/notice.dart';
|
||||||
import '../dialog/BaseDialog.dart';
|
import '../dialog/BaseDialog.dart';
|
||||||
import 'state.dart';
|
import 'state.dart';
|
||||||
|
|
||||||
@ -41,6 +44,12 @@ class UserinfoLogic extends GetxController {
|
|||||||
bool isDestroy = false;
|
bool isDestroy = false;
|
||||||
final startTime = DateTime.now();
|
final startTime = DateTime.now();
|
||||||
SharedPreferences? sharedPreferences;
|
SharedPreferences? sharedPreferences;
|
||||||
|
@override
|
||||||
|
void onClose() {
|
||||||
|
// TODO: implement onClose
|
||||||
|
timer?.cancel();
|
||||||
|
super.onClose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() async {
|
void onInit() async {
|
||||||
@ -74,6 +83,10 @@ class UserinfoLogic extends GetxController {
|
|||||||
fetchQnToken(Api.getqiniuToken);
|
fetchQnToken(Api.getqiniuToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void showBlackDialog(BuildContext context) {
|
void showBlackDialog(BuildContext context) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@ -98,6 +111,7 @@ class UserinfoLogic extends GetxController {
|
|||||||
if (bean.isSuccess()) {
|
if (bean.isSuccess()) {
|
||||||
isMe = userId.isEmpty;
|
isMe = userId.isEmpty;
|
||||||
isLike = bean.data.isFollow;
|
isLike = bean.data.isFollow;
|
||||||
|
|
||||||
isLikeFoMsg =
|
isLikeFoMsg =
|
||||||
"${bean.data.likeMeCount}位圈友感兴趣,其中${bean.data.imageUrgeCount}位已催您更新";
|
"${bean.data.likeMeCount}位圈友感兴趣,其中${bean.data.imageUrgeCount}位已催您更新";
|
||||||
userInfoBean = bean.data.user;
|
userInfoBean = bean.data.user;
|
||||||
@ -107,6 +121,9 @@ class UserinfoLogic extends GetxController {
|
|||||||
if (isMe) {
|
if (isMe) {
|
||||||
isOnline = true;
|
isOnline = true;
|
||||||
} else {
|
} else {
|
||||||
|
if(!isLike){
|
||||||
|
startCountdown();
|
||||||
|
}
|
||||||
isOnline = userInfoBean!.isOnline;
|
isOnline = userInfoBean!.isOnline;
|
||||||
isBlackBeen = bean.data.isBlock;
|
isBlackBeen = bean.data.isBlock;
|
||||||
isDestroy = bean.data.isDestroy;
|
isDestroy = bean.data.isDestroy;
|
||||||
@ -130,6 +147,27 @@ class UserinfoLogic extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int countdown = 5;
|
||||||
|
Timer? timer = null;
|
||||||
|
|
||||||
|
startCountdown(){
|
||||||
|
|
||||||
|
timer = Timer.periodic(const Duration(seconds: 1), (t) {
|
||||||
|
if (countdown > 0) {
|
||||||
|
countdown--;
|
||||||
|
} else {
|
||||||
|
showFloatingButtonOverlay(Get.context!,userInfoBean!.nickname!,ageMsg,userInfoBean!.avatarThumb,0,(){
|
||||||
|
setLike();
|
||||||
|
});
|
||||||
|
|
||||||
|
timer?.cancel(); // 倒计时结束,取消定时器
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Future<void> fetchMyAlbum(String url) async {
|
Future<void> fetchMyAlbum(String url) async {
|
||||||
var myAlbumData = await DioManager.instance.get(url: url);
|
var myAlbumData = await DioManager.instance.get(url: url);
|
||||||
var myAlbumBean = BaseResponse<AlbumResponseBean>.fromJson(
|
var myAlbumBean = BaseResponse<AlbumResponseBean>.fromJson(
|
||||||
@ -196,6 +234,8 @@ class UserinfoLogic extends GetxController {
|
|||||||
(jsonData) => jsonData,
|
(jsonData) => jsonData,
|
||||||
);
|
);
|
||||||
if (bean.isSuccess()) {
|
if (bean.isSuccess()) {
|
||||||
|
|
||||||
|
timer?.cancel();
|
||||||
isLike = !isLike;
|
isLike = !isLike;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import 'package:circle_app/main.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
|
||||||
|
|
||||||
import '../../components/my_app_bar.dart';
|
import '../../components/my_app_bar.dart';
|
||||||
import '../../router/app_routers.dart';
|
import '../../router/app_routers.dart';
|
||||||
@ -70,7 +69,9 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Scaffold(
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Scaffold(
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
appBar: MyAppBar(
|
appBar: MyAppBar(
|
||||||
centerTitle: logic.userInfoBean != null
|
centerTitle: logic.userInfoBean != null
|
||||||
@ -79,7 +80,6 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
),
|
),
|
||||||
body: Stack(
|
body: Stack(
|
||||||
children: [
|
children: [
|
||||||
|
|
||||||
Container(
|
Container(
|
||||||
child: buildContent(logic),
|
child: buildContent(logic),
|
||||||
),
|
),
|
||||||
@ -91,6 +91,9 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +175,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
|
|
||||||
final chatButton = GestureDetector(
|
final chatButton = GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if(logic.isBlack||logic.isDestroy||logic.isBlackBeen){
|
if (logic.isBlack || logic.isDestroy || logic.isBlackBeen) {
|
||||||
showOKToast("私聊失败,存在拉黑关系或者该账户已注销");
|
showOKToast("私聊失败,存在拉黑关系或者该账户已注销");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -267,7 +270,9 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(width: 8.sp),
|
SizedBox(width: 8.sp),
|
||||||
logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): _buildInfoRow(controller),
|
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||||||
|
? Container()
|
||||||
|
: _buildInfoRow(controller),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
@ -283,7 +288,9 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
: const Color(0xFF787575),
|
: const Color(0xFF787575),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): Text(
|
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||||||
|
? Container()
|
||||||
|
: Text(
|
||||||
controller.onLineCity,
|
controller.onLineCity,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12.sp,
|
fontSize: 12.sp,
|
||||||
@ -299,7 +306,9 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 59.sp,
|
height: 59.sp,
|
||||||
child: logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): _buildInterestsListView(interests),
|
child: logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||||||
|
? Container()
|
||||||
|
: _buildInterestsListView(interests),
|
||||||
),
|
),
|
||||||
titleTab(controller),
|
titleTab(controller),
|
||||||
Expanded(
|
Expanded(
|
||||||
@ -309,8 +318,12 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
_tabController.animateTo(index);
|
_tabController.animateTo(index);
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container():_imageAdapter(controller),
|
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||||||
logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): HomeCallOutView(controller.userId),
|
? Container()
|
||||||
|
: _imageAdapter(controller),
|
||||||
|
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||||||
|
? Container()
|
||||||
|
: HomeCallOutView(controller.userId),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -327,7 +340,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final interest = interests[index];
|
final interest = interests[index];
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: (){
|
onTap: () {
|
||||||
Get.toNamed(AppRoutes.Signal_circle_list,
|
Get.toNamed(AppRoutes.Signal_circle_list,
|
||||||
arguments: interests[index].id);
|
arguments: interests[index].id);
|
||||||
},
|
},
|
||||||
@ -411,7 +424,9 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): GestureDetector(
|
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||||||
|
? Container()
|
||||||
|
: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (controller.isMe) {
|
if (controller.isMe) {
|
||||||
controller.isEdit = !controller.isEdit;
|
controller.isEdit = !controller.isEdit;
|
||||||
@ -599,7 +614,8 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
const SizedBox(width: 6),
|
const SizedBox(width: 6),
|
||||||
if (controller.isVip > 0)
|
if (controller.isVip > 0)
|
||||||
Image(
|
Image(
|
||||||
image: AssetImage(getBaseImage( controller.isVip == 1 ? "vip" : 'year_vip')),
|
image: AssetImage(
|
||||||
|
getBaseImage(controller.isVip == 1 ? "vip" : 'year_vip')),
|
||||||
width: 44.sp,
|
width: 44.sp,
|
||||||
height: 18.sp,
|
height: 18.sp,
|
||||||
),
|
),
|
||||||
|
|||||||
@ -51,6 +51,15 @@ loginIM(String userId, String sig) async {
|
|||||||
);
|
);
|
||||||
if (info.code == 0) {
|
if (info.code == 0) {
|
||||||
uploadBuzIDAndToken();
|
uploadBuzIDAndToken();
|
||||||
|
V2TimCallback setC2CReceiveMessageOptRes = await TencentImSDKPlugin
|
||||||
|
.v2TIMManager
|
||||||
|
.getMessageManager()
|
||||||
|
.setC2CReceiveMessageOpt(
|
||||||
|
userIDList: ['qpqz_dev_10_10000000000','qpqz_prod_10_10000000000'], // 需要设置的用户id列表
|
||||||
|
opt: ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE); // 用户消息接收选项属性
|
||||||
|
if (setC2CReceiveMessageOptRes.code == 0) {
|
||||||
|
//设置成功
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,9 +76,9 @@ void uploadBuzIDAndToken() async {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Platform.isAndroid) {
|
// if (Platform.isAndroid) {
|
||||||
initWxApi();
|
initWxApi();
|
||||||
}
|
// }
|
||||||
await ChannelPush.init((msg) {});
|
await ChannelPush.init((msg) {});
|
||||||
|
|
||||||
int? businessID = await TimUiKitPushPlugin.getBuzId(PushConfig.appInfo);
|
int? businessID = await TimUiKitPushPlugin.getBuzId(PushConfig.appInfo);
|
||||||
@ -434,8 +443,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
//填入设计稿中设备的屏幕尺寸,单位dp
|
//填入设计稿中设备的屏幕尺寸,单位dp
|
||||||
// configureDio();
|
// configureDio();
|
||||||
return
|
return ScreenUtilInit(
|
||||||
ScreenUtilInit(
|
|
||||||
designSize: const Size(375, 812),
|
designSize: const Size(375, 812),
|
||||||
minTextAdapt: true,
|
minTextAdapt: true,
|
||||||
splitScreenMode: true,
|
splitScreenMode: true,
|
||||||
|
|||||||
@ -246,4 +246,15 @@ class Api {
|
|||||||
//苹果支付
|
//苹果支付
|
||||||
static const applePayCallBack = 'mall-service/payment/apple/notify';
|
static const applePayCallBack = 'mall-service/payment/apple/notify';
|
||||||
|
|
||||||
|
//邀请好友主页
|
||||||
|
static const inviteMainPage = 'user-service/invite/mainPage';
|
||||||
|
|
||||||
|
//系统随机的邀请记录
|
||||||
|
static const inviteSysRecord = 'user-service/invite/record/rand';
|
||||||
|
|
||||||
|
//填写邀请码
|
||||||
|
static const inviteFillIn = 'user-service/invite/fillin';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -247,6 +247,10 @@ class DioManager {
|
|||||||
// }
|
// }
|
||||||
return responseMap;
|
return responseMap;
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
|
SharedPreferencesHelper sp = await SharedPreferencesHelper.getInstance();
|
||||||
|
if (sp.getString(SharedPreferencesHelper.LOGINPHONE) == '18800000100') {
|
||||||
|
return {'code': 500, 'msg': ''};
|
||||||
|
}
|
||||||
// // DioError是指返回值不为200的情况
|
// // DioError是指返回值不为200的情况
|
||||||
// logger.shout('DioError报错${e.type}:${e.error.toString()}');
|
// logger.shout('DioError报错${e.type}:${e.error.toString()}');
|
||||||
// // 对错误进行判断
|
// // 对错误进行判断
|
||||||
@ -255,8 +259,12 @@ class DioManager {
|
|||||||
// String? errorMsg = isNetworkConnected
|
// String? errorMsg = isNetworkConnected
|
||||||
// ? e.requestOptions.extra["errorMsg"]
|
// ? e.requestOptions.extra["errorMsg"]
|
||||||
// : "网络连接断开,请检查网络设置";
|
// : "网络连接断开,请检查网络设置";
|
||||||
return {'code': 500, 'msg': '请求失败'};
|
return {'code': 500, 'msg': '服务器开小差了,请重试'};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
SharedPreferencesHelper sp = await SharedPreferencesHelper.getInstance();
|
||||||
|
if (sp.getString(SharedPreferencesHelper.LOGINPHONE) == '18800000100') {
|
||||||
|
return {'code': 500, 'msg': ''};
|
||||||
|
}
|
||||||
// 其他一些意外的报错
|
// 其他一些意外的报错
|
||||||
return {'code': 500, 'msg': '请求异常'};
|
return {'code': 500, 'msg': '请求异常'};
|
||||||
}
|
}
|
||||||
|
|||||||
181
circle_app/lib/view/notice.dart
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
typedef void NoticeCallback();
|
||||||
|
|
||||||
|
|
||||||
|
void showFloatingButtonOverlay(
|
||||||
|
BuildContext context, String nickname, String ageMsg, String avatar,int event,NoticeCallback noticeCallback) {
|
||||||
|
OverlayState? overlayState = Overlay.of(context);
|
||||||
|
late OverlayEntry overlayEntry;
|
||||||
|
bool showMessage = false;
|
||||||
|
|
||||||
|
int countdownSeconds = 5; // 倒计时秒数
|
||||||
|
|
||||||
|
// 创建 Timer
|
||||||
|
late Timer countdownTimer;
|
||||||
|
|
||||||
|
// 创建 OverlayEntry
|
||||||
|
overlayEntry = OverlayEntry(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return Positioned(
|
||||||
|
top: 30,
|
||||||
|
// right: 16,
|
||||||
|
child: AnimatedContainer(
|
||||||
|
duration: const Duration(milliseconds: 500),
|
||||||
|
curve: Curves.easeInOut,
|
||||||
|
height: showMessage ? 95 : 0,
|
||||||
|
child: Container(
|
||||||
|
width: Get.width - 16,
|
||||||
|
margin: EdgeInsets.all(10.sp),
|
||||||
|
padding: EdgeInsets.fromLTRB(16.sp, 16.sp, 16.sp, 0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
color: const Color(0xFF353443),
|
||||||
|
),
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
ClipOval(
|
||||||
|
child: CachedNetworkImage(
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
placeholder: null,
|
||||||
|
imageUrl: avatar,
|
||||||
|
width: 48.sp,
|
||||||
|
height: 48.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 50.sp,
|
||||||
|
child: Text(
|
||||||
|
nickname,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Color.fromRGBO(247, 250, 250, 1.0),
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 8.sp),
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(17),
|
||||||
|
gradient: const LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color.fromRGBO(141, 255, 248, 1.0),
|
||||||
|
Color.fromRGBO(181, 211, 255, 1.0),
|
||||||
|
],
|
||||||
|
begin: Alignment.centerLeft,
|
||||||
|
end: Alignment.centerRight,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
top: 2.sp,
|
||||||
|
bottom: 2.sp,
|
||||||
|
left: 10.sp,
|
||||||
|
right: 10.sp,
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
ageMsg,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 10,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
Text( event == 0
|
||||||
|
? "看了这么久,给我点个喜欢呗~"
|
||||||
|
: event == 1
|
||||||
|
? "我喜欢了你,可以喜欢我一下吗?"
|
||||||
|
: event == 2
|
||||||
|
? "你喜欢的人上线啦,赶紧找他聊天吧!"
|
||||||
|
: "我也喜欢了你,一起聊聊呗~",
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey,
|
||||||
|
fontSize: 12.sp,
|
||||||
|
),
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
countdownTimer.cancel(); // 取消计时器
|
||||||
|
overlayEntry.remove();
|
||||||
|
noticeCallback();
|
||||||
|
|
||||||
|
// logic.setLike();
|
||||||
|
// logic.showMessage = false;
|
||||||
|
// logic.update();
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.only(top: 6.sp),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(17),
|
||||||
|
gradient: const LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color(0xFF06F9FA),
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
],
|
||||||
|
begin: Alignment.centerLeft,
|
||||||
|
end: Alignment.centerRight,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 16.sp, vertical: 6.sp),
|
||||||
|
child: Text(
|
||||||
|
event == 0
|
||||||
|
? "喜欢"
|
||||||
|
: event == 1
|
||||||
|
? "回关"
|
||||||
|
: event == 2
|
||||||
|
? "私聊"
|
||||||
|
: "私聊",
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 14.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
// ),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
// setState(() {});
|
||||||
|
showMessage = true;
|
||||||
|
countdownTimer = Timer.periodic(Duration(seconds: 1), (timer) {
|
||||||
|
if (countdownSeconds > 0) {
|
||||||
|
countdownSeconds--;
|
||||||
|
// overlayEntry.markNeedsBuild(); // 刷新 OverlayEntry
|
||||||
|
} else {
|
||||||
|
timer.cancel(); // 取消计时器
|
||||||
|
overlayEntry.remove(); // 移除 OverlayEntry
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 将 OverlayEntry 添加到 Overlay 中
|
||||||
|
overlayState?.insert(overlayEntry);
|
||||||
|
}
|
||||||
@ -93,15 +93,21 @@ dependencies:
|
|||||||
#event_bus:
|
#event_bus:
|
||||||
event_bus: ^2.0.0
|
event_bus: ^2.0.0
|
||||||
#安装apk
|
#安装apk
|
||||||
# flutter_install_app: 1.3.0
|
flutter_install_app: 1.3.0
|
||||||
#闪屏页
|
#闪屏页
|
||||||
flutter_native_splash: 2.2.16
|
flutter_native_splash: 2.2.16
|
||||||
#腾讯离线推送
|
#腾讯离线推送
|
||||||
tencent_chat_push_for_china: ^2.6.2+1
|
tencent_chat_push_for_china: ^2.6.2+1
|
||||||
#苹果内购
|
#苹果内购
|
||||||
in_app_purchase: ^3.0.8
|
in_app_purchase: ^3.0.8
|
||||||
|
#图片保存到相册
|
||||||
|
image_gallery_saver: ^1.7.1
|
||||||
|
#二维码生成
|
||||||
|
qr_flutter: ^4.0.0
|
||||||
|
#本地目录
|
||||||
|
path_provider: ^2.1.0
|
||||||
#第三方分享平台
|
#第三方分享平台
|
||||||
sharesdk_plugin: ^1.3.6
|
# sharesdk_plugin: 1.3.6
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||