diff --git a/apps/yunxiao/.gitignore b/apps/yunxiao/.gitignore new file mode 100644 index 0000000..3820a95 --- /dev/null +++ b/apps/yunxiao/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/apps/yunxiao/.metadata b/apps/yunxiao/.metadata new file mode 100644 index 0000000..05a325e --- /dev/null +++ b/apps/yunxiao/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "90673a4eef275d1a6692c26ac80d6d746d41a73a" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 90673a4eef275d1a6692c26ac80d6d746d41a73a + base_revision: 90673a4eef275d1a6692c26ac80d6d746d41a73a + - platform: android + create_revision: 90673a4eef275d1a6692c26ac80d6d746d41a73a + base_revision: 90673a4eef275d1a6692c26ac80d6d746d41a73a + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/apps/yunxiao/README.md b/apps/yunxiao/README.md new file mode 100644 index 0000000..80b790e --- /dev/null +++ b/apps/yunxiao/README.md @@ -0,0 +1,17 @@ +# yunxiao + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Learn Flutter](https://docs.flutter.dev/get-started/learn-flutter) +- [Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Flutter learning resources](https://docs.flutter.dev/reference/learning-resources) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/apps/yunxiao/analysis_options.yaml b/apps/yunxiao/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/apps/yunxiao/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/apps/yunxiao/android/.gitignore b/apps/yunxiao/android/.gitignore new file mode 100644 index 0000000..be3943c --- /dev/null +++ b/apps/yunxiao/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/apps/yunxiao/android/app/build.gradle.kts b/apps/yunxiao/android/app/build.gradle.kts new file mode 100644 index 0000000..f1fe6df --- /dev/null +++ b/apps/yunxiao/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.yuanxuan.yunxiao" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.yuanxuan.yunxiao" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/apps/yunxiao/android/app/src/debug/AndroidManifest.xml b/apps/yunxiao/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/apps/yunxiao/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/apps/yunxiao/android/app/src/main/AndroidManifest.xml b/apps/yunxiao/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..aa58dbd --- /dev/null +++ b/apps/yunxiao/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/java/com/yuanxuan/yunxiao/MainActivity.java b/apps/yunxiao/android/app/src/main/java/com/yuanxuan/yunxiao/MainActivity.java new file mode 100644 index 0000000..0928460 --- /dev/null +++ b/apps/yunxiao/android/app/src/main/java/com/yuanxuan/yunxiao/MainActivity.java @@ -0,0 +1,6 @@ +package com.yuanxuan.yunxiao; + +import com.yuanxuan.webshell.core.web_shell_core.CoreShellActivity; + +public class MainActivity extends CoreShellActivity { +} diff --git a/apps/yunxiao/android/app/src/main/res/drawable-hdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-hdpi/android12splash.png new file mode 100644 index 0000000..68c47ff Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-hdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/apps/yunxiao/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..6706081 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-hdpi/splash.png b/apps/yunxiao/android/app/src/main/res/drawable-hdpi/splash.png new file mode 100644 index 0000000..68c47ff Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-hdpi/splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-mdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-mdpi/android12splash.png new file mode 100644 index 0000000..bbfcb22 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-mdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/apps/yunxiao/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..a3e6573 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-mdpi/splash.png b/apps/yunxiao/android/app/src/main/res/drawable-mdpi/splash.png new file mode 100644 index 0000000..bbfcb22 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-mdpi/splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-night-hdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-night-hdpi/android12splash.png new file mode 100644 index 0000000..68c47ff Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-night-hdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-night-mdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-night-mdpi/android12splash.png new file mode 100644 index 0000000..bbfcb22 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-night-mdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-night-xhdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-night-xhdpi/android12splash.png new file mode 100644 index 0000000..1c312e0 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-night-xhdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png new file mode 100644 index 0000000..107d060 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png new file mode 100644 index 0000000..c8074f2 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-v21/background.png b/apps/yunxiao/android/app/src/main/res/drawable-v21/background.png new file mode 100644 index 0000000..8e21404 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-v21/background.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-v21/launch_background.xml b/apps/yunxiao/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..3cc4948 --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/android12splash.png new file mode 100644 index 0000000..1c312e0 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..e9f809b Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/splash.png b/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/splash.png new file mode 100644 index 0000000..1c312e0 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xhdpi/splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/android12splash.png new file mode 100644 index 0000000..107d060 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..6bef454 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/splash.png b/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/splash.png new file mode 100644 index 0000000..107d060 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xxhdpi/splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/android12splash.png b/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/android12splash.png new file mode 100644 index 0000000..c8074f2 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/android12splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..94e7aa4 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/splash.png b/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/splash.png new file mode 100644 index 0000000..c8074f2 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable-xxxhdpi/splash.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable/background.png b/apps/yunxiao/android/app/src/main/res/drawable/background.png new file mode 100644 index 0000000..8e21404 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/drawable/background.png differ diff --git a/apps/yunxiao/android/app/src/main/res/drawable/launch_background.xml b/apps/yunxiao/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..3cc4948 --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/apps/yunxiao/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..c79c58a --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/yunxiao/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..b9a6b9b Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/apps/yunxiao/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/apps/yunxiao/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..98cb161 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/apps/yunxiao/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/apps/yunxiao/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..9c6b6a8 Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/apps/yunxiao/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/yunxiao/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..884b9ca Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/apps/yunxiao/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/apps/yunxiao/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..8bdbbfa Binary files /dev/null and b/apps/yunxiao/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/apps/yunxiao/android/app/src/main/res/values-night-v31/styles.xml b/apps/yunxiao/android/app/src/main/res/values-night-v31/styles.xml new file mode 100644 index 0000000..1b8e45f --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/values-night-v31/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/res/values-night/styles.xml b/apps/yunxiao/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..dbc9ea9 --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/res/values-v31/styles.xml b/apps/yunxiao/android/app/src/main/res/values-v31/styles.xml new file mode 100644 index 0000000..8012d02 --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/apps/yunxiao/android/app/src/main/res/values/colors.xml b/apps/yunxiao/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/apps/yunxiao/android/app/src/main/res/values/styles.xml b/apps/yunxiao/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..0d1fa8f --- /dev/null +++ b/apps/yunxiao/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/apps/yunxiao/android/app/src/profile/AndroidManifest.xml b/apps/yunxiao/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/apps/yunxiao/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/apps/yunxiao/android/build.gradle.kts b/apps/yunxiao/android/build.gradle.kts new file mode 100644 index 0000000..dbee657 --- /dev/null +++ b/apps/yunxiao/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/apps/yunxiao/android/gradle.properties b/apps/yunxiao/android/gradle.properties new file mode 100644 index 0000000..fbee1d8 --- /dev/null +++ b/apps/yunxiao/android/gradle.properties @@ -0,0 +1,2 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true diff --git a/apps/yunxiao/android/gradle/wrapper/gradle-wrapper.properties b/apps/yunxiao/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..e4ef43f --- /dev/null +++ b/apps/yunxiao/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip diff --git a/apps/yunxiao/android/settings.gradle.kts b/apps/yunxiao/android/settings.gradle.kts new file mode 100644 index 0000000..ca7fe06 --- /dev/null +++ b/apps/yunxiao/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.11.1" apply false + id("org.jetbrains.kotlin.android") version "2.2.20" apply false +} + +include(":app") diff --git a/apps/yunxiao/assets/branding/icon.png b/apps/yunxiao/assets/branding/icon.png new file mode 100644 index 0000000..1c45809 Binary files /dev/null and b/apps/yunxiao/assets/branding/icon.png differ diff --git a/apps/yunxiao/assets/branding/icon_foreground.png b/apps/yunxiao/assets/branding/icon_foreground.png new file mode 100644 index 0000000..1c45809 Binary files /dev/null and b/apps/yunxiao/assets/branding/icon_foreground.png differ diff --git a/apps/yunxiao/assets/branding/splash.png b/apps/yunxiao/assets/branding/splash.png new file mode 100644 index 0000000..f436b71 Binary files /dev/null and b/apps/yunxiao/assets/branding/splash.png differ diff --git a/apps/yunxiao/flutter_launcher_icons.yaml b/apps/yunxiao/flutter_launcher_icons.yaml new file mode 100644 index 0000000..61717f8 --- /dev/null +++ b/apps/yunxiao/flutter_launcher_icons.yaml @@ -0,0 +1,5 @@ +flutter_launcher_icons: + android: true + image_path: "assets/branding/icon.png" + adaptive_icon_background: "#FFFFFF" + adaptive_icon_foreground: "assets/branding/icon_foreground.png" diff --git a/apps/yunxiao/flutter_native_splash.yaml b/apps/yunxiao/flutter_native_splash.yaml new file mode 100644 index 0000000..bd05f40 --- /dev/null +++ b/apps/yunxiao/flutter_native_splash.yaml @@ -0,0 +1,6 @@ +flutter_native_splash: + color: "#FFFFFF" + image: "assets/branding/splash.png" + android_12: + image: "assets/branding/splash.png" + icon_background_color: "#FFFFFF" diff --git a/apps/yunxiao/lib/main.dart b/apps/yunxiao/lib/main.dart new file mode 100644 index 0000000..12b0b59 --- /dev/null +++ b/apps/yunxiao/lib/main.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; +import 'package:web_shell_core/web_shell_core.dart'; + +void main() { + runShellApp( + ShellEnvironment( + appName: '云校嗨学', + appKey: 'yunxiao_prod', + accentColor: const Color(0xFF4F46E5), + backgroundColor: const Color(0xFFFFFFFF), + textColor: const Color(0xFF1F2937), + mutedTextColor: const Color(0xFF6B7280), + splashImage: const AssetImage('assets/branding/splash.png'), + initialUrl: 'https://h5.jingdaka.com/pages/user/login/login?sourcePage=%252Fpages%252Fuser_sub%252Fuser_homework%252Fhomework_list%252Fhomework_list%253FcourseId%253D1821860%2526type%253Dredirect%2526domain_name%253Dmjunysod', + ), + ); +} diff --git a/apps/yunxiao/pubspec.lock b/apps/yunxiao/pubspec.lock new file mode 100644 index 0000000..138f441 --- /dev/null +++ b/apps/yunxiao/pubspec.lock @@ -0,0 +1,745 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.9" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.13.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.4" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.4.2" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.19.1" + connectivity_plus: + dependency: transitive + description: + name: connectivity_plus + sha256: "33bae12a398f841c6cda09d1064212957265869104c478e5ad51e2fb26c3973c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "7.0.0" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.3.5+2" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.8" + dbus: + dependency: transitive + description: + name: dbus + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.12" + device_info_plus: + dependency: transitive + description: + name: device_info_plus + sha256: "4df8babf73058181227e18b08e6ea3520cf5fc5d796888d33b7cb0f33f984b7c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "12.3.0" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f + url: "https://pub.flutter-io.cn" + source: hosted + version: "7.0.3" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.flutter-io.cn" + source: hosted + version: "7.0.1" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "57d9a1dd5063f85fa3107fb42d1faffda52fdc948cefd5fe5ea85267a5fc7343" + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.3.10" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.4" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.5" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.7.0" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.3+5" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.14.4" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.0.0" + flutter_native_splash: + dependency: "direct dev" + description: + name: flutter_native_splash + sha256: "4fb9f4113350d3a80841ce05ebf1976a36de622af7d19aca0ca9a9911c7ff002" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.4.7" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.33" + 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" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.15.6" + http: + dependency: transitive + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.6.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.8.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.1" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: eda9b91b7e266d9041084a42d605a74937d996b87083395c5e47835916a86156 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.8.13+14" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.1" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.8.13+6" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.2" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.2+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.11.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8 + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.11.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.flutter-io.cn" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.1.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.18" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.17.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.5.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.9.1" + permission_handler: + dependency: transitive + description: + name: permission_handler + sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 + url: "https://pub.flutter-io.cn" + source: hosted + version: "12.0.1" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6" + url: "https://pub.flutter-io.cn" + source: hosted + version: "13.0.1" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.4.7" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.3+5" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.3.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" + url: "https://pub.flutter-io.cn" + source: hosted + version: "7.0.2" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.5.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.9" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.0" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.1" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.3.28" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.4.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.2.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.2.5" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.4.2" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.5" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" + url: "https://pub.flutter-io.cn" + source: hosted + version: "15.0.2" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.1" + web_shell_core: + dependency: "direct main" + description: + path: "../../packages/web_shell_core" + relative: true + source: path + version: "0.0.1" + webview_flutter: + dependency: transitive + description: + name: webview_flutter + sha256: a3da219916aba44947d3a5478b1927876a09781174b5a2b67fa5be0555154bf9 + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.13.1" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: "2a03df01df2fd30b075d1e7f24c28aee593f2e5d5ac4c3c4283c5eda63717b24" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.10.13" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "63d26ee3aca7256a83ccb576a50272edd7cfc80573a4305caa98985feb493ee0" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.14.0" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: "0d85e8bc5db9a7c49f6ff57cbeafc6cd8216ad9c9ebc70b2c4579d955698933a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.24.1" + win32: + dependency: transitive + description: + name: win32 + sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e + url: "https://pub.flutter-io.cn" + source: hosted + version: "5.15.0" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.6.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.11.0 <4.0.0" + flutter: ">=3.38.0" diff --git a/apps/yunxiao/pubspec.yaml b/apps/yunxiao/pubspec.yaml new file mode 100644 index 0000000..fce00c0 --- /dev/null +++ b/apps/yunxiao/pubspec.yaml @@ -0,0 +1,94 @@ +name: yunxiao +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.11.0 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + web_shell_core: + path: ../../packages/web_shell_core + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^6.0.0 + flutter_launcher_icons: ^0.14.4 + flutter_native_splash: ^2.4.7 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + assets: + - assets/branding/ + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/flavors/yunxiao.yaml b/flavors/yunxiao.yaml new file mode 100644 index 0000000..3ec5915 --- /dev/null +++ b/flavors/yunxiao.yaml @@ -0,0 +1,15 @@ +app_name: "云校嗨学" +application_id: "com.yuanxuan.yunxiao" +app_key: "yunxiao_prod" +default_url: "https://h5.jingdaka.com/pages/user/login/login?sourcePage=%252Fpages%252Fuser_sub%252Fuser_homework%252Fhomework_list%252Fhomework_list%253FcourseId%253D1821860%2526type%253Dredirect%2526domain_name%253Dmjunysod" +theme: + accent_color: "0xFF4F46E5" + bg_color: "0xFFFFFFFF" + text_color: "0xFF1F2937" + muted_text_color: "0xFF6B7280" +branding: + icon: "icon.png" + icon_background: "#FFFFFF" + icon_foreground: "icon_foreground.png" + splash: "splash.png" + splash_color: "#FFFFFF" diff --git a/flavors/yunxiao/icon.png b/flavors/yunxiao/icon.png new file mode 100644 index 0000000..1c45809 Binary files /dev/null and b/flavors/yunxiao/icon.png differ diff --git a/flavors/yunxiao/icon_foreground.png b/flavors/yunxiao/icon_foreground.png new file mode 100644 index 0000000..1c45809 Binary files /dev/null and b/flavors/yunxiao/icon_foreground.png differ diff --git a/flavors/yunxiao/splash.png b/flavors/yunxiao/splash.png new file mode 100644 index 0000000..f436b71 Binary files /dev/null and b/flavors/yunxiao/splash.png differ diff --git a/tool/generate_app.dart b/tool/generate_app.dart index 5aca0fe..40daf1b 100644 --- a/tool/generate_app.dart +++ b/tool/generate_app.dart @@ -6,9 +6,7 @@ final RegExp _validBrandName = RegExp(r'^[a-z][a-z0-9_]*$'); Future main(List args) async { if (args.isEmpty) { - print( - '\x1B[31m用法:dart run tool/generate_app.dart <品牌名>\x1B[0m', - ); + print('\x1B[31m用法:dart run tool/generate_app.dart <品牌名>\x1B[0m'); print('\x1B[33m示例:dart run tool/generate_app.dart quanxue\x1B[0m'); exit(1); } @@ -26,9 +24,7 @@ Future main(List args) async { final File configFile = File('flavors/$brand.yaml'); if (!configFile.existsSync()) { - print( - '\x1B[31m[错误] 未找到配置文件:${configFile.path}\x1B[0m', - ); + print('\x1B[31m[错误] 未找到配置文件:${configFile.path}\x1B[0m'); exit(1); } @@ -64,6 +60,8 @@ Future main(List args) async { // 5. 覆盖 AndroidManifest.xml 中的应用名称 await _overwriteManifestLabel(appDir, appName); + final String? defaultUrl = config['default_url'] as String?; + // 6. 生成 lib/main.dart await _generateDartEntrypoint( appDir, @@ -73,6 +71,7 @@ Future main(List args) async { bgColor, textColor, mutedTextColor, + defaultUrl, ); // 7. 生成图标与启动页配置 @@ -94,14 +93,12 @@ Future _createFlutterApp( print('\x1B[34m[信息] 正在执行 flutter create...\x1B[0m'); final Directory dir = Directory(appDir); if (dir.existsSync()) { - print( - '\x1B[33m[警告] 目录 $appDir 已存在,正在清理...\x1B[0m', - ); + print('\x1B[33m[警告] 目录 $appDir 已存在,正在清理...\x1B[0m'); dir.deleteSync(recursive: true); } // 提取组织名 - // 例如:com.wanmake.quanxue -> org: com.wanmake + // 例如:com.yuanxuan.quanxue -> org: com.yuanxuan final List segments = applicationId.split('.'); final String org = segments.sublist(0, segments.length - 1).join('.'); @@ -135,9 +132,7 @@ Future _addCoreDependency(String appDir) async { ], workingDirectory: appDir); if (result.exitCode != 0) { - print( - '\x1B[31m[错误] 添加依赖失败:\n${result.stderr}\x1B[0m', - ); + print('\x1B[31m[错误] 添加依赖失败:\n${result.stderr}\x1B[0m'); exit(1); } } @@ -186,10 +181,13 @@ Future _generateDartEntrypoint( String bgColor, String textColor, String mutedTextColor, + String? defaultUrl, ) async { print('\x1B[34m[信息] 正在生成 lib/main.dart...\x1B[0m'); final File mainFile = File('$appDir/lib/main.dart'); + final String urlParam = defaultUrl != null ? "initialUrl: '$defaultUrl'," : ""; + final String dartContent = ''' import 'package:flutter/material.dart'; @@ -205,6 +203,7 @@ void main() { textColor: const Color($textColor), mutedTextColor: const Color($mutedTextColor), splashImage: const AssetImage('assets/branding/splash.png'), + $urlParam ), ); } @@ -226,9 +225,7 @@ Future _generateBrandingAssets( ) async { print('\x1B[34m[信息] 正在配置图标与启动页...\x1B[0m'); if (config['branding'] == null) { - print( - '\x1B[33m[警告] 配置中未找到 branding 段,跳过资源生成。\x1B[0m', - ); + print('\x1B[33m[警告] 配置中未找到 branding 段,跳过资源生成。\x1B[0m'); return; } final YamlMap branding = config['branding'] as YamlMap; @@ -237,9 +234,7 @@ Future _generateBrandingAssets( final Directory brandSourceDir = Directory('flavors/$brand'); final Directory brandTargetDir = Directory('$appDir/assets/branding'); if (!brandSourceDir.existsSync()) { - print( - '\x1B[31m[错误] 品牌资源目录不存在:${brandSourceDir.path}\x1B[0m', - ); + print('\x1B[31m[错误] 品牌资源目录不存在:${brandSourceDir.path}\x1B[0m'); print( '\x1B[33m请在 flavors/$brand/ 目录下放置 icon.png、' 'icon_foreground.png、splash.png 等资源文件。\x1B[0m', @@ -278,13 +273,18 @@ Future _generateBrandingAssets( exit(1); } - // ── 3. 生成 flutter_launcher_icons 配置 ── + // ── 3. 确保依赖已解析 ── + await Process.run('flutter', ['pub', 'get'], workingDirectory: appDir); + + // ── 4. 生成 flutter_launcher_icons 配置 ── // 资源路径指向复制后的位置(相对于 appDir) final String iconPath = 'assets/branding/${branding['icon']}'; - final String iconForeground = 'assets/branding/${branding['icon_foreground']}'; + final String iconForeground = + 'assets/branding/${branding['icon_foreground']}'; final String iconBackground = branding['icon_background'] as String; - final String iconsYaml = ''' + final String iconsYaml = + ''' flutter_launcher_icons: android: true image_path: "$iconPath" @@ -297,7 +297,8 @@ flutter_launcher_icons: final String splashPath = 'assets/branding/${branding['splash']}'; final String splashColor = branding['splash_color'] as String; - final String splashYaml = ''' + final String splashYaml = + ''' flutter_native_splash: color: "$splashColor" image: "$splashPath" @@ -317,9 +318,7 @@ flutter_native_splash: ], workingDirectory: appDir); if (iconsResult.exitCode != 0) { - print( - '\x1B[31m[错误] 图标生成失败:\n${iconsResult.stderr}\x1B[0m', - ); + print('\x1B[31m[错误] 图标生成失败:\n${iconsResult.stderr}\x1B[0m'); print('\x1B[33mstdout:\n${iconsResult.stdout}\x1B[0m'); exit(1); } @@ -333,9 +332,7 @@ flutter_native_splash: ], workingDirectory: appDir); if (splashResult.exitCode != 0) { - print( - '\x1B[31m[错误] 启动页生成失败:\n${splashResult.stderr}\x1B[0m', - ); + print('\x1B[31m[错误] 启动页生成失败:\n${splashResult.stderr}\x1B[0m'); print('\x1B[33mstdout:\n${splashResult.stdout}\x1B[0m'); exit(1); } @@ -347,10 +344,12 @@ Future _registerFlutterAssets(String appDir) async { final File pubspecFile = File('$appDir/pubspec.yaml'); String content = await pubspecFile.readAsString(); - // 查找 flutter: 段并添加 assets 声明 - if (!content.contains('assets:')) { + // 检查是否已有未注释的 assets: 声明 + final bool hasAssets = RegExp(r'^\s+assets:', multiLine: true).hasMatch(content); + if (!hasAssets) { + // 必须匹配行首的顶层 flutter: 键,忽略缩进的 flutter: (SDK 依赖) content = content.replaceFirst( - 'flutter:\n', + RegExp(r'^flutter:\s*\n', multiLine: true), 'flutter:\n assets:\n - assets/branding/\n', ); await pubspecFile.writeAsString(content);