From 9a095ad96f9cff3cc7451e4dbf81736c56ba1ee5 Mon Sep 17 00:00:00 2001 From: zengyi Date: Fri, 10 Oct 2025 13:45:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E5=92=8C=E4=B8=8A=E4=BC=A0=E5=AE=89=E5=8D=93=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++++++++++--- android/.gitignore | 6 +++--- android/key.properties | 4 ++++ android/kinetra_adehok_app.jks | Bin 0 -> 2744 bytes lib/dio_cilent/kt_apis.dart | 4 ++-- lib/dio_cilent/kt_request_interceptor.dart | 1 + lib/kt_pages/kt_routes.dart | 1 + lib/kt_utils/kt_device_info_utils.dart | 1 + lib/kt_utils/kt_purchase_restore_utils.dart | 1 + lib/kt_utils/kt_toast_utils.dart | 2 +- lib/kt_utils/kt_utils.dart | 5 +++-- lib/kt_widgets/kt_dialog.dart | 1 + lib/kt_widgets/kt_status_widget.dart | 3 +++ lib/kt_widgets/kt_store_widget.dart | 1 + lib/kt_widgets/kt_video_progress_bar.dart | 1 + 15 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 android/key.properties create mode 100644 android/kinetra_adehok_app.jks diff --git a/README.md b/README.md index eae9c0b..78e5af8 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ https://pub.dev/packages/flutter_native_splash # 生成安卓打包证书 keytool -genkeypair -v -keystore kinetra_adehok_app.jks -keyalg RSA -keysize 2048 -validity 10000 -alias com.kinetra.adehok.app -口令:123456@nyxora +口令:123456 # 查看安卓证书指纹 keytool -list -v -keystore kinetra_adehok_app.jks @@ -66,5 +66,13 @@ dart run build_runner watch --delete-conflicting-outputs # 打包 正式包: flutter build apk --release -aab的包: flutter build appbundle -iOS: flutter build ipa \ No newline at end of file +aab的包: flutter build aab --release +iOS: flutter build ipa或者flutter build iOS 完成后在xcode点击工具栏Product选择archive + +# 文件结构 +flutter_kinetra + -android:安卓侧相关配置文件 + -assets:图片、字体静态资源 + -ios:ios侧相关配置文件 + -lib:主要代码文件 + main.dart:项目启动入口函数 \ No newline at end of file diff --git a/android/.gitignore b/android/.gitignore index be3943c..45e3900 100755 --- a/android/.gitignore +++ b/android/.gitignore @@ -9,6 +9,6 @@ GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore -key.properties -**/*.keystore -**/*.jks +#key.properties +#**/*.keystore +#**/*.jks diff --git a/android/key.properties b/android/key.properties new file mode 100644 index 0000000..f4958fd --- /dev/null +++ b/android/key.properties @@ -0,0 +1,4 @@ +storePassword=123456 +keyPassword=123456 +keyAlias=com.kinetra.adehok.app +storeFile=../kinetra_adehok_app.jks \ No newline at end of file diff --git a/android/kinetra_adehok_app.jks b/android/kinetra_adehok_app.jks new file mode 100644 index 0000000000000000000000000000000000000000..c3f0bd9d0870bc193f408d0d31c0966443290d1a GIT binary patch literal 2744 zcma);X*3jk8^&kG%-EM^NXU|>EJK;G@7oZep++WIGG!M^c11=;G1k%)@>oKai0nI& zE&GzS#+t`&FoP_wcR4-h{q(*c?(;v_b=}wf@pt}60!t|f$bclU*g}~RL_;E-9mohw zBe0l)2`t7ZwgHj=>G`h+(f}qvYEJBmllcT?{ZEUH1qezbK(tRxb)@6(2811HiB$eu zvLU6w++SO#xyo7wjIos#ZY)mb85|*`Z4gMD3j`EFvO$^teG$YA0U!mT%yvXWpaTOK zhyZgjsKON~Y{#*eKZ%oZZo6Ax0=Q2g?lTwr#N7VdiTC;iHiiqGg9o9pd+{^J61LC# z8?JbOnl}4XvMlxpx#M#QYO!y)BpP}W53%LBjVQ?~ugBeNxz9!)QCMD63#exPHx?VM zVVs$3>%XcP6Uiy<((>in*~ENm^6D8E+(1%wIo-5F=C+iHwb3l9PKQrK=g|{fM%E%d zY;pV#Qjbx8IIs1pl-&m-eM-+O@esjr-`%nAh+_}DoQ9LiK%uMLKNyJk zY1HW92k5S|Jsa{)aJ9I))6nXniQgXOz=JCsRCHN0W)t{Z{Z?_Rt-quUaT2<*~ zrYm^T<(@CP(+bGThZn@H)>&-=uuz!X)0MY@NLhf)O>A6he$COM*#vvA{RL;M@zcbv zG&^;9v|v4HM~|=B1;{_lJ;4YIO&sPO)0(=7Oqb5Y3?iywy{~Q8as?v zr*K_ucR!3Lk`V-UJAQnBYVQ@ArJoK^tS#Y%=x?~mcUy0q8u zH5UwY{pC>24$kd>iOLMo-7j{pqlO3_#uU1)LpC7vi=8{YX?)DkI`VhY9#QR_FH7I+=RSrwNnMXWpfP$X$xN=;Bcb5C7DC)i|CNTY&&JXNET+*bQ+f=zN$awkX$frDMB1;v4x$`upWfrD=iZf^ z^@hz#;l_22>T;(yGkCLOKIfLWCtuw^t=Al$B>kAbt&;^&CU22_;{(@VFk!nhTRwz_ z70amD*pf{j6yX6?1P@+5+?d6CA8hzD7@&cY2qEx&GaZC@av=o%$@F#CxXG<~aCT+%T?1&F%wQF;Y{n(_r z)348+(5Oi~Y&y7zfu~MldA}>(WDc3KiWD}CWX%eDV{NMKiQO?0wJ#CbFz5{}9)5p7 zm0i~Y`lNTLWmm6s{}BsTjrmfCnhfKU|L~Jw4`NN%z9*GzFF8zJ{bHUZtlyq!!AcZz zijkN4gt9}b{l+CTH|mm*G~h146W|WG1aJem06YK=0B?X70Dq$K0Q(c=e3H8TOWgHonvAEtKgv^xZ5Ci7y`nT1R_H5|j{ zuU$Ibl3&!RT+A6W#CR^()kMX_I&nb9$+XWv*i~g@imBCFVM0EJPd4xl zu3K^VraXRON^>PXo+c)du2gqB6^;(NP9wN4mfyMD7MIhu^PMk|cT@aS`l8mtRT$Ro z(L;*4PRkRCw<@J+t9w$J8Uk6a{N!<7Z>C#pxkTC3bt+g{(#8i=|2*ROyCNl=0JPABvW@T=Bmi>NI)m83wmF8bdt2COJhTCIOa+YLf{?$Fb&Z z=j1EPW6Bvuk{O`~LgI-v7ExY@=MqP{SYMR>^p$8VrM1kOpYcu%x^3!bilo?}`tSId zn`FF7*Z^Xgh#?d=W+#HWD zgAc1`T)&m;CkKGX?YBZ&q zW?Q;`vDGD6seju(qC<=QzJOlQt!S(cDH{FIFVOt;5Ko()8T4LNy?_QuNNz%UN0iyQ z;-fRRE?qaLB=msc)8}{8U;C<8V?4IieN+qYc_Vq!DUZPKv?Vf3^<}b8v-&*7 z5D{pX6Wu*4uosb!aqz;1+tnx~)l~9@m-xn)yz$9z4IW4^uQXfp*b8lXt(b$B4_N9R zIdz+HzK?xxbdfS{GZ{D|D5;s(l}tZ$JY(@J9sxU-`?$ST?}evk@^ZCIgHV}|U6hI# zPN1zMKH35iJXA$^PjxFt?#}LCs1pb?%%> RKr%-^2X97m)Y?B0^AF3{{fYnp literal 0 HcmV?d00001 diff --git a/lib/dio_cilent/kt_apis.dart b/lib/dio_cilent/kt_apis.dart index b984afb..a6ffdc8 100644 --- a/lib/dio_cilent/kt_apis.dart +++ b/lib/dio_cilent/kt_apis.dart @@ -1,7 +1,7 @@ +// 接口地址及协议地址 class KtApis { static const String baseUrl = "https://api-csjiuxi.csjiuxi.com/kinet"; // static const String baseUrl = "https://test1-api.guyantv.com"; - // static const String baseUrl = "https://api-pdaroll.pdaroll.com/panda"; static const String homeAllModules = "/home/all-modules"; static const String newShortPlay = "/newShortPlay"; @@ -24,7 +24,7 @@ class KtApis { static const String uploadW2a = "/w2aSelfAttribution"; static const String activeAfterWatchingVideo = "/activeAfterWatchingVideo"; static String W2A_PREFIX = "[QJ]"; - static String W2A_NAME = "pandaloom"; + static String W2A_NAME = "kinetra"; static String adjustToken = "z44550428xz4"; // 用户 diff --git a/lib/dio_cilent/kt_request_interceptor.dart b/lib/dio_cilent/kt_request_interceptor.dart index c85c8a9..aba0ef5 100644 --- a/lib/dio_cilent/kt_request_interceptor.dart +++ b/lib/dio_cilent/kt_request_interceptor.dart @@ -7,6 +7,7 @@ import 'package:flustars/flustars.dart'; import '../kt_utils/kt_device_info_utils.dart'; import '../kt_utils/kt_keys.dart'; +///请求拦截器:主要配置请求头参数 class RequestInterceptor extends Interceptor { @override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { diff --git a/lib/kt_pages/kt_routes.dart b/lib/kt_pages/kt_routes.dart index 2aa8f28..64e6f8b 100644 --- a/lib/kt_pages/kt_routes.dart +++ b/lib/kt_pages/kt_routes.dart @@ -12,6 +12,7 @@ import 'kt_short_video/view.dart'; import 'kt_splash_page.dart'; import 'kt_webview_page.dart'; +///路由文件 class KtRoutes { static const String splash = '/'; static const String home = '/main'; diff --git a/lib/kt_utils/kt_device_info_utils.dart b/lib/kt_utils/kt_device_info_utils.dart index 77d3ddb..db4528f 100644 --- a/lib/kt_utils/kt_device_info_utils.dart +++ b/lib/kt_utils/kt_device_info_utils.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:package_info_plus/package_info_plus.dart'; +//获取设备信息工具类 class KtDeviceInfoUtil { static final KtDeviceInfoUtil _instance = KtDeviceInfoUtil._internal(); diff --git a/lib/kt_utils/kt_purchase_restore_utils.dart b/lib/kt_utils/kt_purchase_restore_utils.dart index aa52ff6..2ce2986 100644 --- a/lib/kt_utils/kt_purchase_restore_utils.dart +++ b/lib/kt_utils/kt_purchase_restore_utils.dart @@ -4,6 +4,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import '../kt_model/kt_goods_bean.dart'; +///restore工具类 class KtPurchaseRestoreUtil { static final KtPurchaseRestoreUtil _instance = KtPurchaseRestoreUtil._internal(); diff --git a/lib/kt_utils/kt_toast_utils.dart b/lib/kt_utils/kt_toast_utils.dart index 1714e46..e278409 100644 --- a/lib/kt_utils/kt_toast_utils.dart +++ b/lib/kt_utils/kt_toast_utils.dart @@ -2,7 +2,7 @@ import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; - +//toast提示工具类 final class KtToastUtils { KtToastUtils._(); diff --git a/lib/kt_utils/kt_utils.dart b/lib/kt_utils/kt_utils.dart index 01c550d..ccf6927 100644 --- a/lib/kt_utils/kt_utils.dart +++ b/lib/kt_utils/kt_utils.dart @@ -5,8 +5,9 @@ import 'package:in_app_purchase/in_app_purchase.dart'; import 'package:in_app_purchase_android/billing_client_wrappers.dart'; import 'package:in_app_purchase_android/in_app_purchase_android.dart'; import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart'; - +//工具类 class KtUtils { + ///获取时区 static String getTimeZoneOffset(DateTime dateTime) { Duration offset = dateTime.timeZoneOffset; String sign = offset.isNegative ? '-' : '+'; @@ -27,7 +28,7 @@ class KtUtils { return !isEmpty(value); } - +///获取iOS内购优惠价格(安卓为获取原价) static String getDiscountPrice(ProductDetails? product, {bool showDiscount = false}) { String price = product?.price ?? ''; if (product == null) return price; diff --git a/lib/kt_widgets/kt_dialog.dart b/lib/kt_widgets/kt_dialog.dart index 8640150..faee847 100644 --- a/lib/kt_widgets/kt_dialog.dart +++ b/lib/kt_widgets/kt_dialog.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_kinetra/kt_utils/kt_string_extend.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +//app弹窗封装 class KtDialog extends StatelessWidget { final String title; final String subTitle; diff --git a/lib/kt_widgets/kt_status_widget.dart b/lib/kt_widgets/kt_status_widget.dart index acfeae7..d04f440 100644 --- a/lib/kt_widgets/kt_status_widget.dart +++ b/lib/kt_widgets/kt_status_widget.dart @@ -2,10 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_kinetra/kt_utils/kt_string_extend.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +///错误状态枚举 enum KtErrorStatusType { noNetwork, loadFailed, nothingYet, notFound } +///loading状态枚举 enum KtLoadStatusType { loading, loadSuccess, loadFailed, loadNoData } +///状态组件封装 class KtStatusWidget extends StatelessWidget { final KtErrorStatusType type; final String? message; diff --git a/lib/kt_widgets/kt_store_widget.dart b/lib/kt_widgets/kt_store_widget.dart index 3b7e704..73ebcf4 100644 --- a/lib/kt_widgets/kt_store_widget.dart +++ b/lib/kt_widgets/kt_store_widget.dart @@ -8,6 +8,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import '../kt_model/kt_store_bean.dart'; +///商店组件 class KtStoreWidget extends StatefulWidget { final KtStoreBean store; final bool onlyCoins; diff --git a/lib/kt_widgets/kt_video_progress_bar.dart b/lib/kt_widgets/kt_video_progress_bar.dart index 83b5605..cfc23c5 100644 --- a/lib/kt_widgets/kt_video_progress_bar.dart +++ b/lib/kt_widgets/kt_video_progress_bar.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:video_player/video_player.dart'; +///视频进度条组件 class CustomVideoProgressBar extends StatefulWidget { final VideoPlayerController controller;