Commit 2ffc9c3c authored by 关振斌's avatar 关振斌

update

parent fa129e94
...@@ -7,11 +7,15 @@ PODS: ...@@ -7,11 +7,15 @@ PODS:
- Flutter - Flutter
- alipay_kit_ios/vendor (5.0.0): - alipay_kit_ios/vendor (5.0.0):
- Flutter - Flutter
- "app_settings (3.0.0+1)":
- Flutter
- babstrap_settings_screen (0.0.1): - babstrap_settings_screen (0.0.1):
- Flutter - Flutter
- connectivity_plus (0.0.1): - connectivity_plus (0.0.1):
- Flutter - Flutter
- ReachabilitySwift - ReachabilitySwift
- device_info_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.4): - DKImagePickerController/Core (4.3.4):
- DKImagePickerController/ImageDataManager - DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource - DKImagePickerController/Resource
...@@ -51,11 +55,11 @@ PODS: ...@@ -51,11 +55,11 @@ PODS:
- FirebaseAuth (~> 10.3.0) - FirebaseAuth (~> 10.3.0)
- Firebase/CoreOnly (10.3.0): - Firebase/CoreOnly (10.3.0):
- FirebaseCore (= 10.3.0) - FirebaseCore (= 10.3.0)
- firebase_auth (4.2.6): - firebase_auth (4.2.10):
- Firebase/Auth (= 10.3.0) - Firebase/Auth (= 10.3.0)
- firebase_core - firebase_core
- Flutter - Flutter
- firebase_core (2.5.0): - firebase_core (2.7.1):
- Firebase/CoreOnly (= 10.3.0) - Firebase/CoreOnly (= 10.3.0)
- Flutter - Flutter
- FirebaseAuth (10.3.0): - FirebaseAuth (10.3.0):
...@@ -147,8 +151,10 @@ PODS: ...@@ -147,8 +151,10 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- alipay_kit_ios (from `.symlinks/plugins/alipay_kit_ios/ios`) - alipay_kit_ios (from `.symlinks/plugins/alipay_kit_ios/ios`)
- app_settings (from `.symlinks/plugins/app_settings/ios`)
- babstrap_settings_screen (from `.symlinks/plugins/babstrap_settings_screen/ios`) - babstrap_settings_screen (from `.symlinks/plugins/babstrap_settings_screen/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
...@@ -194,10 +200,14 @@ SPEC REPOS: ...@@ -194,10 +200,14 @@ SPEC REPOS:
EXTERNAL SOURCES: EXTERNAL SOURCES:
alipay_kit_ios: alipay_kit_ios:
:path: ".symlinks/plugins/alipay_kit_ios/ios" :path: ".symlinks/plugins/alipay_kit_ios/ios"
app_settings:
:path: ".symlinks/plugins/app_settings/ios"
babstrap_settings_screen: babstrap_settings_screen:
:path: ".symlinks/plugins/babstrap_settings_screen/ios" :path: ".symlinks/plugins/babstrap_settings_screen/ios"
connectivity_plus: connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios" :path: ".symlinks/plugins/connectivity_plus/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker: file_picker:
:path: ".symlinks/plugins/file_picker/ios" :path: ".symlinks/plugins/file_picker/ios"
firebase_auth: firebase_auth:
...@@ -247,14 +257,16 @@ EXTERNAL SOURCES: ...@@ -247,14 +257,16 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
alipay_kit_ios: bfa484b12d4690cc48a803f39ed5fb58fa774d2e alipay_kit_ios: bfa484b12d4690cc48a803f39ed5fb58fa774d2e
app_settings: d103828c9f5d515c4df9ee754dabd443f7cedcf3
babstrap_settings_screen: 535097da0fa521a47fef6f6678ff2b464ee15937 babstrap_settings_screen: 535097da0fa521a47fef6f6678ff2b464ee15937
connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: ce3938a0df3cc1ef404671531facef740d03f920 file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Firebase: f92fc551ead69c94168d36c2b26188263860acd9 Firebase: f92fc551ead69c94168d36c2b26188263860acd9
firebase_auth: b196f91b4f7c6d72015c3c12aaa82eb6972b2c2c firebase_auth: e94093901bee37bdba241fd8647c1d3ea6f55c8b
firebase_core: f95c8bbe65213d406d592573ad42a12d64849cb8 firebase_core: 1ae9f9aa76e6e1edc14fb181637ad466fd6c6fa4
FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6 FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6
FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
FirebaseCoreInternal: e463f41bb935cd049505bf7e9a5bdd7dcea90df6 FirebaseCoreInternal: e463f41bb935cd049505bf7e9a5bdd7dcea90df6
...@@ -268,24 +280,24 @@ SPEC CHECKSUMS: ...@@ -268,24 +280,24 @@ SPEC CHECKSUMS:
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882 GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882
image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4 open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
SDWebImage: 8ab87d4b3e5cc4927bd47f78db6ceb0b94442577 SDWebImage: 8ab87d4b3e5cc4927bd47f78db6ceb0b94442577
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440 sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2 smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
url_launcher_ios: fb12c43172927bb5cf75aeebd073f883801f1993 url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
vibration: 7d883d141656a1c1a6d8d238616b2042a51a1241 vibration: 7d883d141656a1c1a6d8d238616b2042a51a1241
video_player_avfoundation: e489aac24ef5cf7af82702979ed16f2a5ef84cff video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
C059CC5B29B6DFCC0068B7F5 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C059CC5A29B6DFCC0068B7F5 /* StoreKit.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
...@@ -48,7 +47,6 @@ ...@@ -48,7 +47,6 @@
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C059CC5929B6DFA10068B7F5 /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = "<group>"; }; C059CC5929B6DFA10068B7F5 /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = "<group>"; };
C059CC5A29B6DFCC0068B7F5 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
C08A8E50299A2161008F4DB8 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; }; C08A8E50299A2161008F4DB8 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
C0C4655B29A3007E00C47A11 /* RunnerProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerProfile.entitlements; sourceTree = "<group>"; }; C0C4655B29A3007E00C47A11 /* RunnerProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerProfile.entitlements; sourceTree = "<group>"; };
D2718D25F9034030E31B924F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; D2718D25F9034030E31B924F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
...@@ -60,7 +58,6 @@ ...@@ -60,7 +58,6 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
8B8F5CAD6B019351870A46AE /* Pods_Runner.framework in Frameworks */, 8B8F5CAD6B019351870A46AE /* Pods_Runner.framework in Frameworks */,
C059CC5B29B6DFCC0068B7F5 /* StoreKit.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -70,7 +67,6 @@ ...@@ -70,7 +67,6 @@
36FEE18528C617843FAFC14B /* Frameworks */ = { 36FEE18528C617843FAFC14B /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
C059CC5A29B6DFCC0068B7F5 /* StoreKit.framework */,
5A7A6DEAB487D7E066FC9441 /* Pods_Runner.framework */, 5A7A6DEAB487D7E066FC9441 /* Pods_Runner.framework */,
); );
name = Frameworks; name = Frameworks;
......
...@@ -4,10 +4,6 @@ ...@@ -4,10 +4,6 @@
<dict> <dict>
<key>CADisableMinimumFrameDurationOnPhone</key> <key>CADisableMinimumFrameDurationOnPhone</key>
<true/> <true/>
<key>CFBundleLocalizations</key>
<array>
<string>zh</string>
</array>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
...@@ -18,6 +14,10 @@ ...@@ -18,6 +14,10 @@
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleLocalizations</key>
<array>
<string>zh</string>
</array>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>chart</string> <string>chart</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
...@@ -28,10 +28,21 @@ ...@@ -28,10 +28,21 @@
<string>????</string> <string>????</string>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
<array> <array>
<dict/> <dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array/>
</dict>
</array> </array>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string> <string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>weixinULAPI</string>
<string>weixinOpenSDK</string>
</array>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>NSPhotoLibraryUsageDescription</key> <key>NSPhotoLibraryUsageDescription</key>
......
...@@ -2,10 +2,6 @@ ...@@ -2,10 +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>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
<key>com.apple.developer.associated-domains</key> <key>com.apple.developer.associated-domains</key>
<array> <array>
<string>applinks:www.fusiontech.cn/</string> <string>applinks:www.fusiontech.cn/</string>
......
...@@ -2,10 +2,6 @@ ...@@ -2,10 +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>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
<key>com.apple.developer.associated-domains</key> <key>com.apple.developer.associated-domains</key>
<array> <array>
<string>applinks:www.fusiontech.cn/</string> <string>applinks:www.fusiontech.cn/</string>
......
...@@ -2,10 +2,6 @@ ...@@ -2,10 +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>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
<key>com.apple.developer.associated-domains</key> <key>com.apple.developer.associated-domains</key>
<array> <array>
<string>applinks:www.fusiontech.cn/</string> <string>applinks:www.fusiontech.cn/</string>
......
...@@ -15,6 +15,15 @@ class UserAPI { ...@@ -15,6 +15,15 @@ class UserAPI {
return LoginEntity.fromMap(response['data']); return LoginEntity.fromMap(response['data']);
} }
/// 登录
static Future<LoginEntity> appleLogin(Map<String, dynamic> parameters) async {
var response = await HttpUtil().post(
'/user/appleLogin',
data: parameters,
);
return LoginEntity.fromMap(response['data']);
}
// /pay/notifyApplePay // /pay/notifyApplePay
static Future<ApplePayEntity> notifyApplePay( static Future<ApplePayEntity> notifyApplePay(
Map<String, dynamic> parameters) async { Map<String, dynamic> parameters) async {
...@@ -49,10 +58,14 @@ class UserAPI { ...@@ -49,10 +58,14 @@ class UserAPI {
//创建会话 //创建会话
static Future<int> createConversion() async { static Future<int> createConversion() async {
try {
var response = await HttpUtil().get( var response = await HttpUtil().get(
'/openAi/createConversion', '/openAi/createConversion',
); );
return response['data']; return response['data'];
} catch (e) {
return 401;
}
} }
static Future<int> endConversion(Map<String, dynamic> parameters) async { static Future<int> endConversion(Map<String, dynamic> parameters) async {
......
...@@ -14,5 +14,6 @@ class AppRoutes { ...@@ -14,5 +14,6 @@ class AppRoutes {
static const PRIVACT = '/privacy'; static const PRIVACT = '/privacy';
static const USER_PRIVACT = '/user_privacy'; static const USER_PRIVACT = '/user_privacy';
static const WILL_COME = '/will_come'; static const WILL_COME = '/will_come';
static const USER_EULA = '/eula';
// UserPrivacyPage // UserPrivacyPage
} }
import 'package:chart/pages/chat/view.dart'; import 'package:chart/pages/chat/view.dart';
import 'package:chart/pages/eula/bindings.dart';
import 'package:chart/pages/eula/view.dart';
import 'package:chart/pages/frame/android_pay_list/view.dart'; import 'package:chart/pages/frame/android_pay_list/view.dart';
import 'package:chart/pages/frame/notfound/index.dart'; import 'package:chart/pages/frame/notfound/index.dart';
import 'package:chart/pages/frame/pay_list/view.dart'; import 'package:chart/pages/frame/pay_list/view.dart';
...@@ -75,6 +77,17 @@ class AppPages { ...@@ -75,6 +77,17 @@ class AppPages {
// ] // ]
), ),
GetPage(
name: AppRoutes.USER_EULA,
page: () => UserEulaPage(), //ApplicationPage(),
binding: UserEulaBinding(), // ApplicationBinding(),
middlewares: [
// RouteAuthMiddleware(priority: 1),
],
// children: [
// ]
),
GetPage( GetPage(
name: AppRoutes.SIGN_IN, name: AppRoutes.SIGN_IN,
page: () => SignInPage(), page: () => SignInPage(),
......
...@@ -12,7 +12,7 @@ class ConfigStore extends GetxController { ...@@ -12,7 +12,7 @@ class ConfigStore extends GetxController {
PackageInfo? _platform; PackageInfo? _platform;
String get version => _platform?.version ?? '-'; String get version => _platform?.version ?? '-';
bool get isRelease => bool.fromEnvironment("dart.vm.product"); bool get isRelease => bool.fromEnvironment("dart.vm.product");
Locale locale = Locale('en', 'US'); Locale locale = Locale('zh', 'CN');
List<Locale> languages = [ List<Locale> languages = [
Locale('en', 'US'), Locale('en', 'US'),
Locale('zh', 'CN'), Locale('zh', 'CN'),
......
import 'dart:convert'; import 'dart:convert';
import 'package:chart/pages/main/controller.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:chart/common/apis/apis.dart'; import 'package:chart/common/apis/apis.dart';
import 'package:chart/common/entities/entities.dart'; import 'package:chart/common/entities/entities.dart';
import 'package:chart/common/routers/routes.dart'; import 'package:chart/common/routers/routes.dart';
...@@ -7,12 +9,20 @@ import 'package:chart/common/services/services.dart'; ...@@ -7,12 +9,20 @@ import 'package:chart/common/services/services.dart';
import 'package:chart/common/values/values.dart'; import 'package:chart/common/values/values.dart';
import 'package:chart/entity/login_entity.dart'; import 'package:chart/entity/login_entity.dart';
import 'package:chart/pages/application/index.dart'; import 'package:chart/pages/application/index.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
// import 'package:connectivity_plus/connectivity_plus.dart';
// import 'package:highlight/languages/rust.dart';
// import 'package:social_login_buttons/social_login_buttons.dart';
import '../../entity/user_entity.dart'; import '../../entity/user_entity.dart';
class UserStore extends GetxController { class UserStore extends GetxController {
static UserStore get to => Get.put(UserStore()); static UserStore get to => Get.put(UserStore());
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
var subscription;
// Get.find(); // Get.find();
// static StorageService get to => Get.put(StorageService()); // static StorageService get to => Get.put(StorageService());
...@@ -30,10 +40,28 @@ class UserStore extends GetxController { ...@@ -30,10 +40,28 @@ class UserStore extends GetxController {
bool get hasToken => token.isNotEmpty; bool get hasToken => token.isNotEmpty;
@override @override
void onInit() { void onInit() async {
super.onInit(); super.onInit();
subscription = Connectivity()
.onConnectivityChanged
.listen((ConnectivityResult result) {
print("resultresultresultresult$result");
if (result == ConnectivityResult.none ||
result == ConnectivityResult.other) {
} else {
refreshInfo();
// asyncLoadBannerData();
// Get.back();
}
// Got a new connectivity status!
});
if (GetPlatform.isAndroid) {
token = StorageService.to.getString(STORAGE_USER_TOKEN_KEY); token = StorageService.to.getString(STORAGE_USER_TOKEN_KEY);
var profileOffline = StorageService.to.getString(STORAGE_USER_PROFILE_KEY); var profileOffline =
StorageService.to.getString(STORAGE_USER_PROFILE_KEY);
if (profileOffline.isNotEmpty) { if (profileOffline.isNotEmpty) {
var l = jsonDecode(profileOffline); var l = jsonDecode(profileOffline);
...@@ -55,10 +83,39 @@ class UserStore extends GetxController { ...@@ -55,10 +83,39 @@ class UserStore extends GetxController {
if (profile.id != '') { if (profile.id != '') {
_isLogin.value = true; _isLogin.value = true;
} }
// _profile(IntegralEntity.fromMap();
// IntegralEntity.fromMap(result['data']);
// _profile(UserLoginResponseEntity.fromJson(jsonDecode(profileOffline)));
} }
} else {
// refreshInfo();
// appleLogin
// "phone": "",
// "smsCode": ""
// print('Running on ${iosInfo.data['identifierForVendor']}');
}
}
Future refreshInfo() async {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
final res = await UserAPI.appleLogin({
"phone": iosInfo.data['identifierForVendor'],
});
final value = IntegralEntity(
expireTime: res.expireTime == null ? null : res.expireTime,
id: res.id,
token: res.token,
username: res.username,
integral: res.integral,
);
token = res.token;
_profile.value = _profile(value);
if (profile.id != '') {
_isLogin.value = true;
}
await MainController.to.asyncLoadBannerData();
} }
handleLogin(IntegralEntity res) async { handleLogin(IntegralEntity res) async {
...@@ -97,6 +154,12 @@ class UserStore extends GetxController { ...@@ -97,6 +154,12 @@ class UserStore extends GetxController {
// } // }
} }
@override
dispose() {
subscription?.cancel();
super.dispose();
}
// 保存 token // 保存 token
Future<void> setToken(String value) async { Future<void> setToken(String value) async {
await StorageService.to.setString(STORAGE_USER_TOKEN_KEY, value); await StorageService.to.setString(STORAGE_USER_TOKEN_KEY, value);
......
// baidu yapi // baidu yapi
// const SERVER_API_URL = 'https://yapi.baidu.com/mock/41008'; // const SERVER_API_URL = 'https://yapi.baidu.com/mock/41008';
// const SERVER_API_URL = 'http://192.168.110.127:8083/api'; // const SERVER_API_URL = 'http://192.168.120.175:8083/api';
const SERVER_API_URL = 'http://101.34.153.228:8083/api';//线上 const SERVER_API_URL = 'http://101.34.153.228:8083/api';//线上
// const SERVER_API_URL = 'http://192.168.2.178:8083/api';//线上 // const SERVER_API_URL = 'http://192.168.2.178:8083/api';//线上
//http://192.168.2.178:8083/api/doc.html //http://192.168.2.178:8083/api/doc.html
......
...@@ -36,6 +36,7 @@ class ChatApp extends StatelessWidget { ...@@ -36,6 +36,7 @@ class ChatApp extends StatelessWidget {
theme: AppTheme.light, theme: AppTheme.light,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
initialRoute: AppPages.INITIAL, initialRoute: AppPages.INITIAL,
// initialBinding: AllControllerBinding(), // initialBinding: AllControllerBinding(),
getPages: AppPages.routes, getPages: AppPages.routes,
builder: EasyLoading.init(), builder: EasyLoading.init(),
......
...@@ -41,6 +41,7 @@ class CategoryController extends GetxController { ...@@ -41,6 +41,7 @@ class CategoryController extends GetxController {
} }
void onLoading() { void onLoading() {
print("${state.newsList.length}-${total}321321312321321");
if (state.newsList.length < total) { if (state.newsList.length < total) {
fetchNewsList().then((_) { fetchNewsList().then((_) {
refreshController.loadComplete(); refreshController.loadComplete();
...@@ -57,6 +58,7 @@ class CategoryController extends GetxController { ...@@ -57,6 +58,7 @@ class CategoryController extends GetxController {
// 拉取数据 // 拉取数据
Future<void> fetchNewsList({bool isRefresh = false}) async { Future<void> fetchNewsList({bool isRefresh = false}) async {
// //
try {
var result = await NewsAPI.getConversionByUserId( var result = await NewsAPI.getConversionByUserId(
{'page': curPage, "size": pageSize}); {'page': curPage, "size": pageSize});
...@@ -69,8 +71,9 @@ class CategoryController extends GetxController { ...@@ -69,8 +71,9 @@ class CategoryController extends GetxController {
} }
state.newsList.addAll(result.records!); state.newsList.addAll(result.records!);
} catch (e) {
print("${state.newsList.length}"); print(e);
}
} }
/// 生命周期 /// 生命周期
......
...@@ -30,6 +30,16 @@ class _NewsPageListState extends State<NewsPageList> ...@@ -30,6 +30,16 @@ class _NewsPageListState extends State<NewsPageList>
controller: controller.refreshController, controller: controller.refreshController,
onRefresh: controller.onRefresh, onRefresh: controller.onRefresh,
onLoading: controller.onLoading, onLoading: controller.onLoading,
header: ClassicHeader(
releaseText: "松开刷新",
refreshingText: "刷新数据中",
completeText: "刷新数据成功",
idleText: "下拉刷新"),
footer: ClassicFooter(
loadingText: "正在加载中...",
// loadStyle: LoadStyle.ShowWhenLoading,
// completeDuration: Duration(milliseconds: 500),
noDataText: '没有更多数据啦'),
child: CustomScrollView( child: CustomScrollView(
slivers: [ slivers: [
SliverPadding( SliverPadding(
......
import 'package:get/get.dart';
import 'controller.dart';
class UserEulaBinding implements Bindings {
@override
void dependencies() {
Get.lazyPut<UserEulaController>(() => UserEulaController());
}
}
import 'package:get/get.dart';
import 'index.dart';
class UserEulaController extends GetxController {
UserEulaController();
final state = UserEulaState();
// tap
void handleTap(int index) {
Get.snackbar(
"标题",
"消息",
);
}
/// 在 widget 内存中分配后立即调用。
@override
void onInit() {
super.onInit();
}
/// 在 onInit() 之后调用 1 帧。这是进入的理想场所
@override
void onReady() {
super.onReady();
}
/// 在 [onDelete] 方法之前调用。
@override
void onClose() {
super.onClose();
}
/// dispose 释放内存
@override
void dispose() {
super.dispose();
}
}
library user_privacy;
export './state.dart';
export './controller.dart';
export './bindings.dart';
export './view.dart';
import 'package:get/get.dart';
class UserEulaState {
final _title = """
1、用户通过付费订阅后可免费使用AI聊天无限次,AI写作,写小说等高级功能订阅后可使用。
2.您可选择通过授权Apple支付(iOS端)AI写作大师会员服务(支持自动续费功能),订阅的金额分别为:AI写作大师连续包年会员(1年),价格498/年;AI写作大师连续包月会员(1个月),价格48/月。
3.您可通过下述途径解除连续订阅的自动扣费服务,连续订阅将在您解除后的下一个服务期限(计费周期)开始前自动终止:
打开App store---点击右上角头像图标,进入账户页面---点击管理订阅---取消订阅
以上解除方式会因第三方支付机构的软件升级等原因而不时发生变化,如因前述原因导致您无法操作解除连续订阅服务,请您第一时间按照本规则内载明的联系方式联系得到客服解决。
4.如调整连续订阅的计费标准,则会在下一个服务期限(计费周期)扣费前,通过短信、微信公众号留言等方式向您确认是否以调整后的计费标准进行代扣,如您明确回复拒绝或不予回复的,您购买的连续订阅服务将在已付费服务期限(计费周期)届满后自动终止。
5.本服务为在线使用的数字化商品服务,一经购买成功后,不提供退货退款。
6.其他未尽事宜,以《服务协议和隐私协议》的规定为准。
"""
.obs;
set title(value) => _title.value = value;
get title => _title.value;
}
import 'package:chart/common/values/values.dart';
import 'package:chart/common/widgets/widgets.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'index.dart';
import 'widgets/widgets.dart';
class UserEulaPage extends GetView<UserEulaController> {
const UserEulaPage({Key? key}) : super(key: key);
// 主视图
Widget _buildView() {
return GlassmorphicContainer(
height: double.infinity,
width: double.infinity,
// flex: 1,
borderRadius: 16,
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
blur: 14,
alignment: Alignment.bottomCenter,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xFF0FFFF).withOpacity(0.2),
Color(0xFF0FFFF).withOpacity(0.2),
],
),
child: const HelloWidget(),
// margin: EdgeInsets.only(bottom: 16.h),
borderGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xFF0FFFF).withOpacity(1),
Color(0xFFFFFFF),
Color(0xFF0FFFF).withOpacity(1),
],
));
}
@override
Widget build(BuildContext context) {
return GetBuilder<UserEulaController>(
builder: (_) {
return Scaffold(
appBar: transparentAppBar(
leading: IconButton(
tooltip: '返回上一页',
icon: const Icon(
Icons.arrow_back,
color: AppColors.primaryElementText,
),
onPressed: () async {
// Get.back();
// Get.offAll(ApplicationPage());
// await Get.off(ApplicationPage());
// Get.toNamed(AppRoutes.Application);
Get.back();
// await Get.toNamed();
// Navigator.of(context).pop();
//_nextPage(-1);
},
),
title: const Text(
"服务协议",
style: TextStyle(color: Colors.white),
)),
body: Container(
height: double.infinity,
width: double.infinity,
child: WebView(
initialUrl: "https://p.kdocs.cn/s/UODC2BAAYQ",
),
));
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../index.dart';
/// hello
class HelloWidget extends GetView<UserEulaController> {
const HelloWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
// Obx(() => ListView(
// padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
// children: [
// Text(
// controller.state.title,
// style: TextStyle(
// fontFamily: 'Montserrat',
// fontSize: 18,
// color: Colors.white),
// )
// ],
// )),
);
}
}
library widgets;
export './hello.dart';
...@@ -155,6 +155,7 @@ class ChatNewController extends GetxController { ...@@ -155,6 +155,7 @@ class ChatNewController extends GetxController {
_addMessage(receiveErrorMessage); _addMessage(receiveErrorMessage);
EasyLoading.dismiss(); EasyLoading.dismiss();
Vibrate.feedback(FeedbackType.error); Vibrate.feedback(FeedbackType.error);
Get.toNamed(AppRoutes.SIGN_IN);
} }
} catch (e) { } catch (e) {
print("eeeeeeee$e"); print("eeeeeeee$e");
...@@ -307,6 +308,7 @@ class ChatNewController extends GetxController { ...@@ -307,6 +308,7 @@ class ChatNewController extends GetxController {
sse = SSEClient.subscribeToSSE( sse = SSEClient.subscribeToSSE(
url: "$SERVER_API_URL/openAi/connect/${UserStore.to.profile.id}", url: "$SERVER_API_URL/openAi/connect/${UserStore.to.profile.id}",
header: {}).listen((event) async { header: {}).listen((event) async {
print(event);
if (event.data!.trim().isEmpty) { if (event.data!.trim().isEmpty) {
return; return;
} else if (event.id == "[DONE]") { } else if (event.id == "[DONE]") {
...@@ -322,6 +324,8 @@ class ChatNewController extends GetxController { ...@@ -322,6 +324,8 @@ class ChatNewController extends GetxController {
_updateMessage("${jsonMap['content']}" as String); _updateMessage("${jsonMap['content']}" as String);
} }
}); });
// print(sse);
} }
Future createConversionId() async { Future createConversionId() async {
......
...@@ -5,6 +5,7 @@ import 'package:chart/common/routers/routes.dart'; ...@@ -5,6 +5,7 @@ import 'package:chart/common/routers/routes.dart';
import 'package:chart/common/store/store.dart'; import 'package:chart/common/store/store.dart';
import 'package:chart/entity/user_entity.dart'; import 'package:chart/entity/user_entity.dart';
import 'package:chart/pages/application/index.dart'; import 'package:chart/pages/application/index.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart'; import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart';
import 'package:flutter_inapp_purchase/modules.dart'; import 'package:flutter_inapp_purchase/modules.dart';
...@@ -19,9 +20,8 @@ class PayListController extends GetxController { ...@@ -19,9 +20,8 @@ class PayListController extends GetxController {
final state = PayListState(); final state = PayListState();
final List<String> _productLists = [ final List<String> _productLists = [
"com.wudi.app.weekly_pass", "com.wudi.monthly_pass_chat",
"com.wudi.app.monthly_pass", "com.wudi.yearly_pass_chat",
"com.wudi.app.60stars"
]; ];
final List<dynamic> _mapData = [ final List<dynamic> _mapData = [
...@@ -136,6 +136,30 @@ class PayListController extends GetxController { ...@@ -136,6 +136,30 @@ class PayListController extends GetxController {
}); });
} }
void restorePurchases() async {
Vibrate.feedback(FeedbackType.selection);
EasyLoading.show(status: '恢复购买中...');
List<PurchasedItem>? purchases =
await FlutterInappPurchase.instance.getAvailablePurchases();
for (var purchase in purchases!) {
// com.wudi.yearly_pass_chat
if (purchase.productId == 'com.wudi.yearly_pass_chat' ||
purchase.productId == "com.wudi.monthly_pass_chat") {
// // IAPItem item
FlutterInappPurchase.instance.requestPurchase(purchase.productId!);
EasyLoading.showSuccess("恢复购买成功");
} else {
EasyLoading.dismiss();
}
// print("${item.productId}");
// 处理以前购买的产品
}
}
Future _getProduct() async { Future _getProduct() async {
try { try {
List<IAPItem> items = List<IAPItem> items =
......
...@@ -7,7 +7,7 @@ class PayListState { ...@@ -7,7 +7,7 @@ class PayListState {
set title(value) => this._title.value = value; set title(value) => this._title.value = value;
get title => this._title.value; get title => this._title.value;
final _selected = "com.wudi.app.60stars".obs; final _selected = "com.wudi.monthly_pass_chat".obs;
set selected(value) => _selected.value = value; set selected(value) => _selected.value = value;
get selected => _selected.value; get selected => _selected.value;
......
import 'package:chart/common/routers/names.dart';
import 'package:chart/common/store/user.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart'; import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
...@@ -5,7 +7,7 @@ import 'package:glassy/glassy_button.dart'; ...@@ -5,7 +7,7 @@ import 'package:glassy/glassy_button.dart';
import 'package:glassy/glassy_card.dart'; import 'package:glassy/glassy_card.dart';
import 'package:glassy/glassy_config.dart'; import 'package:glassy/glassy_config.dart';
import 'package:gradient_widgets/gradient_widgets.dart'; import 'package:gradient_widgets/gradient_widgets.dart';
import 'package:url_launcher/url_launcher.dart';
import '../index.dart'; import '../index.dart';
const color = Color(0xff8AFBFF); const color = Color(0xff8AFBFF);
...@@ -14,6 +16,7 @@ const color = Color(0xff8AFBFF); ...@@ -14,6 +16,7 @@ const color = Color(0xff8AFBFF);
class PayItemWidget extends GetView<PayListController> { class PayItemWidget extends GetView<PayListController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final c = Get.put(UserStore());
return Container( return Container(
padding: EdgeInsets.only(top: 40, bottom: 40), padding: EdgeInsets.only(top: 40, bottom: 40),
child: Column( child: Column(
...@@ -26,7 +29,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -26,7 +29,7 @@ class PayItemWidget extends GetView<PayListController> {
// ignore: prefer_const_literals_to_create_immutables // ignore: prefer_const_literals_to_create_immutables
children: [ children: [
Align( Align(
alignment: Alignment.topRight, alignment: Alignment.topLeft,
child: InkWell( child: InkWell(
onTap: () => Get.back(), onTap: () => Get.back(),
child: Container( child: Container(
...@@ -39,6 +42,62 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -39,6 +42,62 @@ class PayItemWidget extends GetView<PayListController> {
), ),
)), )),
), ),
Align(
alignment: Alignment.topRight,
child: InkWell(
// restorePurchases
onTap: controller.restorePurchases,
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 20),
child: Text(
"恢复购买",
style: TextStyle(color: color, fontSize: 16),
),
)),
),
Obx(() => c.profile.expireTime == null
? Text("")
: Align(
alignment: Alignment.bottomCenter,
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 0),
child: RichText(
text: TextSpan(children: [
TextSpan(
text: '您的VIP会员资格将于',
style: TextStyle(
color: color,
fontSize: 14,
),
),
TextSpan(
text:
" ${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day} "),
TextSpan(
text: '过期,如果您是自动续费会员将会在过期日前一天自动续费。',
style: TextStyle(
color: color,
fontSize: 14,
),
),
// Text(
// "您的VIP会员资格将于" +
// "${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day}" +
// "过期,如果您是自动续费会员将会在过期日前一天自动续费。",
// textAlign: TextAlign.center,
// style: TextStyle(
// color: color,
// fontSize: 14,
// ),
// )
])),
),
)),
// Text("data"),
// ignore: prefer_const_constructors // ignore: prefer_const_constructors
Align( Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
...@@ -112,7 +171,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -112,7 +171,7 @@ class PayItemWidget extends GetView<PayListController> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Obx(() => controller.state.selected == Obx(() => controller.state.selected ==
'com.wudi.app.60stars' 'com.wudi.monthly_pass_chat'
? Column( ? Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: mainAxisAlignment:
...@@ -123,23 +182,23 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -123,23 +182,23 @@ class PayItemWidget extends GetView<PayListController> {
children: [ children: [
Icon(Icons.check, color: color), Icon(Icons.check, color: color),
Text("30次提问机会", Text("月卡(31)天会员",
style: TextStyle( style: TextStyle(
color: color, fontSize: 16)) color: color, fontSize: 16))
], ],
), ),
// Row(
// children: [
// Icon(Icons.check, color: color),
// Text("无广告",
// style: TextStyle(
// color: color, fontSize: 16))
// ],
// ),
Row( Row(
children: [ children: [
Icon(Icons.check, color: color), Icon(Icons.check, color: color),
Text("解锁所有高级功能", Text("1.6元/天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限次与AI助手聊天",
style: TextStyle( style: TextStyle(
color: color, fontSize: 16)) color: color, fontSize: 16))
], ],
...@@ -193,7 +252,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -193,7 +252,7 @@ class PayItemWidget extends GetView<PayListController> {
children: [ children: [
Icon(Icons.check, color: color), Icon(Icons.check, color: color),
Text("周卡7(天)会员", Text("年卡(365)天会员",
style: TextStyle( style: TextStyle(
color: color, fontSize: 16)) color: color, fontSize: 16))
], ],
...@@ -201,7 +260,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -201,7 +260,7 @@ class PayItemWidget extends GetView<PayListController> {
Row( Row(
children: [ children: [
Icon(Icons.check, color: color), Icon(Icons.check, color: color),
Text("无限聊天", Text("1.3元/天",
style: TextStyle( style: TextStyle(
color: color, fontSize: 16)) color: color, fontSize: 16))
], ],
...@@ -209,7 +268,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -209,7 +268,7 @@ class PayItemWidget extends GetView<PayListController> {
Row( Row(
children: [ children: [
Icon(Icons.check, color: color), Icon(Icons.check, color: color),
Text("解锁所有高级功能", Text("无限次与AI助手聊天",
style: TextStyle( style: TextStyle(
color: color, fontSize: 16)) color: color, fontSize: 16))
], ],
...@@ -275,7 +334,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -275,7 +334,7 @@ class PayItemWidget extends GetView<PayListController> {
color: Colors.white), color: Colors.white),
), ),
Text( Text(
"${item == 0 ? '30次提问卡' : item == 1 ? '月卡(30天)' : '周卡(7天)'}", "${item == 0 ? '按月订阅' : item == 1 ? '按年订阅' : '周卡(7天)'}",
maxLines: 2, maxLines: 2,
overflow: TextOverflow.clip, overflow: TextOverflow.clip,
style: TextStyle( style: TextStyle(
...@@ -293,7 +352,7 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -293,7 +352,7 @@ class PayItemWidget extends GetView<PayListController> {
child: Container( child: Container(
margin: EdgeInsets.only(top: 20), margin: EdgeInsets.only(top: 20),
child: GradientButton( child: GradientButton(
child: Text('购买'), child: Text('立即解锁'),
increaseHeightBy: 15.00, increaseHeightBy: 15.00,
increaseWidthBy: 200.00, increaseWidthBy: 200.00,
callback: controller.requestPurchase, callback: controller.requestPurchase,
...@@ -301,7 +360,65 @@ class PayItemWidget extends GetView<PayListController> { ...@@ -301,7 +360,65 @@ class PayItemWidget extends GetView<PayListController> {
shadowColor: shadowColor:
Gradients.backToFuture.colors.last.withOpacity(0.25), Gradients.backToFuture.colors.last.withOpacity(0.25),
), ),
)) )),
// Expanded(
// child: Container(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Icon(
// Icons.shield_moon,
// color: Colors.white,
// ),
// Text(
// "由App Store提供担保。随时随地取消",
// style: TextStyle(color: Colors.white),
// )
// ]),
// )),
Expanded(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
InkWell(
onTap: () async {
Get.toNamed(AppRoutes.USER_EULA);
// final Uri _url = Uri.parse(
// 'https://docs.qq.com/doc/DY3pybXJ5Y1JLQm13');
// await launchUrl(_url);
},
child: RichText(
text: TextSpan(children: [
TextSpan(text: 'Tap To view the '),
TextSpan(
text: 'EULA',
style: TextStyle(color: color)),
]),
),
// child: Text(
// "Tap To view the EULA",
// style: TextStyle(color: Colors.white),
// ),
),
]),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.shield_moon,
color: Colors.white,
),
Text(
"由App Store提供担保。随时随地取消",
style: TextStyle(color: Colors.white),
)
]),
])))
// Container( // Container(
// padding: EdgeInsets.symmetric(horizontal: 40, vertical: 20), // padding: EdgeInsets.symmetric(horizontal: 40, vertical: 20),
......
import 'dart:convert'; import 'dart:convert';
import 'package:chart/common/apis/apis.dart'; import 'package:chart/common/apis/apis.dart';
import 'package:chart/common/routers/routes.dart';
import 'package:chart/common/store/user.dart'; import 'package:chart/common/store/user.dart';
import 'package:chart/common/values/values.dart'; import 'package:chart/common/values/values.dart';
import 'package:chart/entity/user_entity.dart'; import 'package:chart/entity/user_entity.dart';
...@@ -171,7 +172,8 @@ class ProductController extends GetxController { ...@@ -171,7 +172,8 @@ class ProductController extends GetxController {
// state.isWhite = true; // state.isWhite = true;
// state.loading = false; // state.loading = false;
} else { } else {
EasyLoading.showError("你还未登录,请登录后再使用"); // EasyLoading.showError("你还未登录,请登录后再使用");
Get.toNamed(AppRoutes.SIGN_IN);
state.isWhite = false; state.isWhite = false;
state.loading = false; state.loading = false;
// Get.snackbar("错误提示", "您的问题还没有填完", colorText: Colors.white); // Get.snackbar("错误提示", "您的问题还没有填完", colorText: Colors.white);
...@@ -184,7 +186,8 @@ class ProductController extends GetxController { ...@@ -184,7 +186,8 @@ class ProductController extends GetxController {
print("$str"); print("$str");
} else { } else {
Get.snackbar("错误提示", "您的问题还没有填完", colorText: Colors.white); EasyLoading.showInfo("为了生成完整内容,请输入两项内容在进行创作");
// Get.snackbar("错误提示", "您的问题还没有填完", colorText: Colors.white);
} }
} }
...@@ -201,13 +204,16 @@ class ProductController extends GetxController { ...@@ -201,13 +204,16 @@ class ProductController extends GetxController {
} }
showModal() { showModal() {
// print("awaitawaitawaitawaitawaitawaitawait"); if (UserStore.to.isLogin) {
state.inderText = ''; state.inderText = '';
// Share.share('Text I wish to share'); // Share.share('Text I wish to share');
Get.bottomSheet( Get.bottomSheet(
FormWidget(), FormWidget(),
); );
} else {
Get.toNamed(AppRoutes.SIGN_IN);
}
// useRootNavigator: false, // useRootNavigator: false,
// // backgroundColor: Colors.white, // // backgroundColor: Colors.white,
// shape: const RoundedRectangleBorder( // shape: const RoundedRectangleBorder(
......
...@@ -17,6 +17,7 @@ class WelcomeController extends GetxController { ...@@ -17,6 +17,7 @@ class WelcomeController extends GetxController {
// 跳转 注册界面 // 跳转 注册界面
handleHome() async { handleHome() async {
await UserStore.to.refreshInfo();
await ConfigStore.to.saveAlreadyOpen(); await ConfigStore.to.saveAlreadyOpen();
Get.offAndToNamed(AppRoutes.Application); Get.offAndToNamed(AppRoutes.Application);
} }
......
...@@ -13,7 +13,7 @@ import '../../entity/user_entity.dart'; ...@@ -13,7 +13,7 @@ import '../../entity/user_entity.dart';
import 'index.dart'; import 'index.dart';
class MainController extends GetxController { class MainController extends GetxController {
MainController(); static MainController get to => Get.put(MainController());
/// 响应式成员变量 /// 响应式成员变量
...@@ -129,9 +129,12 @@ class MainController extends GetxController { ...@@ -129,9 +129,12 @@ class MainController extends GetxController {
/// onInit 之后 /// onInit 之后
@override @override
void onReady() { void onReady() {
super.onReady();
// asyncLoadAllData();
asyncLoadBannerData(); asyncLoadBannerData();
super.onReady();
// if (UserStore.to.token.isNotEmpty) {
// }
} }
/// 关闭页面 /// 关闭页面
......
...@@ -15,7 +15,8 @@ class NewsCategoriesWidget extends GetView<MainController> { ...@@ -15,7 +15,8 @@ class NewsCategoriesWidget extends GetView<MainController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final userC = Get.put(UserStore()); final userC = Get.put(UserStore());
return Obx(() => controller.state.bannerList == null final bC = Get.put(MainController());
return Obx(() => bC.state.bannerList == null
? Container() ? Container()
: Container( : Container(
// color: Colors.red, // color: Colors.red,
...@@ -31,9 +32,19 @@ class NewsCategoriesWidget extends GetView<MainController> { ...@@ -31,9 +32,19 @@ class NewsCategoriesWidget extends GetView<MainController> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
// ignore: prefer_const_literals_to_create_immutables // ignore: prefer_const_literals_to_create_immutables
children: [ children: [
GetPlatform.isIOS
? Text(
"AI写作大师", maxLines: 1,
textAlign: TextAlign.left,
overflow: TextOverflow.clip,
softWrap: true,
// ignore: prefer_const_constructors // ignore: prefer_const_constructors
Obx( style: TextStyle(
() => userC.isLogin color: Colors.white,
fontWeight: FontWeight.w800,
fontSize: 20),
)
: Obx(() => userC.isLogin
? Container( ? Container(
width: 200, width: 200,
child: Text( child: Text(
...@@ -56,7 +67,8 @@ class NewsCategoriesWidget extends GetView<MainController> { ...@@ -56,7 +67,8 @@ class NewsCategoriesWidget extends GetView<MainController> {
width: 200, width: 200,
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
Vibrate.feedback(FeedbackType.impact); Vibrate.feedback(
FeedbackType.impact);
Get.toNamed(AppRoutes.SIGN_IN); Get.toNamed(AppRoutes.SIGN_IN);
}, },
child: Text( child: Text(
...@@ -74,8 +86,7 @@ class NewsCategoriesWidget extends GetView<MainController> { ...@@ -74,8 +86,7 @@ class NewsCategoriesWidget extends GetView<MainController> {
fontWeight: FontWeight.w800, fontWeight: FontWeight.w800,
fontSize: 20), fontSize: 20),
)), )),
), )),
),
SizedBox(height: 30), SizedBox(height: 30),
// ignore: prefer_const_constructors // ignore: prefer_const_constructors
Text( Text(
...@@ -95,8 +106,8 @@ class NewsCategoriesWidget extends GetView<MainController> { ...@@ -95,8 +106,8 @@ class NewsCategoriesWidget extends GetView<MainController> {
if (GetPlatform.isAndroid) { if (GetPlatform.isAndroid) {
Get.toNamed(AppRoutes.AN_PAY_LIST); Get.toNamed(AppRoutes.AN_PAY_LIST);
} else { } else {
Get.toNamed(AppRoutes.AN_PAY_LIST); // Get.toNamed(AppRoutes.AN_PAY_LIST);
// Get.toNamed(AppRoutes.PAY_LIST); Get.toNamed(AppRoutes.PAY_LIST);
} }
// AN_PAY_LIST // AN_PAY_LIST
......
...@@ -18,8 +18,9 @@ class SiperBannerWidget extends GetView<MainController> { ...@@ -18,8 +18,9 @@ class SiperBannerWidget extends GetView<MainController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final c = Get.put(MainController());
List<Widget> _renderList(int index) { List<Widget> _renderList(int index) {
return controller.state.bannerList! return c.state.bannerList!
.asMap() .asMap()
.keys .keys
.map((idx) => _generateWidget( .map((idx) => _generateWidget(
...@@ -27,7 +28,7 @@ class SiperBannerWidget extends GetView<MainController> { ...@@ -27,7 +28,7 @@ class SiperBannerWidget extends GetView<MainController> {
.toList(); .toList();
} }
return Obx(() => controller.state.bannerList == null return Obx(() => c.state.bannerList == null
? Container() ? Container()
: Container( : Container(
height: 230, height: 230,
......
...@@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; ...@@ -4,6 +4,7 @@ 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:glassmorphism/glassmorphism.dart'; import 'package:glassmorphism/glassmorphism.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'index.dart'; import 'index.dart';
import 'widgets/widgets.dart'; import 'widgets/widgets.dart';
...@@ -68,18 +69,23 @@ class PrivacyPage extends GetView<PrivacyController> { ...@@ -68,18 +69,23 @@ class PrivacyPage extends GetView<PrivacyController> {
}, },
), ),
title: const Text( title: const Text(
"隐私协议", "隐私政策",
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
)), )),
body: Container( body: Container(
height: double.infinity, height: double.infinity,
width: double.infinity, width: double.infinity,
decoration: BoxDecoration( child: WebView(
image: DecorationImage( initialUrl: "https://p.kdocs.cn/s/YXFCYBAAYQ",
image: Image.asset("assets/images/bg.png").image,
fit: BoxFit.cover),
), ),
child: _buildView(), // 【金山文档】 隐私政策
// decoration: BoxDecoration(
// image: DecorationImage(
// image: Image.asset("assets/images/bg.png").image,
// fit: BoxFit.cover),
// ),
// child: _buildView(),
), ),
); );
}, },
......
...@@ -5,6 +5,8 @@ import 'package:flutter_vibrate/flutter_vibrate.dart'; ...@@ -5,6 +5,8 @@ import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:babstrap_settings_screen/babstrap_settings_screen.dart'; import 'package:babstrap_settings_screen/babstrap_settings_screen.dart';
import 'package:glassmorphism/glassmorphism.dart'; import 'package:glassmorphism/glassmorphism.dart';
import 'package:gradient_widgets/gradient_widgets.dart';
import 'package:http/retry.dart';
import 'index.dart'; import 'index.dart';
import 'widgets/widgets.dart'; import 'widgets/widgets.dart';
...@@ -24,7 +26,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -24,7 +26,8 @@ class UserDetailPage extends GetView<UserDetailController> {
padding: const EdgeInsets.all(0), padding: const EdgeInsets.all(0),
child: ListView( child: ListView(
children: [ children: [
GlassmorphicContainer( GetPlatform.isAndroid
? GlassmorphicContainer(
height: 140, height: 140,
width: double.infinity, width: double.infinity,
// flex: 1, // flex: 1,
...@@ -54,7 +57,6 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -54,7 +57,6 @@ class UserDetailPage extends GetView<UserDetailController> {
child: Column(children: [ child: Column(children: [
Row( Row(
children: [ children: [
// ignore: prefer_const_constructors
Container( Container(
width: 80, width: 80,
height: 80, height: 80,
...@@ -77,12 +79,7 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -77,12 +79,7 @@ class UserDetailPage extends GetView<UserDetailController> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(children: [
// mainAxisAlignment: MainAxisAlignment.start,
// verticalDirection: VerticalDirection.up,
// textBaseline: TextBaseline.alphabetic,
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Obx(() => Container( Obx(() => Container(
width: 140, width: 140,
height: 30, height: 30,
...@@ -106,14 +103,7 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -106,14 +103,7 @@ class UserDetailPage extends GetView<UserDetailController> {
Container( Container(
width: 60, width: 60,
height: 30, height: 30,
// color: Colors.white, decoration: BoxDecoration(),
decoration: BoxDecoration(
// image: DecorationImage(
// image: Image.asset(
// "assets/images/vip6.png")
// .image,
// fit: BoxFit.contain),
),
) )
]), ]),
Row( Row(
...@@ -127,9 +117,10 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -127,9 +117,10 @@ class UserDetailPage extends GetView<UserDetailController> {
margin: EdgeInsets.only(top: 16), margin: EdgeInsets.only(top: 16),
decoration: BoxDecoration( decoration: BoxDecoration(
// rgba(233, 234, 244, 1.00) // rgba(233, 234, 244, 1.00)
color: color: Color.fromRGBO(
Color.fromRGBO(255, 255, 255, .2), 255, 255, 255, .2),
borderRadius: BorderRadius.circular(20), borderRadius:
BorderRadius.circular(20),
// image: DecorationImage( // image: DecorationImage(
// image: Image.asset("assets/images/vip6.png") // image: Image.asset("assets/images/vip6.png")
// .image, // .image,
...@@ -138,7 +129,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -138,7 +129,8 @@ class UserDetailPage extends GetView<UserDetailController> {
child: c.profile.expireTime != null child: c.profile.expireTime != null
? Row( ? Row(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment
.center,
children: [ children: [
Image.asset( Image.asset(
"assets/images/jifen.png", "assets/images/jifen.png",
...@@ -148,14 +140,19 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -148,14 +140,19 @@ class UserDetailPage extends GetView<UserDetailController> {
Text( Text(
" 会员日期至:${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day}", " 会员日期至:${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day}",
style: TextStyle( style: TextStyle(
color: Color.fromRGBO( color:
255, 255, 255, 1)), Color.fromRGBO(
255,
255,
255,
1)),
) )
], ],
) )
: Row( : Row(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment
.center,
children: [ children: [
Image.asset( Image.asset(
"assets/images/jifen1.png", "assets/images/jifen1.png",
...@@ -165,191 +162,81 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -165,191 +162,81 @@ class UserDetailPage extends GetView<UserDetailController> {
Text( Text(
" 积分剩余:", " 积分剩余:",
style: TextStyle( style: TextStyle(
color: Color.fromRGBO( color: Color
255, 255, 255, 1)), .fromRGBO(
255,
255,
255,
1)),
), ),
Text( Text(
"${c.profile.integral}", "${c.profile.integral}",
style: TextStyle( style: TextStyle(
color: Color.fromRGBO( color: Color
255, 255, 255, 1)), .fromRGBO(
255,
255,
255,
1)),
), ),
]), ]),
)), )),
// Container(
// // width: 80,
// height: 25,
// padding: EdgeInsets.symmetric(
// horizontal: 10, vertical: 4),
// margin: EdgeInsets.only(top: 16, left: 16),
// decoration: BoxDecoration(
// // rgba(233, 234, 244, 1.00)
// color: Color.fromRGBO(255, 255, 255, .2),
// borderRadius: BorderRadius.circular(20),
// // image: DecorationImage(
// // image: Image.asset("assets/images/vip6.png")
// // .image,
// // fit: BoxFit.contain),
// ),
// child: Row(children: [
// Image.asset(
// "assets/images/jifen1.png",
// fit: BoxFit.cover,
// ),
// Container(
// margin: EdgeInsets.only(left: 5),
// child: Text(
// "300",
// style: TextStyle(
// color:
// Color.fromRGBO(255, 255, 255, 1)),
// ),
// )
// ]),
// )
]) ])
], ],
), ),
], ],
), ),
// Expanded(
// child: Container(
// width: double.infinity,
// margin: EdgeInsets.symmetric(horizontal: 16),
// decoration: BoxDecoration(
// // boxShadow: [
// // BoxShadow(
// // color: Colors.yellow,
// // blurRadius: 10.0,
// // spreadRadius: 10.0),
// // ],
// gradient: new LinearGradient(
// begin: Alignment.bottomCenter,
// end: Alignment.topCenter,
// colors: [
// Colors.amber,
// Colors.yellow,
// ]),
// ),
// padding: EdgeInsets.symmetric(horizontal: 16),
// child: Text("121"),
// // child: Row(
// // mainAxisAlignment: MainAxisAlignment.spaceAround,
// // children: [
// // Container(
// // height: 70,
// // width: 70,
// // child: Column(
// // mainAxisAlignment: MainAxisAlignment.center,
// // children: [
// // Image.asset(
// // "assets/images/jifen1.png",
// // fit: BoxFit.cover,
// // width: 40,
// // height: 40,
// // ),
// // Text(
// // "积分",
// // style: TextStyle(
// // color: Colors.white,
// // // fontWeight: FontWeight.bold,
// // fontSize: 14),
// // ),
// // ],
// // )),
// // Container(
// // height: 70,
// // width: 70,
// // child: Column(
// // mainAxisAlignment: MainAxisAlignment.center,
// // children: [
// // Image.asset(
// // "assets/images/shoucang.png",
// // fit: BoxFit.cover,
// // width: 40,
// // height: 40,
// // ),
// // Text(
// // "收藏",
// // style: TextStyle(
// // color: Colors.white,
// // // fontWeight: FontWeight.bold,
// // fontSize: 14),
// // ),
// // ],
// // )),
// // Container(
// // height: 70,
// // width: 70,
// // child: Column(
// // mainAxisAlignment: MainAxisAlignment.center,
// // children: [
// // Image.asset(
// // "assets/images/shangcheng.png",
// // fit: BoxFit.cover,
// // width: 40,
// // height: 40,
// // ),
// // Text(
// // "商城",
// // style: TextStyle(
// // color: Colors.white,
// // // fontWeight: FontWeight.bold,
// // fontSize: 14),
// // ),
// // ],
// // )),
// // Container(
// // height: 70,
// // width: 70,
// // child: Column(
// // mainAxisAlignment: MainAxisAlignment.center,
// // children: [
// // Image.asset(
// // "assets/images/jilu.png",
// // fit: BoxFit.cover,
// // width: 40,
// // height: 40,
// // ),
// // Text(
// // "记录",
// // style: TextStyle(
// // color: Colors.white,
// // // fontWeight: FontWeight.bold,
// // fontSize: 14),
// // ),
// // ],
// // )),
// // ]),
// // color: Colors.black,
// ),
// ),
// Row(
// children: [Text("data"), Text("data")],
// )
]), ]),
)
: GlassmorphicContainer(
height: 80,
width: double.infinity,
// flex: 1,
borderRadius: 16,
padding: EdgeInsets.all(16),
blur: 14,
// alignment: Alignment.bottomCenter,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xFF0FFFF).withOpacity(0.2),
Color(0xFF0FFFF).withOpacity(0.2),
],
), ),
// User card margin: EdgeInsets.only(bottom: 16),
// BigUserCard( borderGradient: LinearGradient(
// // cardColor: Colors.red, begin: Alignment.topLeft,
// userName: "Babacar Ndong", end: Alignment.bottomRight,
// userProfilePic: AssetImage("assets/images/300.jpg"), colors: [
// cardActionWidget: SettingsItem( Color(0xFF0FFFF).withOpacity(1),
// icons: Icons.edit, Color(0xFFFFFFF),
// iconStyle: IconStyle( Color(0xFF0FFFF).withOpacity(1),
// withBackground: true, ],
// borderRadius: 50, ),
// backgroundColor: Colors.yellow[600], child: Padding(
// ), padding: EdgeInsets.symmetric(horizontal: 16),
// title: "Modify", child: Column(
// subtitle: "Tap to change your data", mainAxisAlignment: MainAxisAlignment.center,
// onTap: () { crossAxisAlignment: CrossAxisAlignment.start,
// print("OK"); children: [
// }, Text(
// ), "HI",
// ), style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white),
),
Text(
// gradient: Gradients.coralCandyGradient,
"我是您的私人助理",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white),
),
],
),
)),
GlassmorphicContainer( GlassmorphicContainer(
height: 70, height: 70,
width: double.infinity, width: double.infinity,
...@@ -386,8 +273,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -386,8 +273,8 @@ class UserDetailPage extends GetView<UserDetailController> {
if (GetPlatform.isAndroid) { if (GetPlatform.isAndroid) {
Get.toNamed(AppRoutes.AN_PAY_LIST); Get.toNamed(AppRoutes.AN_PAY_LIST);
} else { } else {
Get.toNamed(AppRoutes.AN_PAY_LIST); // Get.toNamed(AppRoutes.AN_PAY_LIST);
// Get.toNamed(AppRoutes.PAY_LIST); Get.toNamed(AppRoutes.PAY_LIST);
} }
} else { } else {
Get.toNamed(AppRoutes.SIGN_IN); Get.toNamed(AppRoutes.SIGN_IN);
...@@ -396,6 +283,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -396,6 +283,8 @@ class UserDetailPage extends GetView<UserDetailController> {
icons: Icons.account_balance_wallet_rounded, icons: Icons.account_balance_wallet_rounded,
iconStyle: IconStyle(iconsColor: Colors.white), iconStyle: IconStyle(iconsColor: Colors.white),
titleStyle: TextStyle(color: Colors.white), titleStyle: TextStyle(color: Colors.white),
subtitleStyle:
TextStyle(color: Color.fromARGB(255, 176, 176, 176)),
title: '购买套餐', title: '购买套餐',
subtitle: "根据您的需求选择不同的订阅方式", subtitle: "根据您的需求选择不同的订阅方式",
trailing: Icon( trailing: Icon(
...@@ -435,8 +324,10 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -435,8 +324,10 @@ class UserDetailPage extends GetView<UserDetailController> {
child: Container( child: Container(
// color: Colors.white, // color: Colors.white,
child: SettingsItem( child: SettingsItem(
subtitleStyle:
TextStyle(color: Color.fromARGB(255, 176, 176, 176)),
onTap: () { onTap: () {
Get.toNamed(AppRoutes.USER_PRIVACT); Get.toNamed(AppRoutes.USER_EULA);
}, },
icons: Icons.add_alert_outlined, icons: Icons.add_alert_outlined,
iconStyle: IconStyle( iconStyle: IconStyle(
...@@ -444,8 +335,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -444,8 +335,8 @@ class UserDetailPage extends GetView<UserDetailController> {
backgroundColor: Colors.purple, backgroundColor: Colors.purple,
), ),
titleStyle: TextStyle(color: Colors.white), titleStyle: TextStyle(color: Colors.white),
title: '用户协议', title: '服务协议',
subtitle: "查看用户协议情况", subtitle: "查看用户服务协议详情",
trailing: Icon( trailing: Icon(
Icons.arrow_forward_ios_rounded, Icons.arrow_forward_ios_rounded,
color: Colors.white, color: Colors.white,
...@@ -483,6 +374,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -483,6 +374,8 @@ class UserDetailPage extends GetView<UserDetailController> {
child: Container( child: Container(
// color: Colors.white, // color: Colors.white,
child: SettingsItem( child: SettingsItem(
subtitleStyle:
TextStyle(color: Color.fromARGB(255, 176, 176, 176)),
onTap: () { onTap: () {
Get.toNamed(AppRoutes.PRIVACT); Get.toNamed(AppRoutes.PRIVACT);
// //
...@@ -493,8 +386,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -493,8 +386,8 @@ class UserDetailPage extends GetView<UserDetailController> {
backgroundColor: Colors.pink, backgroundColor: Colors.pink,
), ),
titleStyle: TextStyle(color: Colors.white), titleStyle: TextStyle(color: Colors.white),
title: '隐私权限', title: '隐私政策',
subtitle: "查看该应用隐私相关", subtitle: "查看该应用隐私政策相关",
trailing: Icon( trailing: Icon(
Icons.arrow_forward_ios_rounded, Icons.arrow_forward_ios_rounded,
color: Colors.white, color: Colors.white,
...@@ -502,7 +395,8 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -502,7 +395,8 @@ class UserDetailPage extends GetView<UserDetailController> {
), ),
), ),
), ),
GlassmorphicContainer( GetPlatform.isAndroid
? GlassmorphicContainer(
height: 70, height: 70,
width: double.infinity, width: double.infinity,
// flex: 1, // flex: 1,
...@@ -537,6 +431,9 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -537,6 +431,9 @@ class UserDetailPage extends GetView<UserDetailController> {
// Get.toNamed(AppRoutes.SIGN_IN); // Get.toNamed(AppRoutes.SIGN_IN);
c.onLogout(); c.onLogout();
}, },
subtitleStyle: TextStyle(
color:
Color.fromARGB(255, 176, 176, 176)),
icons: Icons.logout, icons: Icons.logout,
iconStyle: IconStyle( iconStyle: IconStyle(
iconsColor: Colors.white, iconsColor: Colors.white,
...@@ -571,7 +468,11 @@ class UserDetailPage extends GetView<UserDetailController> { ...@@ -571,7 +468,11 @@ class UserDetailPage extends GetView<UserDetailController> {
), ),
), ),
)), )),
), )
: SizedBox(
width: 0.0,
height: 0.0,
)
// SettingsGroup( // SettingsGroup(
// items: [ // items: [
// SettingsItem( // SettingsItem(
......
...@@ -6,6 +6,7 @@ import FlutterMacOS ...@@ -6,6 +6,7 @@ import FlutterMacOS
import Foundation import Foundation
import connectivity_plus import connectivity_plus
import device_info_plus
import firebase_auth import firebase_auth
import firebase_core import firebase_core
import package_info import package_info
...@@ -19,6 +20,7 @@ import url_launcher_macos ...@@ -19,6 +20,7 @@ import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin")) FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin"))
......
...@@ -7,7 +7,7 @@ packages: ...@@ -7,7 +7,7 @@ packages:
name: _flutterfire_internals name: _flutterfire_internals
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.13" version: "1.0.17"
alipay_kit: alipay_kit:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -50,6 +50,13 @@ packages: ...@@ -50,6 +50,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
app_settings:
dependency: "direct main"
description:
name: app_settings
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.0"
args: args:
dependency: transitive dependency: transitive
description: description:
...@@ -70,7 +77,7 @@ packages: ...@@ -70,7 +77,7 @@ packages:
name: babstrap_settings_screen name: babstrap_settings_screen
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.4" version: "0.1.5+1"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
...@@ -232,6 +239,20 @@ packages: ...@@ -232,6 +239,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.7.8" version: "0.7.8"
device_info_plus:
dependency: "direct main"
description:
name: device_info_plus
url: "https://pub.dartlang.org"
source: hosted
version: "8.1.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "7.0.0"
diffutil_dart: diffutil_dart:
dependency: transitive dependency: transitive
description: description:
...@@ -308,35 +329,35 @@ packages: ...@@ -308,35 +329,35 @@ packages:
name: file_picker name: file_picker
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.2.5" version: "5.2.6"
firebase_auth: firebase_auth:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth name: firebase_auth
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.2.6" version: "4.2.10"
firebase_auth_platform_interface: firebase_auth_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth_platform_interface name: firebase_auth_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.11.8" version: "6.11.12"
firebase_auth_web: firebase_auth_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth_web name: firebase_auth_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.2.5" version: "5.2.9"
firebase_core: firebase_core:
dependency: transitive dependency: transitive
description: description:
name: firebase_core name: firebase_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.5.0" version: "2.7.1"
firebase_core_platform_interface: firebase_core_platform_interface:
dependency: transitive dependency: transitive
description: description:
...@@ -350,7 +371,7 @@ packages: ...@@ -350,7 +371,7 @@ packages:
name: firebase_core_web name: firebase_core_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.2.2"
firebase_phone_auth_handler: firebase_phone_auth_handler:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -364,7 +385,7 @@ packages: ...@@ -364,7 +385,7 @@ packages:
name: fluro name: fluro
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "2.0.5"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
...@@ -439,7 +460,7 @@ packages: ...@@ -439,7 +460,7 @@ packages:
name: flutter_inapp_purchase name: flutter_inapp_purchase
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.3.1" version: "5.4.0"
flutter_inappwebview: flutter_inappwebview:
dependency: transitive dependency: transitive
description: description:
...@@ -500,7 +521,7 @@ packages: ...@@ -500,7 +521,7 @@ packages:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.7" version: "2.0.9"
flutter_rating_bar: flutter_rating_bar:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -514,7 +535,7 @@ packages: ...@@ -514,7 +535,7 @@ packages:
name: flutter_screenutil name: flutter_screenutil
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.6.1" version: "5.7.0"
flutter_signin_button: flutter_signin_button:
dependency: transitive dependency: transitive
description: description:
...@@ -580,7 +601,7 @@ packages: ...@@ -580,7 +601,7 @@ packages:
name: fluttertoast name: fluttertoast
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "8.1.2" version: "8.2.1"
font_awesome_flutter: font_awesome_flutter:
dependency: transitive dependency: transitive
description: description:
...@@ -643,7 +664,7 @@ packages: ...@@ -643,7 +664,7 @@ packages:
name: html name: html
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.15.1" version: "0.15.2"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -664,35 +685,35 @@ packages: ...@@ -664,35 +685,35 @@ packages:
name: image_picker name: image_picker
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.8.6+1" version: "0.8.7"
image_picker_android: image_picker_android:
dependency: transitive dependency: transitive
description: description:
name: image_picker_android name: image_picker_android
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.8.5+5" version: "0.8.6+1"
image_picker_for_web: image_picker_for_web:
dependency: transitive dependency: transitive
description: description:
name: image_picker_for_web name: image_picker_for_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.10" version: "2.1.12"
image_picker_ios: image_picker_ios:
dependency: transitive dependency: transitive
description: description:
name: image_picker_ios name: image_picker_ios
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.8.6+7" version: "0.8.7+1"
image_picker_platform_interface: image_picker_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: image_picker_platform_interface name: image_picker_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.6.2" version: "2.6.3"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -839,42 +860,42 @@ packages: ...@@ -839,42 +860,42 @@ packages:
name: path_provider name: path_provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.12" version: "2.0.13"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
name: path_provider_android name: path_provider_android
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.22" version: "2.0.24"
path_provider_foundation: path_provider_foundation:
dependency: transitive dependency: transitive
description: description:
name: path_provider_foundation name: path_provider_foundation
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.1.3"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
name: path_provider_linux name: path_provider_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.7" version: "2.1.10"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.5" version: "2.0.6"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.3" version: "2.1.5"
pedantic: pedantic:
dependency: transitive dependency: transitive
description: description:
...@@ -937,7 +958,7 @@ packages: ...@@ -937,7 +958,7 @@ packages:
name: plugin_platform_interface name: plugin_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.3" version: "2.1.4"
pointycastle: pointycastle:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -1014,49 +1035,49 @@ packages: ...@@ -1014,49 +1035,49 @@ packages:
name: shared_preferences name: shared_preferences
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.17" version: "2.0.18"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.15" version: "2.0.17"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.3" version: "2.1.5"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.3" version: "2.1.5"
shared_preferences_platform_interface: shared_preferences_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "2.0.6"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.3" version: "2.1.5"
sign_in_with_apple: sign_in_with_apple:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -1096,7 +1117,7 @@ packages: ...@@ -1096,7 +1117,7 @@ packages:
name: smooth_page_indicator name: smooth_page_indicator
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0+2" version: "1.0.1"
social_login_buttons: social_login_buttons:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -1117,14 +1138,14 @@ packages: ...@@ -1117,14 +1138,14 @@ packages:
name: sqflite name: sqflite
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.4+1" version: "2.2.6"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:
name: sqflite_common name: sqflite_common
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.4.2+2" version: "2.4.3"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
...@@ -1187,56 +1208,56 @@ packages: ...@@ -1187,56 +1208,56 @@ packages:
name: url_launcher name: url_launcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.1.9" version: "6.1.10"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.23" version: "6.0.25"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.1.0" version: "6.1.2"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_linux name: url_launcher_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.2" version: "3.0.4"
url_launcher_macos: url_launcher_macos:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_macos name: url_launcher_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.2" version: "3.0.4"
url_launcher_platform_interface: url_launcher_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_platform_interface name: url_launcher_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
url_launcher_web: url_launcher_web:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.14" version: "2.0.16"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_windows name: url_launcher_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.3" version: "3.0.5"
uuid: uuid:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -1264,35 +1285,35 @@ packages: ...@@ -1264,35 +1285,35 @@ packages:
name: video_player name: video_player
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.5.1" version: "2.6.0"
video_player_android: video_player_android:
dependency: transitive dependency: transitive
description: description:
name: video_player_android name: video_player_android
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.3.10" version: "2.4.2"
video_player_avfoundation: video_player_avfoundation:
dependency: transitive dependency: transitive
description: description:
name: video_player_avfoundation name: video_player_avfoundation
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.3.8" version: "2.4.1"
video_player_platform_interface: video_player_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: video_player_platform_interface name: video_player_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.1" version: "6.0.2"
video_player_web: video_player_web:
dependency: transitive dependency: transitive
description: description:
name: video_player_web name: video_player_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.13" version: "2.0.15"
visibility_detector: visibility_detector:
dependency: transitive dependency: transitive
description: description:
...@@ -1341,7 +1362,7 @@ packages: ...@@ -1341,7 +1362,7 @@ packages:
name: xdg_directories name: xdg_directories
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.0+3" version: "1.0.0"
xml: xml:
dependency: transitive dependency: transitive
description: description:
......
...@@ -117,6 +117,8 @@ dependencies: ...@@ -117,6 +117,8 @@ dependencies:
eventsource: ^0.4.0 eventsource: ^0.4.0
flutter_client_sse: ^1.0.0 flutter_client_sse: ^1.0.0
highlight: ^0.7.0 highlight: ^0.7.0
device_info_plus: ^8.1.0
app_settings: ^4.2.0
# package:bubble/bubble.dart # package:bubble/bubble.dart
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment