Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b
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
literal 0
HcmV?d00001
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8
GIT binary patch
literal 1418
zcmV;51$Fv~P)q
zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+
zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq
z^={4hPQv)y=I|4n+?>7Fim=dxt1
z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT
zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf`
zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_>
z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3
zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF
z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a
z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE
z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62(
zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;?
zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-<
z{s<&cCV_1`^TD^ia9!*mQDq&
zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw
zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv
zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF
z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC
YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H
literal 0
HcmV?d00001
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000..d08a4de
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000..65a94b5
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..497371e
--- /dev/null
+++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..bbb83ca
--- /dev/null
+++ b/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
new file mode 100644
index 0000000..0d706df
--- /dev/null
+++ b/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Flutter Jdt Store
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ flutter_jdt_store
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..fae207f
--- /dev/null
+++ b/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 0000000..4d206de
--- /dev/null
+++ b/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/lib/global.dart b/lib/global.dart
new file mode 100644
index 0000000..c56c409
--- /dev/null
+++ b/lib/global.dart
@@ -0,0 +1,30 @@
+import 'dart:io';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import './utils/utils.dart';
+
+class Global {
+ static String appName = "Flutter Demo";
+
+ // 是否 release
+ static bool get isRelease => const bool.fromEnvironment("dart.vm.product");
+
+ // 全局路由观察者
+ static RouteObserver routeObserver = RouteObserver();
+
+ static Future init() async {
+ // 运行初始
+ WidgetsFlutterBinding.ensureInitialized();
+
+ // 本地存储初始化
+ await StorageUtil().init();
+
+ // android 状态栏为透明的沉浸
+ if (Platform.isAndroid) {
+ SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle(
+ statusBarColor: Colors.transparent,
+ );
+ SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
+ }
+ }
+}
diff --git a/lib/initial_binding.dart b/lib/initial_binding.dart
new file mode 100644
index 0000000..be8d74e
--- /dev/null
+++ b/lib/initial_binding.dart
@@ -0,0 +1,6 @@
+import 'package:get/get.dart';
+
+class InitialBinding implements Bindings {
+ @override
+ void dependencies() {}
+}
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
new file mode 100644
index 0000000..ff45286
--- /dev/null
+++ b/lib/main.dart
@@ -0,0 +1,59 @@
+import 'package:get/get.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_easyloading/flutter_easyloading.dart';
+import 'package:flutter_jdt_store/router/app_pages.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:statusbarz/statusbarz.dart';
+
+import 'global.dart';
+import 'utils/utils.dart';
+import 'initial_binding.dart';
+
+Future main() async {
+ debugPrint('应用初始化中...');
+ await Global.init();
+ debugPrint('应用初始化完成...');
+ // 强制竖屏
+ StatusBarKit.setPortrait().then((_) {
+ runApp(const StatusbarzCapturer(
+ child: MainApp(),
+ ));
+ });
+}
+
+class MainApp extends StatelessWidget {
+ const MainApp({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return ScreenUtilInit(
+ designSize: const Size(390, 844), // iPhone 13尺寸
+ builder: ([BuildContext? _, __]) {
+ return GetMaterialApp(
+ debugShowCheckedModeBanner: false,
+ // 日志
+ enableLog: true,
+ logWriterCallback: Logger.write,
+ defaultTransition: Transition.cupertino,
+ // 路由
+ getPages: AppPages.routes,
+ navigatorObservers: [
+ Global.routeObserver,
+ Statusbarz.instance.observer
+ ],
+ // 启动页面
+ initialRoute: AppPages.initial,
+ initialBinding: InitialBinding(),
+ builder: (context, widget) {
+ return MediaQuery(
+ ///设置文字大小不随系统设置改变
+ data: MediaQuery.of(context)
+ .copyWith(textScaler: const TextScaler.linear(1.0)),
+ child: FlutterEasyLoading(child: widget),
+ );
+ },
+ );
+ },
+ );
+ }
+}
diff --git a/lib/pages/splash/index.dart b/lib/pages/splash/index.dart
new file mode 100644
index 0000000..b4154d2
--- /dev/null
+++ b/lib/pages/splash/index.dart
@@ -0,0 +1,6 @@
+library splash;
+
+export './splash_binding.dart';
+export './splash_logic.dart';
+export './splash_state.dart';
+export './splash_view.dart';
\ No newline at end of file
diff --git a/lib/pages/splash/splash_binding.dart b/lib/pages/splash/splash_binding.dart
new file mode 100644
index 0000000..6df202c
--- /dev/null
+++ b/lib/pages/splash/splash_binding.dart
@@ -0,0 +1,10 @@
+import 'package:get/get.dart';
+
+import 'splash_logic.dart';
+
+class SplashBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(() => SplashLogic());
+ }
+}
diff --git a/lib/pages/splash/splash_logic.dart b/lib/pages/splash/splash_logic.dart
new file mode 100644
index 0000000..d54b4a8
--- /dev/null
+++ b/lib/pages/splash/splash_logic.dart
@@ -0,0 +1,24 @@
+import 'package:get/get.dart';
+import 'package:tdesign_flutter/tdesign_flutter.dart';
+
+import 'splash_state.dart';
+
+class SplashLogic extends GetxController {
+ final SplashState state = SplashState();
+
+ @override
+ void onReady() {
+ // TODO: implement onReady
+ super.onReady();
+ }
+
+ @override
+ void onClose() {
+ // TODO: implement onClose
+ super.onClose();
+ }
+
+ void showText(context) {
+ TDToast.showText('轻提示文字内容', context: context);
+ }
+}
diff --git a/lib/pages/splash/splash_state.dart b/lib/pages/splash/splash_state.dart
new file mode 100644
index 0000000..d4ba1d8
--- /dev/null
+++ b/lib/pages/splash/splash_state.dart
@@ -0,0 +1,6 @@
+
+class SplashState {
+ SplashState() {
+ ///Initialize variables
+ }
+}
diff --git a/lib/pages/splash/splash_view.dart b/lib/pages/splash/splash_view.dart
new file mode 100644
index 0000000..c684845
--- /dev/null
+++ b/lib/pages/splash/splash_view.dart
@@ -0,0 +1,43 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import 'package:tdesign_flutter/tdesign_flutter.dart';
+import 'splash_logic.dart';
+
+class SplashPage extends StatefulWidget {
+ const SplashPage({Key? key}) : super(key: key);
+
+ @override
+ State createState() => _SplashPageState();
+}
+
+class _SplashPageState extends State {
+ final logic = Get.find();
+ final state = Get.find().state;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Center(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Text("Splash"),
+ TDButton(
+ theme: TDButtonTheme.primary,
+ text: "立即登录",
+ onTap: () {
+ logic.showText(context);
+ },
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+
+ @override
+ void dispose() {
+ Get.delete();
+ super.dispose();
+ }
+}
diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart
new file mode 100644
index 0000000..9661540
--- /dev/null
+++ b/lib/router/app_pages.dart
@@ -0,0 +1,17 @@
+import 'package:get/get.dart';
+import '../pages/splash/index.dart';
+
+class AppPages {
+ static const String initial = '/';
+ static const String login = '/login';
+ static const String home = '/home';
+
+ static final List routes = [
+ GetPage(
+ name: AppPages.initial,
+ page: () => const SplashPage(),
+ binding: SplashBinding()),
+ // GetPage(name: AppPages.login, page: () => LoginPage()),
+ // GetPage(name: AppPages.home, page: () => HomePage()),
+ ];
+}
diff --git a/lib/utils/logger.dart b/lib/utils/logger.dart
new file mode 100644
index 0000000..bfd3d8d
--- /dev/null
+++ b/lib/utils/logger.dart
@@ -0,0 +1,8 @@
+import 'package:flutter/material.dart';
+
+class Logger {
+ // Sample of abstract logging function
+ static void write(String text, {bool isError = false}) {
+ Future.microtask(() => debugPrint('** $text. isError: [$isError]'));
+ }
+}
diff --git a/lib/utils/status_bar.dart b/lib/utils/status_bar.dart
new file mode 100644
index 0000000..53ab5cf
--- /dev/null
+++ b/lib/utils/status_bar.dart
@@ -0,0 +1,29 @@
+import 'dart:io';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
+// 状态栏设置工具类
+class StatusBarKit {
+ // 设置沉浸式状态栏
+ static void setStatusBarDark({bool dark = false, Color? darkColor}) {
+ if (Platform.isAndroid) {
+ SystemChrome.setSystemUIOverlayStyle(
+ SystemUiOverlayStyle(
+ statusBarColor: dark ? darkColor : Colors.transparent,
+ systemNavigationBarIconBrightness:
+ dark ? Brightness.light : Brightness.dark,
+ statusBarIconBrightness: dark ? Brightness.light : Brightness.dark,
+ statusBarBrightness: dark ? Brightness.light : Brightness.dark,
+ ),
+ );
+ }
+ }
+
+ // 设置竖屏
+ static Future setPortrait() {
+ return SystemChrome.setPreferredOrientations([
+ DeviceOrientation.portraitDown,
+ DeviceOrientation.portraitUp,
+ ]);
+ }
+}
diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart
new file mode 100644
index 0000000..541e567
--- /dev/null
+++ b/lib/utils/storage.dart
@@ -0,0 +1,69 @@
+import 'dart:convert';
+import 'package:shared_preferences/shared_preferences.dart';
+
+// 本地存储
+class StorageUtil {
+ static final StorageUtil _singleton = StorageUtil._internal();
+ late SharedPreferences _prefs;
+
+ factory StorageUtil() => _singleton;
+
+ StorageUtil._internal();
+
+ Future init() async {
+ _prefs = await SharedPreferences.getInstance();
+ }
+
+ Future putJSON(String key, dynamic jsonVal) {
+ String jsonString = jsonEncode(jsonVal);
+ return _prefs.setString(key, jsonString);
+ }
+
+ dynamic getJSON(String key) {
+ String? jsonString = _prefs.getString(key);
+ return jsonString == null ? null : jsonDecode(jsonString);
+ }
+
+ String getString(String key, {String defValue = ''}) {
+ if (!_prefs.containsKey(key)) return defValue;
+ return _prefs.getString(key) ?? defValue;
+ }
+
+ Future? putString(String key, String value) {
+ return _prefs.setString(key, value);
+ }
+
+ bool getBool(String key, {bool defValue = false}) {
+ if (!_prefs.containsKey(key)) return defValue;
+ return _prefs.getBool(key) ?? defValue;
+ }
+
+ Future? putBool(String key, bool value) {
+ return _prefs.setBool(key, value);
+ }
+
+ int getInt(String key, {int defValue = 0}) {
+ if (!_prefs.containsKey(key)) return defValue;
+ return _prefs.getInt(key) ?? defValue;
+ }
+
+ Future? putInt(String key, int value) {
+ return _prefs.setInt(key, value);
+ }
+
+ bool? haveKey(String key) {
+ return getKeys().contains(key);
+ }
+
+ Set getKeys() {
+ return _prefs.getKeys();
+ }
+
+ Future? remove(String key) {
+ return _prefs.remove(key);
+ }
+
+ Future? clear() {
+ return _prefs.clear();
+ }
+}
diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart
new file mode 100644
index 0000000..e8eb31a
--- /dev/null
+++ b/lib/utils/utils.dart
@@ -0,0 +1,5 @@
+library utils;
+
+export 'logger.dart';
+export 'status_bar.dart';
+export 'storage.dart';
\ No newline at end of file
diff --git a/pubspec.lock b/pubspec.lock
new file mode 100644
index 0000000..bf4fc5e
--- /dev/null
+++ b/pubspec.lock
@@ -0,0 +1,538 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ archive:
+ dependency: transitive
+ description:
+ name: archive
+ sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.4.9"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.11.0"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.1"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.3.0"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.1.1"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.18.0"
+ convert:
+ dependency: transitive
+ description:
+ name: convert
+ sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.1.1"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.0.3"
+ device_info_plus:
+ dependency: "direct main"
+ description:
+ name: device_info_plus
+ sha256: "0042cb3b2a76413ea5f8a2b40cec2a33e01d0c937e91f0f7c211fde4f7739ba6"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "9.1.1"
+ device_info_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: device_info_plus_platform_interface
+ sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "7.0.0"
+ dio:
+ dependency: "direct main"
+ description:
+ name: dio
+ sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "5.4.0"
+ easy_refresh:
+ dependency: "direct main"
+ description:
+ name: easy_refresh
+ sha256: "9465065e86ce4993c3a9c825295cd1cbcdeffaa6903fe2575b30565b5b39a1f4"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.3.3+1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.3.1"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.0"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "7.0.0"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_easyloading:
+ dependency: "direct main"
+ description:
+ name: flutter_easyloading
+ sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.0.5"
+ flutter_easyrefresh:
+ dependency: transitive
+ description:
+ name: flutter_easyrefresh
+ sha256: "5d161ee5dcac34da9065116568147d742dd25fb9bff3b10024d9054b195087ad"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.2.2"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.0.3"
+ flutter_screenutil:
+ dependency: "direct main"
+ description:
+ name: flutter_screenutil
+ sha256: "8cf100b8e4973dc570b6415a2090b0bfaa8756ad333db46939efc3e774ee100d"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "5.9.0"
+ flutter_spinkit:
+ dependency: transitive
+ description:
+ name: flutter_spinkit
+ sha256: b39c753e909d4796906c5696a14daf33639a76e017136c8d82bf3e620ce5bb8e
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "5.2.0"
+ flutter_swiper_null_safety:
+ dependency: transitive
+ description:
+ name: flutter_swiper_null_safety
+ sha256: "5a855e0080d035c08e82f8b7fd2f106344943a30c9ab483b2584860a2f22eaaf"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.0.2"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_web_plugins:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ get:
+ dependency: "direct main"
+ description:
+ name: get
+ sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "4.6.6"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.1.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "4.0.2"
+ image:
+ dependency: transitive
+ description:
+ name: image
+ sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "4.1.3"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.6.7"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.1"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.12.16"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.5.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.10.0"
+ package_info_plus:
+ dependency: "direct main"
+ description:
+ name: package_info_plus
+ sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "5.0.1"
+ package_info_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: package_info_plus_platform_interface
+ sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.0.1"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.8.3"
+ path_drawing:
+ dependency: transitive
+ description:
+ name: path_drawing
+ sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.0.1"
+ path_parsing:
+ dependency: transitive
+ description:
+ name: path_parsing
+ sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.0.1"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.2.1"
+ path_provider_platform_interface:
+ dependency: transitive
+ description:
+ name: path_provider_platform_interface
+ sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.1"
+ path_provider_windows:
+ dependency: transitive
+ description:
+ name: path_provider_windows
+ sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.2.1"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "6.0.2"
+ platform:
+ dependency: transitive
+ description:
+ name: platform
+ sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.1.3"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.7"
+ pointycastle:
+ dependency: transitive
+ description:
+ name: pointycastle
+ sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "3.7.3"
+ shared_preferences:
+ dependency: "direct main"
+ description:
+ name: shared_preferences
+ sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.2.2"
+ shared_preferences_android:
+ dependency: transitive
+ description:
+ name: shared_preferences_android
+ sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.2.1"
+ shared_preferences_foundation:
+ dependency: transitive
+ description:
+ name: shared_preferences_foundation
+ sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.3.4"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.3.2"
+ shared_preferences_platform_interface:
+ dependency: transitive
+ description:
+ name: shared_preferences_platform_interface
+ sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.3.1"
+ shared_preferences_web:
+ dependency: transitive
+ description:
+ name: shared_preferences_web
+ sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.2.2"
+ shared_preferences_windows:
+ dependency: transitive
+ description:
+ name: shared_preferences_windows
+ sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.3.2"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.99"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.10.0"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.11.1"
+ statusbarz:
+ dependency: "direct main"
+ description:
+ name: statusbarz
+ sha256: "0564403d1a6169076557d9daa4bc5fb9aa0d39a46585156d5b4cd0c9a3b6efbe"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.0.14"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.2"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.2.0"
+ tdesign_flutter:
+ dependency: "direct main"
+ description:
+ name: tdesign_flutter
+ sha256: c20bea85b3b82da3e9674a84c616a6d3c68e6299ace4736842ca1bb9921ac7c1
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.1.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.2.1"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.6.1"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.3.2"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "2.1.4"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.3.0"
+ win32:
+ dependency: transitive
+ description:
+ name: win32
+ sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "5.1.1"
+ win32_registry:
+ dependency: transitive
+ description:
+ name: win32_registry
+ sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.1.2"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.0.3"
+ xml:
+ dependency: transitive
+ description:
+ name: xml
+ sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "6.5.0"
+sdks:
+ dart: ">=3.2.3 <4.0.0"
+ flutter: ">=3.16.0"
diff --git a/pubspec.yaml b/pubspec.yaml
new file mode 100644
index 0000000..96943b8
--- /dev/null
+++ b/pubspec.yaml
@@ -0,0 +1,29 @@
+name: flutter_jdt_store
+description: "捷兑通-商家端"
+publish_to: 'none'
+version: 0.1.0
+
+environment:
+ sdk: '>=3.2.3 <4.0.0'
+
+dependencies:
+ device_info_plus: ^9.1.1
+ dio: ^5.4.0
+ easy_refresh: ^3.3.3+1
+ flutter:
+ sdk: flutter
+ flutter_easyloading: ^3.0.5
+ flutter_screenutil: ^5.9.0
+ get: ^4.6.6
+ package_info_plus: ^5.0.1
+ shared_preferences: ^2.2.2
+ statusbarz: ^1.0.14
+ tdesign_flutter: ^0.1.1
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^2.0.0
+
+flutter:
+ uses-material-design: true