Showing preview only (2,539K chars total). Download the full file or copy to clipboard to get everything.
Repository: mylxsw/aidea
Branch: main
Commit: cea454f7b48a
Files: 400
Total size: 2.4 MB
Directory structure:
gitextract_69aiun7l/
├── .github/
│ └── workflows/
│ └── build_windows_app.yml
├── .gitignore
├── .metadata
├── AppRun
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── README.zh-CN.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── cc/
│ │ │ │ └── aicode/
│ │ │ │ └── flutter/
│ │ │ │ └── askaide/
│ │ │ │ └── askaide/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── values/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ └── values-v31/
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle
├── askaide.desktop
├── assets/
│ └── lottie/
│ └── empty_status.json
├── build-win-msix.bat
├── build-win.bat
├── devtools_options.yaml
├── docker-build.sh
├── flutter_launcher_icons.yaml
├── install.icns
├── install.iss
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── Runner-Bridging-Header.h
│ │ └── Runner.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ ├── IDEWorkspaceChecks.plist
│ └── WorkspaceSettings.xcsettings
├── lib/
│ ├── bloc/
│ │ ├── account_bloc.dart
│ │ ├── account_event.dart
│ │ ├── account_state.dart
│ │ ├── admin_payment_bloc.dart
│ │ ├── admin_payment_event.dart
│ │ ├── admin_payment_state.dart
│ │ ├── admin_room_bloc.dart
│ │ ├── admin_room_event.dart
│ │ ├── admin_room_state.dart
│ │ ├── background_image_bloc.dart
│ │ ├── background_image_event.dart
│ │ ├── background_image_state.dart
│ │ ├── bloc_manager.dart
│ │ ├── channel_bloc.dart
│ │ ├── channel_event.dart
│ │ ├── channel_state.dart
│ │ ├── chat_chat_bloc.dart
│ │ ├── chat_chat_event.dart
│ │ ├── chat_chat_state.dart
│ │ ├── chat_event.dart
│ │ ├── chat_message_bloc.dart
│ │ ├── chat_state.dart
│ │ ├── creative_island_bloc.dart
│ │ ├── creative_island_event.dart
│ │ ├── creative_island_state.dart
│ │ ├── free_count_bloc.dart
│ │ ├── free_count_event.dart
│ │ ├── free_count_state.dart
│ │ ├── gallery_bloc.dart
│ │ ├── gallery_event.dart
│ │ ├── gallery_state.dart
│ │ ├── group_chat_bloc.dart
│ │ ├── group_chat_event.dart
│ │ ├── group_chat_state.dart
│ │ ├── model_bloc.dart
│ │ ├── model_event.dart
│ │ ├── model_state.dart
│ │ ├── notify_bloc.dart
│ │ ├── notify_event.dart
│ │ ├── notify_state.dart
│ │ ├── payment_bloc.dart
│ │ ├── payment_event.dart
│ │ ├── payment_state.dart
│ │ ├── room_bloc.dart
│ │ ├── room_event.dart
│ │ ├── room_state.dart
│ │ ├── user_api_keys_bloc.dart
│ │ ├── user_api_keys_event.dart
│ │ ├── user_api_keys_state.dart
│ │ ├── user_bloc.dart
│ │ ├── user_event.dart
│ │ ├── user_state.dart
│ │ ├── version_bloc.dart
│ │ ├── version_event.dart
│ │ └── version_state.dart
│ ├── data/
│ │ └── migrate.dart
│ ├── helper/
│ │ ├── ability.dart
│ │ ├── cache.dart
│ │ ├── chat_token.dart
│ │ ├── color.dart
│ │ ├── constant.dart
│ │ ├── env.dart
│ │ ├── error.dart
│ │ ├── event.dart
│ │ ├── global_store.dart
│ │ ├── haptic_feedback.dart
│ │ ├── helper.dart
│ │ ├── http.dart
│ │ ├── image.dart
│ │ ├── logger.dart
│ │ ├── lru.dart
│ │ ├── model.dart
│ │ ├── model_resolver.dart
│ │ ├── path.dart
│ │ ├── platform.dart
│ │ ├── queue.dart
│ │ ├── tips.dart
│ │ └── upload.dart
│ ├── lang/
│ │ └── lang.dart
│ ├── main.dart
│ ├── page/
│ │ ├── admin/
│ │ │ ├── channels.dart
│ │ │ ├── channels_add.dart
│ │ │ ├── channels_edit.dart
│ │ │ ├── dashboard.dart
│ │ │ ├── messages.dart
│ │ │ ├── models.dart
│ │ │ ├── models_add.dart
│ │ │ ├── models_edit.dart
│ │ │ ├── payments.dart
│ │ │ ├── recently_messages.dart
│ │ │ ├── rooms.dart
│ │ │ ├── user.dart
│ │ │ └── users.dart
│ │ ├── app_scaffold.dart
│ │ ├── auth/
│ │ │ ├── signin_or_signup.dart
│ │ │ ├── signin_screen.dart
│ │ │ └── signup_screen.dart
│ │ ├── balance/
│ │ │ ├── free_statistics.dart
│ │ │ ├── payment.dart
│ │ │ ├── payment_history.dart
│ │ │ ├── price_block.dart
│ │ │ ├── quota_usage_details.dart
│ │ │ ├── quota_usage_statistics.dart
│ │ │ ├── web/
│ │ │ │ ├── payment_element.dart
│ │ │ │ └── payment_element_web.dart
│ │ │ ├── web_payment_proxy.dart
│ │ │ └── web_payment_result.dart
│ │ ├── chat/
│ │ │ ├── character_chat.dart
│ │ │ ├── character_create.dart
│ │ │ ├── character_edit.dart
│ │ │ ├── characters.dart
│ │ │ ├── component/
│ │ │ │ ├── character_box.dart
│ │ │ │ ├── group_avatar.dart
│ │ │ │ ├── group_empty.dart
│ │ │ │ ├── model_switcher.dart
│ │ │ │ └── stop_button.dart
│ │ │ ├── group/
│ │ │ │ ├── chat.dart
│ │ │ │ ├── create.dart
│ │ │ │ └── edit.dart
│ │ │ ├── home.dart
│ │ │ ├── home_chat.dart
│ │ │ └── home_chat_history.dart
│ │ ├── component/
│ │ │ ├── account_quota_card.dart
│ │ │ ├── advanced_button.dart
│ │ │ ├── animated_cursor.dart
│ │ │ ├── attached_button_panel.dart
│ │ │ ├── audio_player.dart
│ │ │ ├── avatar_selector.dart
│ │ │ ├── background_container.dart
│ │ │ ├── bottom_sheet_box.dart
│ │ │ ├── button.dart
│ │ │ ├── chat/
│ │ │ │ ├── chat_bubble.dart
│ │ │ │ ├── chat_input.dart
│ │ │ │ ├── chat_input_button.dart
│ │ │ │ ├── chat_preview.dart
│ │ │ │ ├── chat_share.dart
│ │ │ │ ├── empty.dart
│ │ │ │ ├── enhanced_selectable_text.dart
│ │ │ │ ├── file_upload.dart
│ │ │ │ ├── help_tips.dart
│ │ │ │ ├── markdown/
│ │ │ │ │ ├── citation.dart
│ │ │ │ │ ├── code.dart
│ │ │ │ │ ├── latex/
│ │ │ │ │ │ ├── latex_block_syntax.dart
│ │ │ │ │ │ ├── latex_element_builder.dart
│ │ │ │ │ │ └── latex_inline_syntax.dart
│ │ │ │ │ └── latex.dart
│ │ │ │ ├── markdown.dart
│ │ │ │ ├── message_state_manager.dart
│ │ │ │ ├── role_avatar.dart
│ │ │ │ ├── search_result.dart
│ │ │ │ ├── thinking_card.dart
│ │ │ │ └── voice_record.dart
│ │ │ ├── chat_tools_button.dart
│ │ │ ├── column_block.dart
│ │ │ ├── credit.dart
│ │ │ ├── dialog.dart
│ │ │ ├── effect/
│ │ │ │ └── glass.dart
│ │ │ ├── enhanced_button.dart
│ │ │ ├── enhanced_error.dart
│ │ │ ├── enhanced_input.dart
│ │ │ ├── enhanced_popup_menu.dart
│ │ │ ├── enhanced_textfield.dart
│ │ │ ├── file_preview.dart
│ │ │ ├── gallery_item_share.dart
│ │ │ ├── global_alert.dart
│ │ │ ├── gradient_style.dart
│ │ │ ├── group_list_widget.dart
│ │ │ ├── icon_box.dart
│ │ │ ├── icon_box_button.dart
│ │ │ ├── image.dart
│ │ │ ├── image_action.dart
│ │ │ ├── image_preview.dart
│ │ │ ├── invite_card.dart
│ │ │ ├── item_selector.dart
│ │ │ ├── item_selector_search.dart
│ │ │ ├── loading.dart
│ │ │ ├── message_box.dart
│ │ │ ├── model_indicator.dart
│ │ │ ├── model_item.dart
│ │ │ ├── multi_item_selector.dart
│ │ │ ├── notify_message.dart
│ │ │ ├── pagination.dart
│ │ │ ├── password_field.dart
│ │ │ ├── prompt_tags_selector.dart
│ │ │ ├── random_avatar.dart
│ │ │ ├── room_card.dart
│ │ │ ├── rotating_widget.dart
│ │ │ ├── select_mode_toolbar.dart
│ │ │ ├── share.dart
│ │ │ ├── sliver_component.dart
│ │ │ ├── social_icon.dart
│ │ │ ├── take_photo.dart
│ │ │ ├── theme/
│ │ │ │ ├── custom_size.dart
│ │ │ │ ├── custom_theme.dart
│ │ │ │ └── theme.dart
│ │ │ ├── transition_resolver.dart
│ │ │ ├── verify_code_input.dart
│ │ │ ├── video_player.dart
│ │ │ ├── weak_text_button.dart
│ │ │ └── windows.dart
│ │ ├── creative_island/
│ │ │ ├── draw/
│ │ │ │ ├── artistic_qr.dart
│ │ │ │ ├── artistic_wordart.dart
│ │ │ │ ├── components/
│ │ │ │ │ ├── artistic_style_selector.dart
│ │ │ │ │ ├── box.dart
│ │ │ │ │ ├── content_preview.dart
│ │ │ │ │ ├── creative_item.dart
│ │ │ │ │ ├── image_selector.dart
│ │ │ │ │ ├── image_size.dart
│ │ │ │ │ └── image_style_selector.dart
│ │ │ │ ├── data/
│ │ │ │ │ └── draw_history_datasource.dart
│ │ │ │ ├── draw_create.dart
│ │ │ │ ├── draw_list.dart
│ │ │ │ ├── draw_result.dart
│ │ │ │ └── image_edit_direct.dart
│ │ │ ├── gallery/
│ │ │ │ ├── components/
│ │ │ │ │ └── image_card.dart
│ │ │ │ ├── data/
│ │ │ │ │ └── gallery_datasource.dart
│ │ │ │ ├── gallery.dart
│ │ │ │ └── gallery_item.dart
│ │ │ ├── my_creation.dart
│ │ │ └── my_creation_item.dart
│ │ ├── custom_scaffold.dart
│ │ ├── data/
│ │ │ ├── chat_history_datasource.dart
│ │ │ ├── group_message_datasource.dart
│ │ │ └── notification_datasource.dart
│ │ ├── drawer.dart
│ │ ├── home.dart
│ │ ├── lab/
│ │ │ ├── avatar_selector.dart
│ │ │ ├── creative_models.dart
│ │ │ ├── draw_board.dart
│ │ │ ├── prompt.dart
│ │ │ └── user_center.dart
│ │ └── setting/
│ │ ├── account_security.dart
│ │ ├── article.dart
│ │ ├── background_selector.dart
│ │ ├── bind_phone_page.dart
│ │ ├── change_password.dart
│ │ ├── custom_home_models.dart
│ │ ├── destroy_account.dart
│ │ ├── diagnosis.dart
│ │ ├── notification.dart
│ │ ├── openai_setting.dart
│ │ ├── retrieve_password_screen.dart
│ │ ├── setting_screen.dart
│ │ └── user_api_keys.dart
│ └── repo/
│ ├── api/
│ │ ├── admin/
│ │ │ ├── channels.dart
│ │ │ ├── models.dart
│ │ │ ├── payment.dart
│ │ │ └── users.dart
│ │ ├── article.dart
│ │ ├── creative.dart
│ │ ├── image_model.dart
│ │ ├── info.dart
│ │ ├── keys.dart
│ │ ├── model.dart
│ │ ├── notification.dart
│ │ ├── page.dart
│ │ ├── payment.dart
│ │ ├── quota.dart
│ │ ├── room_gallery.dart
│ │ └── user.dart
│ ├── api_server.dart
│ ├── cache_repo.dart
│ ├── chat_message_repo.dart
│ ├── creative_island_repo.dart
│ ├── data/
│ │ ├── cache_data.dart
│ │ ├── chat_history.dart
│ │ ├── chat_message_data.dart
│ │ ├── creative_island_data.dart
│ │ ├── room_data.dart
│ │ └── settings_data.dart
│ ├── deepai_repo.dart
│ ├── model/
│ │ ├── chat_history.dart
│ │ ├── chat_message.dart
│ │ ├── creative_island_history.dart
│ │ ├── group.dart
│ │ ├── message.dart
│ │ ├── misc.dart
│ │ ├── model.dart
│ │ └── room.dart
│ ├── openai_repo.dart
│ ├── settings_repo.dart
│ └── stabilityai_repo.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── nginx.conf
├── pubspec.yaml
├── scripts/
│ ├── go.mod
│ ├── go.sum
│ ├── macos-icon-replace.sh
│ └── main.go
├── web/
│ ├── index.html
│ ├── manifest.json
│ ├── splash/
│ │ ├── splash.js
│ │ └── style.css
│ ├── sqflite_sw.js
│ └── sqlite3.wasm
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/build_windows_app.yml
================================================
name: Build Windows app
on:
push:
branches:
- main
- develop
- main-pc
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Flutter
uses: subosito/flutter-action@v2.10.0
with:
flutter-version: "3.19.2" # Set flutter version here
- name: Build Windows app
#run: flutter build windows --release
run: dart run msix:create --release -v --output-path build/windows/runner --output-name AIdea --install-certificate false
# - name: Copy dependencies
# run: copy .\windows\sqlite3.dll .\build\windows\runner\Release\
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: aidea
path: build/windows/runner/AIdea.msix
================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
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
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# 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
Makefile.local
================================================
FILE: .metadata
================================================
# 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.
version:
revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
channel: stable
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
- platform: android
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
- platform: ios
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
- platform: linux
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
- platform: macos
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
- platform: web
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
- platform: windows
create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0
# 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'
================================================
FILE: AppRun
================================================
#!/bin/sh
cd "$(dirname "$0")"
exec ./askaide
================================================
FILE: Dockerfile
================================================
FROM nginx:1.25
COPY build/web/ /data/webroot
COPY nginx.conf /etc/nginx/conf.d/default.conf
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2023 管宜尧
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: Makefile
================================================
ipa:
flutter build ipa --no-tree-shake-icons --release
open build/ios/ipa
run:
flutter run --release
build-all: build-android ipa build-dmg
rm -fr build/release
mkdir -p build/release
mv build/app/outputs/flutter-apk/app-release.apk build/release/aidea-android.apk
mv build/ios/ipa/askaide.ipa build/release/aidea-ios.ipa
mv build/macos/Build/Products/Package/AIdea-Installer.dmg build/release/aidea-macos.dmg
open build/release
build-android:
flutter build apk --release --no-tree-shake-icons
build-and-sync-android: build-android
mv build/app/outputs/flutter-apk/app-release.apk /Users/mylxsw/ResilioSync/ResilioSync/临时文件/aidea-release.apk
build-macos:
flutter build macos --no-tree-shake-icons --release
codesign -f -s "Developer ID Application: YIYAO GUAN (N95437SZ2A)" build/macos/Build/Products/Release/AIdea.app
build-appimage:
flutter build linux --no-tree-shake-icons --release
mkdir -p aidea_app.AppDir
cp -r build/linux/x64/release/bundle/* aidea_app.AppDir
cp assets/app.png aidea_app.AppDir/
cp AppRun aidea_app.AppDir/
cp askaide.desktop aidea_app.AppDir/
appimagetool aidea_app.AppDir/
build-dmg: build-macos
rm -fr build/macos/Build/Products/Package
mkdir -p build/macos/Build/Products/Package && cp -r build/macos/Build/Products/Release/AIdea.app build/macos/Build/Products/Package
create-dmg --volname "AIdea Installer" \
--volicon "install.icns" \
--background "background.jpg" \
--window-pos 200 120 \
--window-size 600 320 \
--icon-size 100 \
--icon "AIdea.app" 170 130 \
--hide-extension "AIdea.app" \
--app-drop-link 430 130 \
--sandbox-safe \
--no-internet-enable \
"build/macos/Build/Products/Package/AIdea-Installer.dmg" \
"build/macos/Build/Products/Package"
open build/macos/Build/Products/Package/
build-web:
#flutter build web --web-renderer canvaskit --release --dart-define=FLUTTER_WEB_CANVASKIT_URL=https://resources.aicode.cc/canvaskit/
flutter build web --web-renderer canvaskit --release
cd scripts && go run main.go ../build/web/main.dart.js && cd ..
build-web-samehost:
flutter build web --web-renderer canvaskit --release --dart-define=API_SERVER_URL=/
cd scripts && go run main.go ../build/web/main.dart.js && cd ..
deploy-web: build-web
cd build && tar -zcvf web.tar.gz web
scp build/web.tar.gz huawei-1:/data/webroot
ssh huawei-1 "cd /data/webroot && tar -zxvf web.tar.gz && rm -rf web.tar.gz app && mv web app"
rm -fr build/web.tar.gz
.PHONY: run build-android build-macos ipa build-web-samehost build-web deploy-web build-dmg build-all build-and-sync-android
================================================
FILE: README.md
================================================
# AIdea - AI Chat, Collaboration & Image Generation
English | [中文](./README.zh-CN.md)
[](https://app.fossa.com/projects/custom%2B39727%2Fgithub.com%2Fmylxsw%2Faidea?ref=badge_shield)


<a href="https://trendshift.io/repositories/1013" target="_blank"><img src="https://trendshift.io/api/badge/repositories/1013" alt="mylxsw%2Faidea | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
An APP that integrates mainstream large language models and image generation models, built with Flutter, with fully open-source code.
Download & Try:
https://aidea.aicode.cc
Open Source Repositories:
- Client: https://github.com/mylxsw/aidea
- Server: https://github.com/mylxsw/aidea-server
- Docker Deployment: https://github.com/mylxsw/aidea-docker
## Development & Build Environment
The default branch `main` is the v2 version, currently under active development. If you need to self-host, please switch to the [v1.x](https://github.com/mylxsw/aidea/tree/v1.x) branch.
```bash
git checkout v1.x
```
To set up a development environment for compiling and packaging the APP, you can refer to the following articles (more articles will be added over time):
- [AIdea Development Environment Tutorial (1): Flutter Frontend Setup](https://mp.weixin.qq.com/s/bgAIH6s7t5IREusK_WtpRg)
- [AIdea Development Environment Tutorial (2): Golang Server Setup](https://mp.weixin.qq.com/s?__biz=MzA3NTU1NDk4Mg==&mid=2454663711&idx=1&sn=c2c66abc20f8e0900afe645ff1f552ac&chksm=88d55bd6bfa2d2c063ea15a4e8864c197009b49233c710b85725f1aa946836e15a26439c69a7&scene=178&cur_album_id=3204997940193296389#rd)
- [AIdea Development Environment Tutorial (3): Windows Build Environment Setup](https://mp.weixin.qq.com/s?__biz=MzA3NTU1NDk4Mg==&mid=2454663731&idx=1&sn=2aa4841daeb8dc4132e8abe63f585996&chksm=88d55bfabfa2d2ecce8224dcf23da6f911d3d8324121d141fd5c0324197c6f4845dd63639ac2&scene=178&cur_album_id=3204997940193296389#rd)
- [Flutter App Windows Installer Creation Tutorial](https://mp.weixin.qq.com/s?__biz=MzA3NTU1NDk4Mg==&mid=2454663689&idx=1&sn=73c93edd9ddacb2d4c36061cc79be059&chksm=88d55bc0bfa2d2d6ecaa7979835431467105d9572953f1e96c0f735df3fe60d4f6d6137f041d&scene=178&cur_album_id=3204997940193296389#rd)
> Some users encounter build failures, which can be very frustrating. This is not a bug -- it is a known characteristic of Flutter. Build failures are common as the Flutter version changes.
> To be safe, you can refer to my local environment configuration:
>
> 
## Self-Hosting / Private Deployment
If you do not want to use the managed cloud service, you can deploy the server yourself. [See deployment instructions here](https://github.com/mylxsw/aidea-server/blob/main/docs/deploy.md).
If you prefer not to set it up yourself, you can contact me for assisted deployment. See [VIP Deployment Service](https://github.com/mylxsw/aidea-server/blob/main/docs/deploy-vip.md) for details.
## Community & Support
- WeChat Tech Group: Add WeChat ID `x-prometheus` as a friend for an invitation to the group.
- WeChat Official Account:
<img src="https://github.com/mylxsw/aidea-server/assets/2330911/376a3b9f-eacd-45c6-9630-39eb720ba097" width="500" />
## Screenshots
Mobile

MacOS

Windows

## License
MIT
Copyright (c) 2025, mylxsw
================================================
FILE: README.zh-CN.md
================================================
# AIdea - AI 聊天、协作、图像生成
[English](./README.md) | 中文
[](https://app.fossa.com/projects/custom%2B39727%2Fgithub.com%2Fmylxsw%2Faidea?ref=badge_shield)


<a href="https://trendshift.io/repositories/1013" target="_blank"><img src="https://trendshift.io/api/badge/repositories/1013" alt="mylxsw%2Faidea | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
一款集成了主流大语言模型以及绘图模型的 APP, 采用 Flutter 开发,代码完全开源。
下载体验地址:
https://aidea.aicode.cc
开源代码:
- 客户端:https://github.com/mylxsw/aidea
- 服务端:https://github.com/mylxsw/aidea-server
- Docker 部署:https://github.com/mylxsw/aidea-docker
## 开发、编译运行环境
默认分支 `main` 是 v2 版本,当前正在开发中,如需自己部署,请切换到 [v1.x](https://github.com/mylxsw/aidea/tree/v1.x) 分支。
```bash
git checkout v1.x
```
搭建开发环境,用来编译和打包 APP,可以参考下面的文章,更多文章后面有时间了会持续更新。
- [AIdea 项目开发环境部署教程(一)前端 Flutter 环境搭建](https://mp.weixin.qq.com/s/bgAIH6s7t5IREusK_WtpRg)
- [AIdea 项目开发环境部署教程(二)服务端 Golang 环境搭建](https://mp.weixin.qq.com/s?__biz=MzA3NTU1NDk4Mg==&mid=2454663711&idx=1&sn=c2c66abc20f8e0900afe645ff1f552ac&chksm=88d55bd6bfa2d2c063ea15a4e8864c197009b49233c710b85725f1aa946836e15a26439c69a7&scene=178&cur_album_id=3204997940193296389#rd)
- [AIdea 项目开发环境部署教程(三)Windows 编译环境搭建](https://mp.weixin.qq.com/s?__biz=MzA3NTU1NDk4Mg==&mid=2454663731&idx=1&sn=2aa4841daeb8dc4132e8abe63f585996&chksm=88d55bfabfa2d2ecce8224dcf23da6f911d3d8324121d141fd5c0324197c6f4845dd63639ac2&scene=178&cur_album_id=3204997940193296389#rd)
- [Flutter 应用 Windows 安装包创建教程](https://mp.weixin.qq.com/s?__biz=MzA3NTU1NDk4Mg==&mid=2454663689&idx=1&sn=73c93edd9ddacb2d4c36061cc79be059&chksm=88d55bc0bfa2d2d6ecaa7979835431467105d9572953f1e96c0f735df3fe60d4f6d6137f041d&scene=178&cur_album_id=3204997940193296389#rd)
> 有些小伙伴在编译的时候总是失败,非常令人抓狂,这并不是什么问题,而是 Flutter 特有的特性,随着 Flutter 版本的变化,编译失败是常态。
> 保险起见,你可以参考我的本地环境配置:
>
> 
## 私有化部署
如果你不想使用托管的云服务,可以自己部署服务端,[部署请看这里](https://github.com/mylxsw/aidea-server/blob/main/docs/deploy.md)。
不想自己折腾,可以找我来帮你部署,详情参考 [服务器代部署说明](https://github.com/mylxsw/aidea-server/blob/main/docs/deploy-vip.md)。
## 技术交流
- 微信技术交流群:请添加微信号 `x-prometheus` 为好友,拉你进群。
- 微信公众号
<img src="https://github.com/mylxsw/aidea-server/assets/2330911/376a3b9f-eacd-45c6-9630-39eb720ba097" width="500" />
## 产品截图
移动端

MacOS 端

Windows 端

## License
MIT
Copyright (c) 2025, mylxsw
================================================
FILE: analysis_options.yaml
================================================
# 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-lang.github.io/linter/lints/index.html.
#
# 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
================================================
FILE: android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks
================================================
FILE: android/app/build.gradle
================================================
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"
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
namespace 'cc.aicode.flutter.askaide.askaide'
compileSdkVersion flutter.compileSdkVersion
// ndkVersion flutter.ndkVersion
ndkVersion "27.0.12077973"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "cc.aicode.flutter.askaide.askaide"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
// minSdkVersion flutter.minSdkVersion
minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode flutter.versionCode
versionName flutterVersionName
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
flutter {
source '../..'
}
================================================
FILE: android/app/proguard-rules.pro
================================================
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivity$g
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivityStarter$Args
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivityStarter$Error
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivityStarter
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningEphemeralKeyProvider
================================================
FILE: android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cc.aicode.flutter.askaide.askaide">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cc.aicode.flutter.askaide.askaide">
<application
android:label="AIdea"
android:name="${applicationName}"
android:icon="@mipmap/launcher_icon"
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="${applicationId}.FlutterActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="${applicationId}"
android:path="/"
android:scheme="wechatextmsg" />
</intent-filter>
</activity>
<!-- Set up the Sign in with Apple activity, such that it's callable from the browser-redirect -->
<activity
android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="signinwithapple" />
<data android:path="callback" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<meta-data
android:name="weChatAppId"
android:value="wx52cc036cc770406d" />
</application>
<queries>
<intent>
<action android:name="${applicationId}.FlutterActivity" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data
android:host="${applicationId}"
android:path="/"
android:scheme="wechatextmsg" />
</intent>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
================================================
FILE: android/app/src/main/kotlin/cc/aicode/flutter/askaide/askaide/MainActivity.kt
================================================
package cc.aicode.flutter.askaide.askaide
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="Theme.MaterialComponents">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="Theme.MaterialComponents">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cc.aicode.flutter.askaide.askaide">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/build.gradle
================================================
allprojects {
repositories {
google()
mavenCentral()
}
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
if (project.hasProperty("android")) {
project.android {
compileSdkVersion = 34
}
}
}
}
}
rootProject.buildDir = "../build"
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
kotlin.jvm.target.validation.mode = IGNORE
================================================
FILE: android/settings.gradle
================================================
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return 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.7.2' apply false
id "org.jetbrains.kotlin.android" version "1.9.20" apply false
}
include ":app"
================================================
FILE: askaide.desktop
================================================
[Desktop Entry]
Version=1.0
Name=Ask aide
Comment=Ask aide!
Icon=app
Exec=askaide %U
Terminal=false
Type=Application
Categories=Utility;
Keywords=Internet;
StartupNotify=false
================================================
FILE: assets/lottie/empty_status.json
================================================
{"v":"4.5.9","fr":25,"ip":0,"op":100,"w":248,"h":187,"ddd":0,"assets":[],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"\rtail","ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[21],"e":[-60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":12,"s":[-60],"e":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":25,"s":[21],"e":[-60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":37,"s":[-60],"e":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":50,"s":[21],"e":[-60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":62,"s":[-60],"e":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":74,"s":[21],"e":[-60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":87,"s":[-60],"e":[21]},{"t":99}]},"p":{"a":0,"k":[80,44.429,0]},"a":{"a":0,"k":[8.473,9.453,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.739,1.217],[0,0],[2.934,-2.055],[0.434,-0.631],[0.467,0.666],[0,0],[-2.054,-2.934],[-1.467,-0.418],[0,0]],"o":[[0,0],[1.521,0.11],[2.933,-2.055],[0,0],[-0.666,0.466],[-0.192,-0.741],[-2.054,-2.934],[0,0],[1.218,1.738],[0,0],[0,0]],"v":[[-0.161,5.232],[-0.161,5.232],[5.32,4.011],[8.702,-2.465],[1.462,-1.499],[-0.177,0.187],[-1.14,-1.958],[-7.614,-5.342],[-6.649,1.901],[-1.916,4.923],[-1.916,4.923]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.769,0.769,0.851,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[8.952,5.591],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"\reye","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[145.857,82.715,0]},"a":{"a":0,"k":[5.964,5.965,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":42,"s":[100,100,100],"e":[100,1,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":45,"s":[100,1,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":48,"s":[100,100,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":93,"s":[100,100,100],"e":[100,1,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":96,"s":[100,1,100],"e":[100,100,100]},{"t":99}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.156,0],[0,-3.156],[3.156,0],[0,3.156]],"o":[[3.156,0],[0,3.156],[-3.156,0],[0,-3.156]],"v":[[0,-5.715],[5.714,-0.001],[0,5.715],[-5.714,-0.001]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.671,0.671,0.761,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[5.964,5.965],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"\reyes white","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[143.714,82.714,0]},"a":{"a":0,"k":[11.679,11.678,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.312,0],[0,6.312],[6.312,0],[0,-6.311]],"o":[[6.312,0],[0,-6.311],[-6.312,0],[0,6.312]],"v":[[0,11.428],[11.429,-0.001],[0,-11.428],[-11.429,-0.001]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[11.679,11.678],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"\rbody","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[123.719,72.664,0]},"a":{"a":0,"k":[60.153,37.965,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[31.5,0],[10.189,-7.981],[1.68,1.422],[0,0],[0,0],[4.418,-6.529],[0,-12.88],[0,0],[-3.015,-6.029],[0,0],[-12.453,0],[-6.911,9.934]],"o":[[-13.946,0],[-1.536,1.204],[0,0],[0,0],[-0.153,2.463],[-6.908,9.775],[0,0],[10.063,-5.593],[0,0],[9.428,-2.285],[20.38,0],[-2.476,-30.863]],"v":[[0.097,-37.715],[-36.872,-24.975],[-42.158,-26.982],[-43.403,-27.495],[-44.57,-27.098],[-48.937,-12.301],[-59.903,22.286],[-59.499,29.285],[-33.617,30.857],[-1.617,30.857],[23.526,37.715],[59.903,17.423]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.769,0.769,0.851,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[60.153,37.965],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"\rfin","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[104.536,103.099,0]},"a":{"a":0,"k":[24.733,0.25,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[100,100,100],"e":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[100,70,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":12,"s":[100,100,100],"e":[100,56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":18,"s":[100,56,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":24,"s":[100,100,100],"e":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":30,"s":[100,70,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":36,"s":[100,100,100],"e":[100,56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":43,"s":[100,56,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":49,"s":[100,100,100],"e":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":55,"s":[100,70,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":61,"s":[100,100,100],"e":[100,56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":67,"s":[100,56,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":74,"s":[100,100,100],"e":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":80,"s":[100,70,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":87,"s":[100,100,100],"e":[100,56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":94,"s":[100,56,100],"e":[100,100,100]},{"t":100}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[15.429,0],[3.714,7.429]],"o":[[-9.429,2.286],[-12,0],[0,0]],"v":[[21,-8.572],[-9,8.572],[-11,-8.572]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.769,0.769,0.851,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[21.25,8.822],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"\rbelly5","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[88.286,85.293,0]},"a":{"a":0,"k":[24.536,34.528,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[18.68,0.296],[2.348,-3.47],[0,-12.88],[-2.993,-7.135],[-3.347,0],[0,18.935]],"o":[[-0.485,2.668],[-6.908,9.775],[0,8.221],[3.058,0.894],[18.935,0],[0,-18.751]],"v":[[-9.448,-34.279],[-13.32,-24.878],[-24.286,9.708],[-19.636,32.896],[-10,34.279],[24.286,-0.007]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.973,0.973,0.988,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[24.536,34.528],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"\rbelly4","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[98.286,85.659,0]},"a":{"a":0,"k":[34.536,44.162,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[20.602,3.796],[2.903,-2.274],[1.714,0.858],[6.177,-9.127],[0,-12.88],[-5.829,-9.25],[-5.292,0],[0,24.458]],"o":[[-3.298,1.715],[-2.142,1.678],[-1.714,-0.857],[-6.908,9.775],[0,11.742],[4.705,1.702],[24.458,0],[0,-21.701]],"v":[[-1.929,-43.912],[-11.254,-37.921],[-18.286,-41.231],[-23.32,-25.246],[-34.286,9.341],[-25.071,41.278],[-10,43.912],[34.286,-0.373]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.945,0.945,0.973,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[34.536,44.162],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"\rbelly3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[108.286,87.383,0]},"a":{"a":0,"k":[44.535,52.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[19.58,8.198],[9.016,-7.063],[1.714,0.857],[6.178,-9.128],[0,-12.88],[-10.446,-10.797],[-6.088,0],[0,29.981]],"o":[[-12.096,0.951],[-2.141,1.677],[-1.715,-0.857],[-6.907,9.775],[0,16.21],[5.464,1.848],[29.982,0],[0,-22.556]],"v":[[10.948,-52.189],[-21.255,-39.644],[-28.286,-42.954],[-33.321,-26.969],[-44.286,7.617],[-27.4,49.323],[-10.001,52.189],[44.286,-2.097]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.91,0.914,0.961,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[44.535,52.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"\rbelly2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[118.286,92.286,0]},"a":{"a":0,"k":[54.535,57.536,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,35.504],[7.996,10.717],[13.435,0],[10.189,-7.981],[1.714,0.857],[6.177,-9.128],[0,-12.879],[-19.548,-9.89],[-3.867,0]],"o":[[0,-14.399],[-10.001,-7.459],[-13.946,0],[-2.141,1.677],[-1.715,-0.857],[-6.907,9.775],[0,23.406],[3.679,0.655],[35.504,0]],"v":[[54.286,-7],[41.553,-45.409],[5.715,-57.286],[-31.255,-44.547],[-38.286,-47.857],[-43.321,-31.872],[-54.286,2.714],[-21.327,56.27],[-10.001,57.286]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.886,0.886,0.937,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[54.535,57.536],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"\rbelly1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[124,95,0]},"a":{"a":0,"k":[60.25,60.25,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-33.137,0],[0,33.137],[33.137,0],[10.189,-7.981],[1.714,0.857],[6.177,-9.127],[0,-12.88]],"o":[[33.137,0],[0,-33.137],[-13.946,0],[-2.141,1.677],[-1.714,-0.858],[-6.908,9.776],[0,33.137]],"v":[[0,60],[60,0],[0,-60],[-36.969,-47.261],[-44,-50.571],[-49.034,-34.587],[-60,0]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.839,0.843,0.906,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[60.25,60.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":750,"st":0,"bm":0,"sr":1}]}
================================================
FILE: build-win-msix.bat
================================================
dart run msix:create --release -v --output-path build/windows/runner --output-name AIdea
================================================
FILE: build-win.bat
================================================
flutter build windows --release
================================================
FILE: devtools_options.yaml
================================================
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
================================================
FILE: docker-build.sh
================================================
#!/usr/bin/env bash
VERSION=1.0.14
rm -fr build/web
flutter build web --web-renderer canvaskit --release --dart-define=API_SERVER_URL=/
docker buildx build --platform=linux/amd64,linux/arm64 -t mylxsw/aidea-web:$VERSION . --push
================================================
FILE: flutter_launcher_icons.yaml
================================================
# flutter pub run flutter_launcher_icons
flutter_launcher_icons:
image_path: "assets/app.png"
android: "launcher_icon"
# image_path_android: "assets/icon/icon.png"
min_sdk_android: 21 # android min sdk min:16, default 21
# adaptive_icon_background: "assets/icon/background.png"
# adaptive_icon_foreground: "assets/icon/foreground.png"
# adaptive_icon_monochrome: "assets/icon/monochrome.png"
ios: true
# image_path_ios: "assets/icon/icon.png"
remove_alpha_channel_ios: true
# image_path_ios_dark_transparent: "assets/icon/icon_dark.png"
# image_path_ios_tinted_grayscale: "assets/icon/icon_tinted.png"
# desaturate_tinted_to_grayscale_ios: true
web:
generate: true
# image_path: "path/to/image.png"
background_color: "#hexcode"
theme_color: "#hexcode"
windows:
generate: true
image_path: "assets/app-macos.png"
icon_size: 256 # min:48, max:256, default: 48
macos:
generate: true
image_path: "assets/app-macos.png"
================================================
FILE: install.iss
================================================
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "AIdea"
#define MyAppVersion "2.0.0"
#define MyAppPublisher "Shenzhen Gulu Artificial Intelligence Technology Co., Ltd."
#define MyAppURL "https://ai.aicode.cc/"
#define MyAppExeName "AIdea.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{F9E7E323-8BD4-46B3-ABEB-20C5CE03F5C7}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=C:\Users\mylxsw\Desktop
OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Installer
SetupIconFile=D:\Workstation\codes\aidea\app.ico
Compression=lzma
SolidCompression=yes
WizardStyle=modern
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
[Files]
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-console-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-console-l1-2-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-datetime-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-debug-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-errorhandling-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-fibers-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-file-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-file-l1-2-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-file-l2-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-handle-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-heap-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-interlocked-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-libraryloader-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-localization-l1-2-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-memory-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-namedpipe-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-processenvironment-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-processthreads-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-processthreads-l1-1-1.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-profile-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-rtlsupport-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-string-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-synch-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-synch-l1-2-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-sysinfo-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-timezone-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-core-util-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-conio-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-convert-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-environment-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-filesystem-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-heap-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-locale-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-math-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-multibyte-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-private-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-process-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-runtime-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-stdio-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-string-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-time-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-crt-utility-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-downlevel-kernel32-l2-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\api-ms-win-eventing-provider-l1-1-0.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\audioplayers_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\concrt140.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\d3dcompiler_47.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\file_saver_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\flutter_localization_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\flutter_tts_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\flutter_windows.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\libc++.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\libEGL.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\libGLESv2.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\libmpv-2.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\media_kit_libs_windows_video_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\media_kit_native_event_loop.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\media_kit_video_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\msvcp140.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\msvcp140_1.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\msvcp140_2.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\msvcp140_atomic_wait.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\msvcp140_codecvt_ids.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\record_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\screen_brightness_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\share_plus_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\sqlite3.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\ucrtbase.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\ucrtbased.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\url_launcher_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vccorlib140.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vccorlib140d.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vcruntime140.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vcruntime140_1.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vcruntime140_1d.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vcruntime140d.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vk_swiftshader.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\vulkan-1.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\zlib.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Workstation\codes\aidea\build\windows\x64\runner\Release\data\*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
================================================
FILE: ios/.gitignore
================================================
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3
================================================
FILE: ios/Flutter/AppFrameworkInfo.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>12.0</string>
</dict>
</plist>
================================================
FILE: ios/Flutter/Debug.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
================================================
FILE: ios/Flutter/Release.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
================================================
FILE: ios/Podfile
================================================
# Uncomment this line to define a global platform for your project
platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
================================================
FILE: ios/Runner/AppDelegate.swift
================================================
import UIKit
import Flutter
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
================================================
FILE: ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
================================================
FILE: ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "background.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "LaunchImage.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "LaunchImage@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "LaunchImage@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
================================================
# 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.
================================================
FILE: ios/Runner/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"></imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="3T2-ad-Qdv"/>
<constraint firstItem="tWc-Dq-wcI" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="RPx-PI-7Xg"/>
<constraint firstItem="tWc-Dq-wcI" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="SdS-ul-q2q"/>
<constraint firstAttribute="trailing" secondItem="tWc-Dq-wcI" secondAttribute="trailing" id="Swv-Gf-Rwn"/>
<constraint firstAttribute="trailing" secondItem="YRO-k0-Ey4" secondAttribute="trailing" id="TQA-XW-tRk"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="duK-uY-Gun"/>
<constraint firstItem="tWc-Dq-wcI" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="kV7-tw-vXt"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="xPn-NY-SIU"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="512" height="646"/>
<image name="LaunchBackground" width="1" height="1"/>
</resources>
</document>
================================================
FILE: ios/Runner/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
================================================
FILE: ios/Runner/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>AIdea</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>askaide</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>weixinURLParamsAPI</string>
<string>weixinULAPI</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsForMedia</key>
<true/>
</dict>
<key>NSCameraUsageDescription</key>
<string>Used to demonstrate image picker plugin</string>
<key>NSDocumentsFolderUsageDescription</key>
<string>$(PRODUCT_NAME) needs access to your documents folder to save your files.</string>
<key>NSMicrophoneUsageDescription</key>
<string>We need to access to the microphone to record audio file</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Used to demonstrate image picker plugin</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>To enable GPS location access for Exif data</string>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>
</dict>
</plist>
================================================
FILE: ios/Runner/Runner-Bridging-Header.h
================================================
#import "GeneratedPluginRegistrant.h"
================================================
FILE: ios/Runner/Runner.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:ai.aicode.cc</string>
</array>
</dict>
</plist>
================================================
FILE: ios/Runner.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
4AB86C8F0973565BB3C184F4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16B3CC3FDED8D8CC86722DEC /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
A5ECBA6F2A2B177200E3A820 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5ECBA6E2A2B177200E3A820 /* StoreKit.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
16B3CC3FDED8D8CC86722DEC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; 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>"; };
A5D102132A0AA8E200331391 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
A5ECBA6E2A2B177200E3A820 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
A6F16BE481E65688799479DB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
D5F820BBFB52D6BE21AD358D /* 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>"; };
EA2292F51AC4CF434D7A04AF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
4AB86C8F0973565BB3C184F4 /* Pods_Runner.framework in Frameworks */,
A5ECBA6F2A2B177200E3A820 /* StoreKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
652A687C2637E7BC60520D2C /* Frameworks */ = {
isa = PBXGroup;
children = (
A5ECBA6E2A2B177200E3A820 /* StoreKit.framework */,
16B3CC3FDED8D8CC86722DEC /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
F0FF12F5C5F28587D2089C68 /* Pods */,
652A687C2637E7BC60520D2C /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
A5D102132A0AA8E200331391 /* Runner.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
F0FF12F5C5F28587D2089C68 /* Pods */ = {
isa = PBXGroup;
children = (
D5F820BBFB52D6BE21AD358D /* Pods-Runner.debug.xcconfig */,
A6F16BE481E65688799479DB /* Pods-Runner.release.xcconfig */,
EA2292F51AC4CF434D7A04AF /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
5E113495E8126976AA1B9B6D /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
13DFE0107180EC2050B1ABEA /* [CP] Embed Pods Frameworks */,
8C0A97AF55BE760FDB31E756 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
13DFE0107180EC2050B1ABEA /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
5E113495E8126976AA1B9B6D /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
8C0A97AF55BE760FDB31E756 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = N95437SZ2A;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-l\"WechatOpenSDK\"",
"-l\"c++\"",
"-l\"sqlite3\"",
"-l\"sqlite3.0\"",
"-l\"z\"",
"-framework",
"\"AVFoundation\"",
"-framework",
"\"AVKit\"",
"-framework",
"\"AlipaySDK\"",
"-framework",
"\"CFNetwork\"",
"-framework",
"\"CoreGraphics\"",
"-framework",
"\"CoreMotion\"",
"-framework",
"\"CoreTelephony\"",
"-framework",
"\"CoreText\"",
"-framework",
"\"DKImagePickerController\"",
"-framework",
"\"DKPhotoGallery\"",
"-framework",
"\"Foundation\"",
"-framework",
"\"ImageIO\"",
"-framework",
"\"Mantle\"",
"-framework",
"\"Photos\"",
"-framework",
"\"QuartzCore\"",
"-framework",
"\"SDWebImage\"",
"-framework",
"\"SDWebImageWebPCoder\"",
"-framework",
"\"Security\"",
"-framework",
"\"SwiftyGif\"",
"-framework",
"\"SystemConfiguration\"",
"-framework",
"\"UIKit\"",
"-framework",
"\"WebKit\"",
"-framework",
"\"audioplayers_darwin\"",
"-framework",
"\"file_picker\"",
"-framework",
"\"file_saver\"",
"-framework",
"\"flutter_localization\"",
"-framework",
"\"flutter_native_splash\"",
"-framework",
"\"flutter_tts\"",
"-framework",
"\"fluwx\"",
"-framework",
"\"image_gallery_saver\"",
"-framework",
"\"in_app_purchase_storekit\"",
"-framework",
"\"libwebp\"",
"-framework",
"\"path_provider_foundation\"",
"-framework",
"\"share_plus\"",
"-framework",
"\"shared_preferences_foundation\"",
"-framework",
"\"sign_in_with_apple\"",
"-framework",
"\"sqflite\"",
"-framework",
"\"tobias\"",
"-framework",
"\"url_launcher_ios\"",
"-weak_framework",
"\"LinkPresentation\"",
"-ld64",
);
PRODUCT_BUNDLE_IDENTIFIER = cc.aicode.flutter.askaide.askaide;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = N95437SZ2A;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-l\"WechatOpenSDK\"",
"-l\"c++\"",
"-l\"sqlite3\"",
"-l\"sqlite3.0\"",
"-l\"z\"",
"-framework",
"\"AVFoundation\"",
"-framework",
"\"AVKit\"",
"-framework",
"\"AlipaySDK\"",
"-framework",
"\"CFNetwork\"",
"-framework",
"\"CoreGraphics\"",
"-framework",
"\"CoreMotion\"",
"-framework",
"\"CoreTelephony\"",
"-framework",
"\"CoreText\"",
"-framework",
"\"DKImagePickerController\"",
"-framework",
"\"DKPhotoGallery\"",
"-framework",
"\"Foundation\"",
"-framework",
"\"ImageIO\"",
"-framework",
"\"Mantle\"",
"-framework",
"\"Photos\"",
"-framework",
"\"QuartzCore\"",
"-framework",
"\"SDWebImage\"",
"-framework",
"\"SDWebImageWebPCoder\"",
"-framework",
"\"Security\"",
"-framework",
"\"SwiftyGif\"",
"-framework",
"\"SystemConfiguration\"",
"-framework",
"\"UIKit\"",
"-framework",
"\"WebKit\"",
"-framework",
"\"audioplayers_darwin\"",
"-framework",
"\"file_picker\"",
"-framework",
"\"file_saver\"",
"-framework",
"\"flutter_localization\"",
"-framework",
"\"flutter_native_splash\"",
"-framework",
"\"flutter_tts\"",
"-framework",
"\"fluwx\"",
"-framework",
"\"image_gallery_saver\"",
"-framework",
"\"in_app_purchase_storekit\"",
"-framework",
"\"libwebp\"",
"-framework",
"\"path_provider_foundation\"",
"-framework",
"\"share_plus\"",
"-framework",
"\"shared_preferences_foundation\"",
"-framework",
"\"sign_in_with_apple\"",
"-framework",
"\"sqflite\"",
"-framework",
"\"tobias\"",
"-framework",
"\"url_launcher_ios\"",
"-weak_framework",
"\"LinkPresentation\"",
"-ld64",
);
PRODUCT_BUNDLE_IDENTIFIER = cc.aicode.flutter.askaide.askaide;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = N95437SZ2A;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-l\"WechatOpenSDK\"",
"-l\"c++\"",
"-l\"sqlite3\"",
"-l\"sqlite3.0\"",
"-l\"z\"",
"-framework",
"\"AVFoundation\"",
"-framework",
"\"AVKit\"",
"-framework",
"\"AlipaySDK\"",
"-framework",
"\"CFNetwork\"",
"-framework",
"\"CoreGraphics\"",
"-framework",
"\"CoreMotion\"",
"-framework",
"\"CoreTelephony\"",
"-framework",
"\"CoreText\"",
"-framework",
"\"DKImagePickerController\"",
"-framework",
"\"DKPhotoGallery\"",
"-framework",
"\"Foundation\"",
"-framework",
"\"ImageIO\"",
"-framework",
"\"Mantle\"",
"-framework",
"\"Photos\"",
"-framework",
"\"QuartzCore\"",
"-framework",
"\"SDWebImage\"",
"-framework",
"\"SDWebImageWebPCoder\"",
"-framework",
"\"Security\"",
"-framework",
"\"SwiftyGif\"",
"-framework",
"\"SystemConfiguration\"",
"-framework",
"\"UIKit\"",
"-framework",
"\"WebKit\"",
"-framework",
"\"audioplayers_darwin\"",
"-framework",
"\"file_picker\"",
"-framework",
"\"file_saver\"",
"-framework",
"\"flutter_localization\"",
"-framework",
"\"flutter_native_splash\"",
"-framework",
"\"flutter_tts\"",
"-framework",
"\"fluwx\"",
"-framework",
"\"image_gallery_saver\"",
"-framework",
"\"in_app_purchase_storekit\"",
"-framework",
"\"libwebp\"",
"-framework",
"\"path_provider_foundation\"",
"-framework",
"\"share_plus\"",
"-framework",
"\"shared_preferences_foundation\"",
"-framework",
"\"sign_in_with_apple\"",
"-framework",
"\"sqflite\"",
"-framework",
"\"tobias\"",
"-framework",
"\"url_launcher_ios\"",
"-weak_framework",
"\"LinkPresentation\"",
"-ld64",
);
PRODUCT_BUNDLE_IDENTIFIER = cc.aicode.flutter.askaide.askaide;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
================================================
FILE: ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1510"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: ios/Runner.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
================================================
FILE: lib/bloc/account_bloc.dart
================================================
import 'package:askaide/helper/constant.dart';
import 'package:askaide/helper/http.dart';
import 'package:askaide/repo/api/user.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/settings_repo.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'account_event.dart';
part 'account_state.dart';
class AccountBloc extends Bloc<AccountEvent, AccountState> {
final SettingRepository settings;
AccountBloc(this.settings) : super(AccountInitial()) {
// 加载用户信息
on<AccountLoadEvent>((event, emit) async {
emit(AccountLoading());
final token = settings.get(settingAPIServerToken);
if (token != null && token != '') {
try {
final user = await APIServer().userInfo(cache: event.cache);
if (user != null) {
emit(AccountLoaded(user));
} else {
emit(AccountNeedSignIn());
}
} catch (e) {
emit(AccountLoaded(null, error: e));
}
} else {
emit(AccountNeedSignIn());
}
});
on<AccountSignOutEvent>((event, emit) async {
await settings.set(settingAPIServerToken, '');
await settings.set(settingUserInfo, '');
await HttpClient.cleanCache();
emit(AccountNeedSignIn());
});
on<AccountUpdateEvent>((event, emit) async {
try {
if (event.realname != null) {
await APIServer().updateUserRealname(realname: event.realname!);
}
if (event.avatarURL != null) {
await APIServer().updateUserAvatar(avatarURL: event.avatarURL!);
}
emit(AccountLoaded(await APIServer().userInfo(cache: false)));
} catch (e) {
emit(AccountLoaded(await APIServer().userInfo(cache: false), error: e));
}
});
}
}
================================================
FILE: lib/bloc/account_event.dart
================================================
part of 'account_bloc.dart';
@immutable
abstract class AccountEvent {}
class AccountLoadEvent extends AccountEvent {
final bool cache;
AccountLoadEvent({this.cache = true});
}
class AccountSignOutEvent extends AccountEvent {}
class AccountUpdateEvent extends AccountEvent {
final String? realname;
final String? avatarURL;
AccountUpdateEvent({this.realname, this.avatarURL});
}
================================================
FILE: lib/bloc/account_state.dart
================================================
part of 'account_bloc.dart';
@immutable
abstract class AccountState {}
class AccountInitial extends AccountState {}
class AccountLoading extends AccountState {}
class AccountLoaded extends AccountState {
final UserInfo? user;
final Object? error;
AccountLoaded(this.user, {this.error});
}
class AccountNeedSignIn extends AccountState {}
================================================
FILE: lib/bloc/admin_payment_bloc.dart
================================================
import 'package:askaide/repo/api/admin/payment.dart';
import 'package:askaide/repo/api/page.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'admin_payment_event.dart';
part 'admin_payment_state.dart';
class AdminPaymentBloc extends Bloc<AdminPaymentEvent, AdminPaymentState> {
AdminPaymentBloc() : super(AdminPaymentInitial()) {
on<AdminPaymentHistoriesLoadEvent>((event, emit) async {
final histories = await APIServer().adminPaymentHistories(
page: event.page,
perPage: event.perPage,
keyword: event.keyword,
);
emit(AdminPaymentHistoriesLoaded(histories));
});
}
}
================================================
FILE: lib/bloc/admin_payment_event.dart
================================================
part of 'admin_payment_bloc.dart';
@immutable
sealed class AdminPaymentEvent {}
class AdminPaymentHistoriesLoadEvent extends AdminPaymentEvent {
final int page;
final int perPage;
final String? keyword;
AdminPaymentHistoriesLoadEvent({
this.page = 1,
this.perPage = 20,
this.keyword,
});
}
================================================
FILE: lib/bloc/admin_payment_state.dart
================================================
part of 'admin_payment_bloc.dart';
@immutable
sealed class AdminPaymentState {}
final class AdminPaymentInitial extends AdminPaymentState {}
class AdminPaymentOperationResult extends AdminPaymentState {
final bool success;
final String message;
AdminPaymentOperationResult(this.success, this.message);
}
class AdminPaymentHistoriesLoaded extends AdminPaymentState {
final PagedData<AdminPaymentHistory> histories;
AdminPaymentHistoriesLoaded(this.histories);
}
================================================
FILE: lib/bloc/admin_room_bloc.dart
================================================
import 'package:askaide/repo/api/page.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/model/message.dart';
import 'package:askaide/repo/model/misc.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'admin_room_event.dart';
part 'admin_room_state.dart';
class AdminRoomBloc extends Bloc<AdminRoomEvent, AdminRoomState> {
AdminRoomBloc() : super(AdminRoomInitial()) {
on<AdminRoomsLoadEvent>((event, emit) async {
final rooms = await APIServer().adminUserRooms(userId: event.userId);
emit(AdminRoomsLoaded(rooms: rooms));
});
on<AdminRoomLoadEvent>((event, emit) async {
final room = await APIServer().adminUserRoom(
userId: event.userId,
roomId: event.roomId,
);
emit(AdminRoomLoaded(room: room));
});
on<AdminRoomRecentlyMessagesLoadEvent>((event, emit) async {
if (event.roomType == 4) {
final messages = await APIServer().adminUserRoomGroupMessages(
userId: event.userId, roomId: event.roomId);
emit(AdminRoomRecentlyMessagesLoaded(
messages: messages
.map((e) => Message(
e.role == 'user' ? Role.sender : Role.receiver,
e.message,
type: MessageType.text,
ts: e.createdAt,
model: e.model,
quotaConsumed: e.quotaConsumed,
tokenConsumed: e.tokenConsumed,
refId: e.pid,
id: e.id,
serverId: e.id,
))
.toList()));
} else {
final messages = await APIServer().adminUserRoomMessages(
userId: event.userId,
roomId: event.roomId,
);
emit(AdminRoomRecentlyMessagesLoaded(
messages: messages
.map((e) => Message(
e.role == 1 ? Role.sender : Role.receiver,
e.message,
type: MessageType.text,
ts: e.createdAt,
model: e.model,
quotaConsumed: e.quotaConsumed,
tokenConsumed: e.tokenConsumed,
refId: e.pid,
id: e.id,
serverId: e.id,
userId: e.userId,
roomId: e.roomId,
))
.toList()));
}
});
on<AdminRecentlyMessagesLoadEvent>((event, emit) async {
final messages = await APIServer().adminRecentlyMessages(
page: event.page,
perPage: event.perPage,
keyword: event.keyword,
);
emit(AdminRecentlyMessagesLoaded(PagedData(
data: messages.data
.map((e) => Message(
e.role == 1 ? Role.sender : Role.receiver,
e.message,
type: MessageType.text,
ts: e.createdAt,
model: e.model,
quotaConsumed: e.quotaConsumed,
tokenConsumed: e.tokenConsumed,
refId: e.pid,
id: e.id,
serverId: e.id,
userId: e.userId,
roomId: e.roomId,
))
.toList(),
page: messages.page,
perPage: messages.perPage,
total: messages.total,
lastPage: messages.lastPage,
)));
});
}
}
================================================
FILE: lib/bloc/admin_room_event.dart
================================================
part of 'admin_room_bloc.dart';
@immutable
sealed class AdminRoomEvent {}
class AdminRoomsLoadEvent extends AdminRoomEvent {
final int userId;
AdminRoomsLoadEvent({required this.userId});
}
class AdminRoomLoadEvent extends AdminRoomEvent {
final int userId;
final int roomId;
AdminRoomLoadEvent({required this.roomId, required this.userId});
}
class AdminRoomRecentlyMessagesLoadEvent extends AdminRoomEvent {
final int userId;
final int roomId;
final int roomType;
AdminRoomRecentlyMessagesLoadEvent({
required this.roomId,
required this.userId,
required this.roomType,
});
}
class AdminRecentlyMessagesLoadEvent extends AdminRoomEvent {
final int page;
final int perPage;
final String? keyword;
AdminRecentlyMessagesLoadEvent({
required this.page,
required this.perPage,
this.keyword,
});
}
================================================
FILE: lib/bloc/admin_room_state.dart
================================================
part of 'admin_room_bloc.dart';
@immutable
sealed class AdminRoomState {}
final class AdminRoomInitial extends AdminRoomState {}
final class AdminRoomsLoaded extends AdminRoomState {
final List<RoomInServer> rooms;
AdminRoomsLoaded({required this.rooms});
}
final class AdminRoomLoaded extends AdminRoomState {
final RoomInServer room;
AdminRoomLoaded({required this.room});
}
final class AdminRoomRecentlyMessagesLoaded extends AdminRoomState {
final List<Message> messages;
AdminRoomRecentlyMessagesLoaded({required this.messages});
}
class AdminRoomOperationResult extends AdminRoomState {
final bool success;
final String message;
AdminRoomOperationResult(this.success, this.message);
}
class AdminRecentlyMessagesLoaded extends AdminRoomState {
final PagedData<Message> messages;
AdminRecentlyMessagesLoaded(this.messages);
}
================================================
FILE: lib/bloc/background_image_bloc.dart
================================================
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/model/misc.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'background_image_event.dart';
part 'background_image_state.dart';
class BackgroundImageBloc
extends Bloc<BackgroundImageEvent, BackgroundImageState> {
BackgroundImageBloc() : super(BackgroundImageInitial()) {
on<BackgroundImageLoadEvent>((event, emit) async {
final images = await APIServer().backgrounds();
emit(BackgroundImageLoaded(images));
});
}
}
================================================
FILE: lib/bloc/background_image_event.dart
================================================
part of 'background_image_bloc.dart';
@immutable
abstract class BackgroundImageEvent {}
class BackgroundImageLoadEvent extends BackgroundImageEvent {}
================================================
FILE: lib/bloc/background_image_state.dart
================================================
part of 'background_image_bloc.dart';
@immutable
abstract class BackgroundImageState {}
class BackgroundImageInitial extends BackgroundImageState {}
class BackgroundImageLoaded extends BackgroundImageState {
final List<BackgroundImage> images;
BackgroundImageLoaded(this.images);
}
================================================
FILE: lib/bloc/bloc_manager.dart
================================================
// ignore_for_file: must_call_super
import 'package:askaide/bloc/chat_message_bloc.dart';
import 'package:askaide/helper/lru.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class ChatBlocManager {
static final ChatBlocManager _singleton = ChatBlocManager._internal();
factory ChatBlocManager() {
return _singleton;
}
ChatBlocManager._internal();
late final ChatMessageBloc Function(int roomId, {int? chatHistoryId})
blocBuilder;
init(ChatMessageBloc Function(int roomId, {int? chatHistoryId}) blocBuilder) {
this.blocBuilder = blocBuilder;
}
final LRUCache<String, ChatMessageBloc> _blocs = LRUCache(10);
ChatMessageBloc getBloc(int roomId, {int? chatHistoryId}) {
final key = '$roomId-$chatHistoryId';
if (_blocs.containsKey(key)) {
return _blocs.get(key)!;
} else {
final bloc = blocBuilder(roomId, chatHistoryId: chatHistoryId);
_blocs.put(key, bloc);
return bloc;
}
}
void dispose() {
_blocs.clear();
}
}
abstract class BlocExt<K, V> extends Bloc<K, V> implements Disposable {
BlocExt(super.initialState);
@override
void dispose() {
super.close();
}
@override
Future<void> close() async {
return;
}
}
================================================
FILE: lib/bloc/channel_bloc.dart
================================================
import 'package:askaide/repo/api/admin/channels.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'channel_event.dart';
part 'channel_state.dart';
class ChannelBloc extends Bloc<ChannelEvent, ChannelState> {
ChannelBloc() : super(ChannelInitial()) {
/// 加载所有渠道
on<ChannelsLoadEvent>((event, emit) async {
final channels = await APIServer().adminChannels();
emit(ChannelsLoaded(channels));
});
/// 加载单个渠道
on<ChannelLoadEvent>((event, emit) async {
final channel = await APIServer().adminChannel(id: event.channelId);
emit(ChannelLoaded(channel));
});
/// 创建渠道
on<ChannelCreateEvent>((event, emit) async {
try {
await APIServer().adminCreateChannel(event.req);
emit(ChannelOperationResult(true, '创建成功'));
} catch (e) {
emit(ChannelOperationResult(false, e.toString()));
}
});
/// 更新渠道
on<ChannelUpdateEvent>((event, emit) async {
try {
await APIServer().adminUpdateChannel(
id: event.channelId,
req: event.req,
);
emit(ChannelOperationResult(true, '更新成功'));
} catch (e) {
emit(ChannelOperationResult(false, e.toString()));
}
});
/// 删除渠道
on<ChannelDeleteEvent>((event, emit) async {
try {
await APIServer().adminDeleteChannel(id: event.channelId);
emit(ChannelOperationResult(true, '删除成功'));
} catch (e) {
emit(ChannelOperationResult(false, e.toString()));
}
});
}
}
================================================
FILE: lib/bloc/channel_event.dart
================================================
part of 'channel_bloc.dart';
@immutable
sealed class ChannelEvent {}
class ChannelsLoadEvent extends ChannelEvent {}
class ChannelLoadEvent extends ChannelEvent {
final int channelId;
ChannelLoadEvent(this.channelId);
}
class ChannelCreateEvent extends ChannelEvent {
final AdminChannelAddReq req;
ChannelCreateEvent(this.req);
}
class ChannelUpdateEvent extends ChannelEvent {
final int channelId;
final AdminChannelUpdateReq req;
ChannelUpdateEvent(this.channelId, this.req);
}
class ChannelDeleteEvent extends ChannelEvent {
final int channelId;
ChannelDeleteEvent(this.channelId);
}
================================================
FILE: lib/bloc/channel_state.dart
================================================
part of 'channel_bloc.dart';
@immutable
sealed class ChannelState {}
final class ChannelInitial extends ChannelState {}
class ChannelsLoaded extends ChannelState {
final List<AdminChannel> channels;
ChannelsLoaded(this.channels);
}
class ChannelLoaded extends ChannelState {
final AdminChannel channel;
ChannelLoaded(this.channel);
}
class ChannelOperationResult extends ChannelState {
final bool success;
final String message;
ChannelOperationResult(this.success, this.message);
}
================================================
FILE: lib/bloc/chat_chat_bloc.dart
================================================
import 'package:askaide/helper/constant.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/chat_message_repo.dart';
import 'package:askaide/repo/model/chat_history.dart';
import 'package:askaide/repo/model/misc.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'chat_chat_event.dart';
part 'chat_chat_state.dart';
class ChatChatBloc extends Bloc<ChatChatEvent, ChatChatState> {
final ChatMessageRepository _chatMessageRepository;
ChatChatBloc(this._chatMessageRepository) : super(ChatChatInitial()) {
// 加载最近的历史记录
on<ChatChatLoadRecentHistories>((event, emit) async {
final histories = await _chatMessageRepository.recentChatHistories(
event.count,
userId: APIServer().localUserID(),
);
emit(ChatChatRecentHistoriesLoaded(
histories: histories,
examples: const [],
));
});
// 删除历史记录
on<ChatChatDeleteHistory>((event, emit) async {
await _chatMessageRepository.deleteChatHistory(event.chatId);
add(ChatChatLoadRecentHistories());
});
}
}
================================================
FILE: lib/bloc/chat_chat_event.dart
================================================
part of 'chat_chat_bloc.dart';
@immutable
abstract class ChatChatEvent {}
class ChatChatLoadRecentHistories extends ChatChatEvent {
final int count;
ChatChatLoadRecentHistories({this.count = defaultChatHistoryCount});
}
class ChatChatNewChat extends ChatChatEvent {
final String text;
ChatChatNewChat(this.text);
}
class ChatChatDeleteHistory extends ChatChatEvent {
final int chatId;
ChatChatDeleteHistory(this.chatId);
}
================================================
FILE: lib/bloc/chat_chat_state.dart
================================================
part of 'chat_chat_bloc.dart';
@immutable
abstract class ChatChatState {}
class ChatChatInitial extends ChatChatState {}
class ChatChatRecentHistoriesLoaded extends ChatChatState {
final List<ChatHistory> histories;
final List<ChatExample>? examples;
ChatChatRecentHistoriesLoaded({this.histories = const [], this.examples});
}
================================================
FILE: lib/bloc/chat_event.dart
================================================
part of 'chat_message_bloc.dart';
@immutable
abstract class ChatMessageEvent {}
class ChatMessageReceivedEvent extends ChatMessageEvent {
final Message message;
ChatMessageReceivedEvent(this.message);
}
class ChatMessageSendEvent extends ChatMessageEvent {
final Message message;
final int? index;
final bool isResent;
final String? tempModel;
ChatMessageSendEvent(this.message,
{this.index, this.isResent = false, this.tempModel});
}
class ChatMessageGetRecentEvent extends ChatMessageEvent {
final int? chatHistoryId;
ChatMessageGetRecentEvent({this.chatHistoryId});
}
class ChatMessageClearAllEvent extends ChatMessageEvent {}
class ChatMessageBreakContextEvent extends ChatMessageEvent {}
class ChatMessageDeleteEvent extends ChatMessageEvent {
final List<int> ids;
final int? chatHistoryId;
ChatMessageDeleteEvent(this.ids, {this.chatHistoryId});
}
class ChatMessageStopEvent extends ChatMessageEvent {}
================================================
FILE: lib/bloc/chat_message_bloc.dart
================================================
import 'dart:convert';
import 'package:askaide/bloc/bloc_manager.dart';
import 'package:askaide/helper/ability.dart';
import 'package:askaide/helper/error.dart';
import 'package:askaide/helper/logger.dart';
import 'package:askaide/helper/model_resolver.dart';
import 'package:askaide/helper/queue.dart';
import 'package:askaide/lang/lang.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/chat_message_repo.dart';
import 'package:askaide/repo/data/chat_message_data.dart';
import 'package:askaide/repo/model/chat_history.dart';
import 'package:askaide/repo/model/message.dart';
import 'package:askaide/repo/model/room.dart';
import 'package:askaide/repo/openai_repo.dart';
import 'package:askaide/repo/settings_repo.dart';
import 'package:dart_openai/openai.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
part 'chat_event.dart';
part 'chat_state.dart';
class ChatMessageBloc extends BlocExt<ChatMessageEvent, ChatMessageState> {
final ChatMessageRepository chatMsgRepo;
final SettingRepository settingRepo;
final int roomId;
final int? chatHistoryId;
GracefulQueue<ChatStreamRespData>? currentQueue;
ChatMessageBloc(
this.roomId, {
required this.chatMsgRepo,
required this.settingRepo,
this.chatHistoryId,
}) : super(ChatMessageInitial()) {
on<ChatMessageSendEvent>(_messageSendEventHandler);
on<ChatMessageGetRecentEvent>(_getRecentEventHandler);
on<ChatMessageClearAllEvent>(_clearAllEventHandler);
on<ChatMessageBreakContextEvent>(_breakContextEventHandler);
on<ChatMessageDeleteEvent>(_deleteMessageEventHandler);
on<ChatMessageStopEvent>(_stopEventHandler);
}
Future<int> fixRoomId(int? chatHistoryId) async {
if (chatHistoryId != null && chatHistoryId > 0) {
final his = await chatMsgRepo.getChatHistory(chatHistoryId);
if (his != null) {
return his.roomId ?? roomId;
}
}
return roomId;
}
Future<void> _deleteMessageEventHandler(event, emit) async {
final roomId = await fixRoomId(event.chatHistoryId);
await chatMsgRepo.removeMessage(roomId, event.ids);
ChatHistory? his;
if (event.chatHistoryId != null && event.chatHistoryId! > 0) {
his = await chatMsgRepo.getChatHistory(event.chatHistoryId!);
}
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: event.chatHistoryId,
),
chatHistory: his,
));
}
/// 设置上下文清理标识
Future<void> _breakContextEventHandler(event, emit) async {
final roomId = await fixRoomId(event.chatHistoryId);
// 查询当前 Room 信息
final room = await queryRoomById(chatMsgRepo, roomId);
if (room == null) {
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
),
error: 'The selected item does not exist',
));
return;
}
final lastMessage = await chatMsgRepo.getLastMessage(
roomId,
userId: APIServer().localUserID(),
);
if (lastMessage != null && (lastMessage.type == MessageType.contextBreak || lastMessage.isInitMessage())) {
return;
}
await chatMsgRepo.sendMessage(
roomId,
Message(
Role.receiver,
AppLocale.contextBreakMessage,
ts: DateTime.now(),
type: MessageType.contextBreak,
roomId: roomId,
userId: APIServer().localUserID(),
),
);
if (room.initMessage != null && room.initMessage != '') {
await chatMsgRepo.sendMessage(
roomId,
Message(
Role.receiver,
room.initMessage!,
ts: DateTime.now(),
type: MessageType.initMessage,
roomId: roomId,
userId: APIServer().localUserID(),
),
);
}
final messages = await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
);
emit(ChatMessagesLoaded(messages));
emit(ChatMessageUpdated(messages.last));
}
/// 清空消息事件处理
Future<void> _clearAllEventHandler(event, emit) async {
final roomId = await fixRoomId(event.chatHistoryId);
// 查询当前 Room 信息
final room = await queryRoomById(chatMsgRepo, roomId);
if (room == null) {
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
),
error: 'The selected item does not exist',
));
return;
}
await chatMsgRepo.clearMessages(
roomId,
userId: APIServer().localUserID(),
);
if (room.initMessage != null && room.initMessage != '') {
await chatMsgRepo.sendMessage(
roomId,
Message(
Role.receiver,
room.initMessage!,
ts: DateTime.now(),
type: MessageType.initMessage,
roomId: roomId,
userId: APIServer().localUserID(),
),
);
}
emit(ChatMessagesLoaded(await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
)));
}
/// 页面加载事件处理
Future<void> _getRecentEventHandler(event, emit) async {
final roomId = await fixRoomId(event.chatHistoryId);
ChatHistory? his;
if (event.chatHistoryId != null && event.chatHistoryId! > 0) {
his = await chatMsgRepo.getChatHistory(event.chatHistoryId!);
}
if (his == null) {
emit(ChatMessagesLoaded(const []));
} else {
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: event.chatHistoryId,
),
chatHistory: his,
));
}
}
/// 停止输出事件处理
Future<void> _stopEventHandler(event, emit) async {
if (currentQueue != null) {
currentQueue!.finish();
}
}
Future<ChatHistory?> resolveChatHistory(Message message, int roomId) async {
// 如果是聊一聊,自动创建聊天记录历史
if (message.chatHistoryId == null || message.chatHistoryId! <= 0) {
final chatHistory = await chatMsgRepo.createChatHistory(
title: message.text,
userId: APIServer().localUserID(),
roomId: roomId,
model: message.model,
lastMessage: message.text,
);
return chatHistory;
}
return await chatMsgRepo.getChatHistory(message.chatHistoryId!);
}
/// Message sending event processing
Future<void> _messageSendEventHandler(event, emit) async {
if (event.message is! Message) {
return;
}
Message message = event.message as Message;
final roomId = await fixRoomId(message.chatHistoryId);
ChatHistory localChatHistory = (await resolveChatHistory(message, roomId))!;
message.chatHistoryId = localChatHistory.id;
emit(ChatHistoryInited(localChatHistory.id!));
// 查询当前 Room 信息
final room = await queryRoomById(chatMsgRepo, roomId);
if (room == null) {
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: localChatHistory.id,
),
error: 'The selected item does not exist',
chatHistory: localChatHistory,
));
return;
}
if (localChatHistory.model != null) {
room.model = localChatHistory.model!;
}
// 查询最后一条消息
// 如果最后一条消息符合以下情况,则创建时间线
// 1. 最后一条消息不存在
// 2. 最后一条消息的时间距离当前时间超过 3 小时
var last = await chatMsgRepo.getLastMessage(
roomId,
chatHistoryId: localChatHistory.id,
userId: APIServer().localUserID(),
);
if (last == null || last.ts == null || DateTime.now().difference(last.ts!).inMinutes > 60 * 3) {
// 发送时间线消息
await chatMsgRepo.sendMessage(
roomId,
Message(
Role.receiver,
DateFormat('y-MM-dd HH:mm').format(DateTime.now().toLocal()),
type: MessageType.timeline,
ts: DateTime.now(),
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: localChatHistory.id,
),
);
}
// 发送当前用户消息
message.model ??= room.model;
message.userId = APIServer().localUserID();
message.status = 0;
// 模型切换
String? tempModel = event.tempModel;
String? originalModel = message.model;
room.model = tempModel ?? originalModel ?? room.model;
// Logger.instance
// .d('发送消息, originalModel: $originalModel, tempModel: $tempModel');
// 聊天历史记录中,所有发送状态为 pending 状态的消息,全部设置为失败
await chatMsgRepo.fixMessageStatus(roomId);
// 记录当前消息
var sentMessageId = 0;
if (event.isResent && event.index == 0 && last != null && last.type == MessageType.text) {
// 如果当前是消息重发,同时重发的是最后一条消息,则不会重新生成该消息,直接生成答案即可
sentMessageId = last.id!;
if (last.statusIsFailed()) {
// 如果最后一条消息发送失败,则重新发送
await chatMsgRepo.updateMessagePart(roomId, last.id!, [
MessagePart('status', 0),
]);
}
} else {
message.model = tempModel ?? message.model;
sentMessageId = await chatMsgRepo.sendMessage(roomId, message);
message.model = originalModel;
}
// 更新 Room 最后活跃时间
// 这里没有使用 await,因为不需要等待更新完成,让 room 的更新异步的去处理吧
if (!Ability().isUserLogon()) {
chatMsgRepo.updateRoomLastActiveTime(roomId);
}
// 重新查询消息列表,此时包含了刚刚发送的消息+机器人思考中消息
final messages = await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: localChatHistory.id,
);
// 创建机器人思考中系统消息
Message waitMessage = Message(
Role.receiver,
'',
ts: DateTime.now(),
type: MessageType.text,
model: tempModel ?? originalModel,
roomId: roomId,
userId: APIServer().localUserID(),
refId: sentMessageId,
chatHistoryId: localChatHistory.id,
extra: '{}',
);
// 回写消息 ID
waitMessage.id = await chatMsgRepo.sendMessage(roomId, waitMessage);
waitMessage.isReady = false;
messages.add(waitMessage);
emit(ChatMessagesLoaded(
messages,
processing: true,
chatHistory: localChatHistory,
));
emit(ChatMessageUpdated(waitMessage, processing: true));
// 等待监听机器人应答消息
final queue = GracefulQueue<ChatStreamRespData>();
currentQueue = queue;
try {
RequestFailedException? error;
try {
var isThinking = false;
var reasoningContent = '';
var listener = queue.listen(const Duration(milliseconds: 10), (items) {
for (var element in items) {
if (element.role == 'system') {
try {
// SYSTEM 命令
// - type: 命令类型
//
// type=summary (默认值)
// - question_id: 问题 ID
// - answer_id: 答案 ID
// - quota_consumed: 消耗的配额
// - token: 消耗的 token
// - info: 提示信息
//
// type=thinking
// type=thinking-done: [time_consumed]
final cmd = jsonDecode(element.content);
switch (cmd['type']) {
case 'summary':
message.serverId = cmd['question_id'];
waitMessage.serverId = cmd['answer_id'];
final quotaConsumed = cmd['quota_consumed'] ?? 0;
final tokenConsumed = cmd['token'] ?? 0;
final info = cmd['info'] ?? '';
if (info != '') {
waitMessage.updateExtra({'info': info});
}
if (quotaConsumed == 0 && tokenConsumed == 0) {
continue;
}
waitMessage.quotaConsumed = quotaConsumed;
waitMessage.tokenConsumed = tokenConsumed;
break;
case 'thinking':
waitMessage.pushExtra('states', 'thinking');
isThinking = true;
break;
case 'thinking-done':
waitMessage.pushExtra('states', 'thinking-done');
waitMessage.updateExtra({'thinking_time_consumed': cmd['time_consumed'] ?? 0});
isThinking = false;
break;
case 'reference-documents':
waitMessage.updateExtra({'reference-documents': cmd['data']});
break;
case 'searching':
waitMessage.pushExtra('states', 'searching');
break;
case 'search-results':
waitMessage.popExtra('states');
waitMessage.updateExtra({'search-results': cmd['data']});
break;
default:
}
} catch (e) {
// ignore: avoid_print
}
} else {
if (isThinking) {
reasoningContent = (reasoningContent + element.content).trim();
if (reasoningContent.contains('</think>')) {
final allParts = reasoningContent.split('</think>');
final parts = [allParts[0], allParts.skip(1).join('</think>')];
reasoningContent = parts[0].trim();
waitMessage.text += parts[1].trim();
}
waitMessage.updateExtra({'reasoning': reasoningContent.replaceAll(RegExp('</?think>'), '')});
} else {
waitMessage.text += element.content;
}
}
}
emit(ChatMessageUpdated(waitMessage, processing: true));
// 失败处理
for (var e in items) {
if (e.code != null && e.code! > 0) {
error = RequestFailedException(e.error ?? 'Request processing failure', e.code!);
}
}
});
await ModelResolver.instance
.request(
room: room,
tempModel: tempModel,
contextMessages: messages.sublist(0, messages.length - 1),
onMessage: queue.add,
maxTokens: room.maxTokens,
historyId: localChatHistory.id,
flags: message.flags,
)
.whenComplete(queue.finish);
await listener;
waitMessage.text = waitMessage.text.trim();
if (error == null && waitMessage.text.isEmpty) {
error = RequestFailedException('The answer is empty', 500);
}
if (error != null) {
throw error!;
}
} catch (e) {
if (waitMessage.text.isEmpty) {
Logger.instance.e('An error occurred during the response process: $e');
rethrow;
}
}
// 机器人应答完成,将最后一条机器人应答消息更新到数据库,替换掉思考中消息
waitMessage.isReady = true;
await chatMsgRepo.updateMessage(roomId, waitMessage.id!, waitMessage);
// 更新聊天问题的服务端 ID 和消息状态
var sentMessageParts = <MessagePart>[];
sentMessageParts.add(MessagePart('status', 1));
if (message.serverId != null && message.serverId! > 0) {
sentMessageParts.add(MessagePart('server_id', message.serverId));
}
await chatMsgRepo.updateMessagePart(
roomId,
sentMessageId,
sentMessageParts,
);
// 更新聊天历史纪录最后一条消息
final chatHistory = await chatMsgRepo.getChatHistory(localChatHistory.id!);
if (chatHistory != null) {
chatHistory.lastMessage = waitMessage.text;
// 异步处理就好,不需要等待
chatMsgRepo.updateChatHistory(localChatHistory.id!, chatHistory);
}
// 重新查询消息列表,此时包含了刚刚发送的消息+机器人应答消息
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: localChatHistory.id,
),
chatHistory: localChatHistory,
));
} catch (e) {
final error = resolveErrorMessage(e, isChat: true);
await chatMsgRepo.updateMessagePart(
roomId,
sentMessageId,
[
MessagePart('status', 2),
MessagePart('extra', jsonEncode({'error': error.toString()})),
],
);
if (waitMessage.id != null) {
if (waitMessage.isReady) {
await chatMsgRepo.updateMessage(
roomId,
waitMessage.id!,
Message(
Role.receiver,
error.toString(),
id: waitMessage.id,
ts: DateTime.now(),
type: MessageType.system,
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: localChatHistory.id,
model: tempModel ?? originalModel,
),
);
} else {
await chatMsgRepo.removeMessage(roomId, [waitMessage.id!]);
}
}
emit(ChatMessagesLoaded(
await chatMsgRepo.getRecentMessages(
roomId: roomId,
userId: APIServer().localUserID(),
chatHistoryId: localChatHistory.id,
),
error: error,
chatHistory: localChatHistory,
));
queue.finish();
} finally {
queue.dispose();
currentQueue = null;
}
emit(ChatMessageUpdated(waitMessage));
}
}
Future<Room?> queryRoomById(ChatMessageRepository chatMsgRepo, int roomId) async {
Room? room;
if (Ability().isUserLogon()) {
final roomInServer = await APIServer().room(roomId: roomId);
room = Room(
roomInServer.name,
'chat',
description: roomInServer.description,
id: roomInServer.id,
userId: roomInServer.userId,
createdAt: roomInServer.createdAt,
lastActiveTime: roomInServer.lastActiveTime,
systemPrompt: roomInServer.systemPrompt,
priority: roomInServer.priority ?? 0,
model: '${roomInServer.vendor}:${roomInServer.model}',
initMessage: roomInServer.initMessage,
maxContext: roomInServer.maxContext,
maxTokens: roomInServer.maxTokens,
localRoom: false,
);
} else {
room = await chatMsgRepo.room(roomId);
}
return room;
}
================================================
FILE: lib/bloc/chat_state.dart
================================================
part of 'chat_message_bloc.dart';
@immutable
abstract class ChatMessageState {}
class ChatMessageInitial extends ChatMessageState {}
// 加载全量聊天记录
class ChatMessagesLoaded extends ChatMessageState {
final List<Message> _messages;
final bool processing;
final Object? _error;
final ChatHistory? chatHistory;
ChatMessagesLoaded(
this._messages, {
Object? error,
this.processing = false,
this.chatHistory,
}) : _error = error;
get messages => _messages;
get error => _error;
}
class ChatMessageError extends ChatMessageState {
final String message;
ChatMessageError(this.message);
}
class ChatMessageUpdated extends ChatMessageState {
final Message message;
/// 是否新消息正在处理中
final bool processing;
ChatMessageUpdated(this.message, {this.processing = false});
}
class ChatHistoryInited extends ChatMessageState {
final int chatId;
ChatHistoryInited(this.chatId);
}
================================================
FILE: lib/bloc/creative_island_bloc.dart
================================================
import 'package:askaide/bloc/bloc_manager.dart';
import 'package:askaide/repo/api/creative.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/creative_island_repo.dart';
import 'package:flutter/material.dart';
part 'creative_island_event.dart';
part 'creative_island_state.dart';
class CreativeIslandBloc
extends BlocExt<CreativeIslandEvent, CreativeIslandState> {
final CreativeIslandRepository creativeIslandRepo;
CreativeIslandBloc(this.creativeIslandRepo) : super(CreativeIslandInitial()) {
// on<CreativeIslandSaveEvent>((event, emit) async {
// await creativeIslandRepo.create(
// event.itemId,
// arguments: jsonEncode(event.arguments),
// prompt: event.prompt,
// answer: event.answer,
// userId: APIServer().localUserID(),
// );
// emit(CreativeIslandSaved());
// });
on<CreativeIslandItemsV2LoadEvent>((event, emit) async {
final items =
await APIServer().creativeIslandItemsV2(cache: !event.forceRefresh);
emit(CreativeIslandItemsV2Loaded(
items: items,
));
});
on<CreativeIslandItemLoadEvent>((event, emit) async {
final resp = await APIServer().creativeIslandItem(event.itemId);
emit(CreativeIslandItemLoaded(resp));
});
on<CreativeIslandHistoriesAllLoadEvent>((event, emit) async {
emit(CreativeIslandHistoriesLoading());
final items = await APIServer()
.creativeHistories(cache: !event.forceRefresh, mode: event.mode);
emit(CreativeIslandHistoriesAllLoaded(items.data));
});
on<CreativeIslandGalleryLoadEvent>((event, emit) async {
emit(CreativeIslandHistoriesLoading());
final items = await APIServer().creativeUserGallery(
cache: false, mode: event.mode, model: event.model);
emit(CreativeIslandGalleryLoaded(items));
});
on<CreativeIslandHistoriesLoadEvent>((event, emit) async {
emit(CreativeIslandHistoriesLoading());
final island = await APIServer().creativeIslandItem(event.itemId);
emit(CreativeIslandHistoriesLoaded(
island,
await APIServer().creativeItemHistories(
island.id,
cache: !event.forceRefresh,
),
));
});
on<CreativeIslandDeleteEvent>((event, emit) async {
emit(CreativeIslandHistoriesLoading());
await APIServer()
.deleteCreativeHistoryItem(event.itemId, hisId: event.id);
if (event.source == 'all-histories') {
final res =
await APIServer().creativeHistories(cache: false, mode: event.mode);
emit(CreativeIslandHistoriesAllLoaded(res.data));
} else {
final island = await APIServer().creativeIslandItem(event.itemId);
emit(CreativeIslandHistoriesLoaded(
island,
await APIServer().creativeItemHistories(
island.id,
cache: false,
),
));
}
});
on<CreativeIslandListLoadEvent>((event, emit) async {
emit(CreativeIslandInitial());
try {
final items = await APIServer().creativeIslandItems(mode: event.mode);
emit(CreativeIslandListLoaded(
items.items,
categories: items.categories,
backgroundImage: items.backgroundImage,
));
} catch (e) {
emit(
CreativeIslandListLoaded(const [], error: e, categories: const []));
}
});
on<CreativeIslandHistoryItemLoadEvent>((event, emit) async {
emit(CreativeIslandHistoryItemLoading());
emit(CreativeIslandHistoryItemLoaded(
item: await APIServer().creativeHistoryItem(
hisId: event.itemId,
cache: !event.forceRefresh,
),
));
});
}
}
================================================
FILE: lib/bloc/creative_island_event.dart
================================================
part of 'creative_island_bloc.dart';
@immutable
abstract class CreativeIslandEvent {}
// class CreativeIslandSaveEvent extends CreativeIslandEvent {
// final String itemId;
// final Map<String, dynamic> arguments;
// final String prompt;
// final String answer;
// CreativeIslandSaveEvent(
// this.itemId, {
// this.arguments = const {},
// this.prompt = '',
// this.answer = '',
// });
// }
class CreativeIslandItemLoadEvent extends CreativeIslandEvent {
final String itemId;
CreativeIslandItemLoadEvent(this.itemId);
}
class CreativeIslandHistoriesAllLoadEvent extends CreativeIslandEvent {
final bool forceRefresh;
final String mode;
CreativeIslandHistoriesAllLoadEvent(
{this.forceRefresh = false, required this.mode});
}
class CreativeIslandGalleryLoadEvent extends CreativeIslandEvent {
final bool forceRefresh;
final String mode;
final String? model;
CreativeIslandGalleryLoadEvent({
this.forceRefresh = false,
required this.mode,
this.model,
});
}
class CreativeIslandHistoriesLoadEvent extends CreativeIslandEvent {
final String itemId;
final bool forceRefresh;
CreativeIslandHistoriesLoadEvent(this.itemId, {this.forceRefresh = false});
}
class CreativeIslandDeleteEvent extends CreativeIslandEvent {
final String itemId;
final int id;
final String source;
final String mode;
CreativeIslandDeleteEvent(this.itemId, this.id,
{this.source = '', required this.mode});
}
class CreativeIslandListLoadEvent extends CreativeIslandEvent {
final String mode;
CreativeIslandListLoadEvent({required this.mode});
}
class CreativeIslandHistoryItemLoadEvent extends CreativeIslandEvent {
final int itemId;
final bool forceRefresh;
CreativeIslandHistoryItemLoadEvent(this.itemId, {this.forceRefresh = false});
}
class CreativeIslandItemsV2LoadEvent extends CreativeIslandEvent {
final bool forceRefresh;
CreativeIslandItemsV2LoadEvent({this.forceRefresh = false});
}
================================================
FILE: lib/bloc/creative_island_state.dart
================================================
part of 'creative_island_bloc.dart';
@immutable
abstract class CreativeIslandState {}
class CreativeIslandInitial extends CreativeIslandState {}
// class CreativeIslandSaved extends CreativeIslandState {
// final String? _error;
// CreativeIslandSaved({String? error}) : _error = error;
// get error => _error;
// }
class CreativeIslandItemLoaded extends CreativeIslandState {
final String? _error;
final CreativeIslandItem item;
CreativeIslandItemLoaded(this.item, {String? error}) : _error = error;
get error => _error;
}
class CreativeIslandHistoriesLoading extends CreativeIslandInitial {}
class CreativeIslandHistoriesLoaded extends CreativeIslandState {
final String? _error;
final CreativeIslandItem island;
final List<CreativeItemInServer> histories;
CreativeIslandHistoriesLoaded(this.island, this.histories, {String? error})
: _error = error;
get error => _error;
}
class CreativeIslandGalleryLoaded extends CreativeIslandState {
final String? _error;
final List<CreativeItemInServer> items;
CreativeIslandGalleryLoaded(this.items, {String? error}) : _error = error;
get error => _error;
}
class CreativeIslandHistoriesAllLoaded extends CreativeIslandState {
final String? _error;
final List<CreativeItemInServer> histories;
CreativeIslandHistoriesAllLoaded(this.histories, {String? error})
: _error = error;
get error => _error;
}
class CreativeIslandListLoaded extends CreativeIslandState {
final Object? _error;
final List<CreativeIslandItem> items;
final List<String> categories;
final String? backgroundImage;
CreativeIslandListLoaded(
this.items, {
Object? error,
required this.categories,
this.backgroundImage,
}) : _error = error;
get error => _error;
}
class CreativeIslandHistoryItemLoading extends CreativeIslandState {}
class CreativeIslandHistoryItemLoaded extends CreativeIslandState {
final Object? error;
final CreativeItemInServer? item;
CreativeIslandHistoryItemLoaded({this.item, this.error});
}
class CreativeIslandItemsV2Loaded extends CreativeIslandState {
final Object? error;
final List<CreativeIslandItemV2> items;
CreativeIslandItemsV2Loaded({required this.items, this.error});
}
================================================
FILE: lib/bloc/free_count_bloc.dart
================================================
import 'package:askaide/helper/ability.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/model/misc.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'free_count_event.dart';
part 'free_count_state.dart';
class FreeCountBloc extends Bloc<FreeCountEvent, FreeCountState> {
List<FreeModelCount> counts = [];
FreeCountBloc() : super(FreeCountInitial()) {
// 重新加载所有的模型免费使用次数
on<FreeCountReloadAllEvent>((event, emit) async {
if (!Ability().isUserLogon()) {
emit(FreeCountLoadedState(
counts: await APIServer().freeChatCounts(),
needSignin: event.checkSigninStatus,
));
return;
}
counts = await APIServer().userFreeStatistics();
emit(FreeCountLoadedState(counts: counts));
});
// 重新加载指定模型的免费使用次数
on<FreeCountReloadEvent>((event, emit) async {
if (Ability().usingLocalOpenAIModel(event.model) ||
!Ability().isUserLogon()) {
emit(FreeCountLoadedState(counts: counts));
return;
}
final freeCount = await APIServer().userFreeStatisticsForModel(
model: event.model.startsWith('v2@')
? event.model
: event.model.split(':').last,
);
if (freeCount.maxCount > 0) {
var matched = false;
for (var i = 0; i < counts.length; i++) {
if (counts[i].model == freeCount.model) {
counts[i] = freeCount;
matched = true;
break;
}
}
if (!matched) {
counts.add(freeCount);
}
}
emit(FreeCountLoadedState(counts: counts));
});
}
}
================================================
FILE: lib/bloc/free_count_event.dart
================================================
part of 'free_count_bloc.dart';
@immutable
sealed class FreeCountEvent {}
class FreeCountReloadEvent extends FreeCountEvent {
final String model;
FreeCountReloadEvent({required this.model});
}
class FreeCountReloadAllEvent extends FreeCountEvent {
final bool checkSigninStatus;
FreeCountReloadAllEvent({this.checkSigninStatus = false});
}
================================================
FILE: lib/bloc/free_count_state.dart
================================================
part of 'free_count_bloc.dart';
@immutable
sealed class FreeCountState {}
final class FreeCountInitial extends FreeCountState {}
class FreeCountLoadedState extends FreeCountState {
final List<FreeModelCount> counts;
final bool needSignin;
FreeModelCount? model(String model) {
model = model.split(':').last;
for (var i = 0; i < counts.length; i++) {
if (counts[i].model == model) {
return counts[i];
}
}
return null;
}
FreeCountLoadedState({required this.counts, this.needSignin = false});
}
================================================
FILE: lib/bloc/gallery_bloc.dart
================================================
import 'package:askaide/repo/api/creative.dart';
import 'package:askaide/repo/api/page.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'gallery_event.dart';
part 'gallery_state.dart';
class GalleryBloc extends Bloc<GalleryEvent, GalleryState> {
GalleryBloc() : super(GalleryInitial()) {
on<GalleryLoadEvent>((event, emit) async {
emit(GalleryInitial());
final res = await APIServer().creativeGallery(
cache: !event.forceRefresh,
page: event.page,
perPage: 20,
);
emit(GalleryLoaded(data: res));
});
on<GalleryItemLoadEvent>((event, emit) async {
emit(GalleryInitial());
final res = await APIServer().creativeGalleryItem(
cache: !event.forceRefresh,
id: event.id,
);
emit(GalleryItemLoaded(
item: res.item,
isInternalUser: res.isInternalUser,
));
});
}
}
================================================
FILE: lib/bloc/gallery_event.dart
================================================
part of 'gallery_bloc.dart';
@immutable
abstract class GalleryEvent {}
class GalleryLoadEvent extends GalleryEvent {
final bool forceRefresh;
final int page;
GalleryLoadEvent({this.forceRefresh = false, this.page = 1});
}
class GalleryItemLoadEvent extends GalleryEvent {
final int id;
final bool forceRefresh;
GalleryItemLoadEvent({required this.id, this.forceRefresh = false});
}
================================================
FILE: lib/bloc/gallery_state.dart
================================================
part of 'gallery_bloc.dart';
@immutable
abstract class GalleryState {}
class GalleryInitial extends GalleryState {}
class GalleryLoaded extends GalleryState {
final PagedData<CreativeGallery> data;
GalleryLoaded({required this.data});
}
class GalleryItemLoaded extends GalleryState {
final CreativeGallery item;
final bool isInternalUser;
GalleryItemLoaded({required this.item, this.isInternalUser = false});
}
================================================
FILE: lib/bloc/group_chat_bloc.dart
================================================
import 'dart:convert';
import 'package:askaide/helper/cache.dart';
import 'package:askaide/helper/logger.dart';
import 'package:askaide/page/component/chat/message_state_manager.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/model/group.dart';
import 'package:askaide/repo/model/message.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'group_chat_event.dart';
part 'group_chat_state.dart';
class GroupChatBloc extends Bloc<GroupChatEvent, GroupChatState> {
var messages = <GroupMessage>[];
final MessageStateManager stateManager;
GroupChatBloc({required this.stateManager}) : super(GroupChatInitial()) {
// 加载聊天组
on<GroupChatLoadEvent>((event, emit) async {
final group =
await APIServer().chatGroup(event.groupId, cache: !event.forceUpdate);
final states = await stateManager.loadRoomStates(event.groupId);
final defaultChatMembers = await loadDefaultChatMembers(event.groupId);
emit(GroupChatLoaded(
group: group,
states: states,
defaultChatMembers: defaultChatMembers.isEmpty
? group.members.map((e) => e.id!).toList()
: defaultChatMembers,
));
});
// 加载聊天组聊天记录
on<GroupChatMessagesLoadEvent>((event, emit) async {
if (event.isInitRequest) {
try {
final cached =
await Cache().stringGet(key: 'group:speed:${event.groupId}');
if (cached != null) {
final messages = (jsonDecode(cached) as List<dynamic>)
.map((e) => GroupMessage.fromJson(e))
.toList();
emit(GroupChatMessagesLoaded(messages: messages));
}
} catch (e) {
Logger.instance.e(e);
}
}
await refreshGroupMessages(
event.groupId,
startId: event.startId,
forceRefresh: true,
);
emit(GroupChatMessagesLoaded(messages: messages));
});
// 发送聊天组消息
on<GroupChatSendEvent>((event, emit) async {
try {
final resp = await APIServer().chatGroupSendMessage(
event.groupId,
GroupChatSendRequest(
message: event.message,
memberIds: event.members,
),
);
// 记录默认聊天成员
updateDefaultChatMembers(
event.groupId,
resp.tasks.map((e) => e.memberId).toList(),
).then((members) {
emit(GroupDefaultMemberSelected(members));
});
await refreshGroupMessages(
event.groupId,
startId: 0,
forceRefresh: true,
);
emit(GroupChatMessagesLoaded(messages: messages));
} catch (e) {
await refreshGroupMessages(
event.groupId,
startId: 0,
forceRefresh: true,
);
emit(GroupChatMessagesLoaded(messages: messages, error: e));
}
});
// 发送系统消息
on<GroupChatSendSystemEvent>((event, emit) async {
try {
final resp = await APIServer().chatGroupSendSystemMessage(
event.groupId,
messageType: event.type.getTypeText(),
message: event.message,
);
Logger.instance.d(resp.toJson());
} finally {
await refreshGroupMessages(
event.groupId,
startId: 0,
forceRefresh: true,
);
emit(GroupChatMessagesLoaded(messages: messages));
}
});
// 更新聊天组消息状态
on<GroupChatUpdateMessageStatusEvent>((event, emit) async {
final waitMessageIds = messages
.where((msg) => msg.status == groupMessageStatusWaiting)
.map((msg) => msg.id)
.toList();
if (waitMessageIds.isEmpty) {
return;
}
final resp = await APIServer()
.chatGroupMessageStatus(event.groupId, waitMessageIds);
final newMessageStatusMap = <int, GroupMessage>{};
for (var msg in resp) {
newMessageStatusMap[msg.id] = msg;
}
for (var i = 0; i < messages.length; i++) {
final msg = messages[i];
if (newMessageStatusMap.containsKey(msg.id)) {
messages[i] = newMessageStatusMap[msg.id]!;
}
}
emit(GroupChatMessagesLoaded(messages: messages));
});
// 清空聊天组消息
on<GroupChatDeleteAllEvent>((event, emit) async {
await APIServer().chatGroupDeleteAllMessages(event.groupId);
messages.clear();
emit(GroupChatMessagesLoaded(messages: messages));
});
// 删除聊天组消息
on<GroupChatDeleteEvent>((event, emit) async {
await APIServer().chatGroupDeleteMessage(event.groupId, event.messageId);
messages.removeWhere((msg) => msg.id == event.messageId);
emit(GroupChatMessagesLoaded(messages: messages));
});
}
refreshGroupMessages(
int groupId, {
int startId = 0,
bool forceRefresh = false,
}) async {
final data = await APIServer()
.chatGroupMessages(groupId, startId: startId, cache: !forceRefresh);
messages = data.data.reversed.toList();
if (startId == 0) {
Cache()
.setString(key: 'group:speed:$groupId', value: jsonEncode(messages));
}
}
Future<List<int>> loadDefaultChatMembers(int groupId) async {
final defaultMembers =
await Cache().stringGet(key: 'group:$groupId:default-members');
return (defaultMembers ?? '')
.split(',')
.map((e) => int.tryParse(e) ?? 0)
.where((e) => e > 0)
.toList();
}
Future<List<int>> updateDefaultChatMembers(
int groupId, List<int> members) async {
// 记录默认聊天成员
await Cache().setString(
key: 'group:$groupId:default-members',
value: members.join(','),
duration: const Duration(days: 365),
);
return members;
}
}
================================================
FILE: lib/bloc/group_chat_event.dart
================================================
part of 'group_chat_bloc.dart';
@immutable
sealed class GroupChatEvent {}
class GroupChatLoadEvent extends GroupChatEvent {
final int groupId;
final bool forceUpdate;
GroupChatLoadEvent(this.groupId, {this.forceUpdate = false});
}
class GroupChatMessagesLoadEvent extends GroupChatEvent {
final int groupId;
final int startId;
final bool isInitRequest;
GroupChatMessagesLoadEvent(
this.groupId, {
this.startId = 0,
this.isInitRequest = false,
});
}
class GroupChatSendEvent extends GroupChatEvent {
final int groupId;
final String message;
final List<int> members;
final int? index;
final bool isResent;
GroupChatSendEvent(this.groupId, this.message, this.members,
{this.index, this.isResent = false});
}
class GroupChatUpdateMessageStatusEvent extends GroupChatEvent {
final int groupId;
GroupChatUpdateMessageStatusEvent(this.groupId);
}
class GroupChatSendSystemEvent extends GroupChatEvent {
final int groupId;
final String? message;
final MessageType type;
GroupChatSendSystemEvent(this.groupId, this.type, {this.message});
}
class GroupChatDeleteAllEvent extends GroupChatEvent {
final int groupId;
GroupChatDeleteAllEvent(this.groupId);
}
class GroupChatDeleteEvent extends GroupChatEvent {
final int groupId;
final int messageId;
GroupChatDeleteEvent(this.groupId, this.messageId);
}
================================================
FILE: lib/bloc/group_chat_state.dart
================================================
part of 'group_chat_bloc.dart';
@immutable
sealed class GroupChatState {}
final class GroupChatInitial extends GroupChatState {}
class GroupChatLoaded extends GroupChatState {
final ChatGroup group;
final Map<String, MessageState> states;
final List<int>? defaultChatMembers;
GroupChatLoaded({
required this.group,
required this.states,
this.defaultChatMembers,
});
}
class GroupDefaultMemberSelected extends GroupChatState {
final List<int> members;
GroupDefaultMemberSelected(this.members);
}
class GroupChatMessagesLoaded extends GroupChatState {
final List<GroupMessage> messages;
final Object? _error;
get error => _error;
bool get hasWaitTasks =>
messages.any((element) => element.status == groupMessageStatusWaiting);
GroupChatMessagesLoaded({
required this.messages,
Object? error,
}) : _error = error;
}
================================================
FILE: lib/bloc/model_bloc.dart
================================================
import 'package:askaide/repo/api/admin/models.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'model_event.dart';
part 'model_state.dart';
class ModelBloc extends Bloc<ModelEvent, ModelState> {
ModelBloc() : super(ModelInitial()) {
/// 加载所有模型
on<ModelsLoadEvent>((event, emit) async {
final channels = await APIServer().adminModels();
emit(ModelsLoaded(channels));
});
/// 加载单个模型
on<ModelLoadEvent>((event, emit) async {
final channel = await APIServer().adminModel(modelId: event.modelId);
emit(ModelLoaded(channel));
});
/// 创建模型
on<ModelCreateEvent>((event, emit) async {
try {
await APIServer().adminCreateModel(event.req);
emit(ModelOperationResult(true, 'Creation successful'));
} catch (e) {
emit(ModelOperationResult(false, e.toString()));
}
});
/// 更新模型
on<ModelUpdateEvent>((event, emit) async {
try {
await APIServer().adminUpdateModel(
modelId: event.modelId,
req: event.req,
);
emit(ModelOperationResult(true, 'Update successful'));
} catch (e) {
emit(ModelOperationResult(false, e.toString()));
}
});
/// 删除模型
on<ModelDeleteEvent>((event, emit) async {
try {
await APIServer().adminDeleteModel(modelId: event.modelId);
emit(ModelOperationResult(true, 'Delete successful'));
} catch (e) {
emit(ModelOperationResult(false, e.toString()));
}
});
}
}
================================================
FILE: lib/bloc/model_event.dart
================================================
part of 'model_bloc.dart';
@immutable
sealed class ModelEvent {}
class ModelsLoadEvent extends ModelEvent {}
class ModelLoadEvent extends ModelEvent {
final String modelId;
ModelLoadEvent(this.modelId);
}
class ModelCreateEvent extends ModelEvent {
final AdminModelAddReq req;
ModelCreateEvent(this.req);
}
class ModelUpdateEvent extends ModelEvent {
final String modelId;
final AdminModelUpdateReq req;
ModelUpdateEvent(this.modelId, this.req);
}
class ModelDeleteEvent extends ModelEvent {
final String modelId;
ModelDeleteEvent(this.modelId);
}
================================================
FILE: lib/bloc/model_state.dart
================================================
part of 'model_bloc.dart';
@immutable
sealed class ModelState {}
final class ModelInitial extends ModelState {}
class ModelsLoaded extends ModelState {
final List<AdminModel> models;
ModelsLoaded(this.models);
}
class ModelLoaded extends ModelState {
final AdminModel model;
ModelLoaded(this.model);
}
class ModelOperationResult extends ModelState {
final bool success;
final String message;
ModelOperationResult(this.success, this.message);
}
================================================
FILE: lib/bloc/notify_bloc.dart
================================================
import 'package:askaide/bloc/bloc_manager.dart';
import 'package:flutter/material.dart';
part 'notify_event.dart';
part 'notify_state.dart';
class NotifyBloc extends BlocExt<NotifyEvent, NotifyState> {
NotifyBloc() : super(NotifyInitial()) {
on<NotifyFiredEvent>((event, emit) {
emit(NotifyFired(event.title, event.body, event.type));
});
on<NotifyResetEvent>((event, emit) {
emit(NotifyInitial());
});
}
}
================================================
FILE: lib/bloc/notify_event.dart
================================================
part of 'notify_bloc.dart';
@immutable
abstract class NotifyEvent {}
class NotifyFiredEvent extends NotifyEvent {
final String title;
final String body;
final String type;
NotifyFiredEvent(this.title, this.body, this.type);
}
class NotifyResetEvent extends NotifyEvent {}
================================================
FILE: lib/bloc/notify_state.dart
================================================
part of 'notify_bloc.dart';
@immutable
abstract class NotifyState {}
class NotifyInitial extends NotifyState {}
class NotifyFired extends NotifyState {
final String title;
final String body;
final String type;
NotifyFired(this.title, this.body, this.type);
}
================================================
FILE: lib/bloc/payment_bloc.dart
================================================
import 'package:askaide/helper/platform.dart';
import 'package:askaide/repo/api/payment.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:bloc/bloc.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:meta/meta.dart';
part 'payment_event.dart';
part 'payment_state.dart';
class PaymentBloc extends Bloc<PaymentEvent, PaymentState> {
PaymentBloc() : super(PaymentInitial()) {
on<PaymentLoadAppleProducts>((event, emit) async {
if (PlatformTool.isIOS()) {
final products = await APIServer().paymentProducts();
if (products.consume.isEmpty) {
emit(PaymentAppleProductsLoaded(
const <ProductDetails>[],
note: products.note,
error: '没有任何可购买的项目',
localProducts: const [],
loading: false,
));
return;
}
emit(PaymentAppleProductsLoaded(
products.consume
.map(
(e) => ProductDetails(
id: e.id,
title: e.name,
description: '',
price: '-',
rawPrice: 0,
currencyCode: '',
),
)
.toList(),
note: products.note,
localProducts: products.consume,
loading: true));
final productIds = products.consume.map((e) => e.id).toSet();
final response =
await InAppPurchase.instance.queryProductDetails(productIds);
if (response.notFoundIDs.isNotEmpty) {
emit(PaymentAppleProductsLoaded(
const <ProductDetails>[],
note: products.note,
localProducts: products.consume,
error: '没有任何可购买的项目',
loading: false,
));
return;
}
final remoteProducts = <ProductDetails>[];
for (var id in productIds) {
remoteProducts.add(
response.productDetails.firstWhere((element) => element.id == id),
);
}
emit(PaymentAppleProductsLoaded(
remoteProducts,
note: products.note,
localProducts: products.consume,
loading: false,
));
} else {
final products = await APIServer().paymentProducts();
if (products.consume.isEmpty) {
emit(PaymentAppleProductsLoaded(
const <ProductDetails>[],
note: products.note,
error: '没有任何可购买的项目',
localProducts: const [],
loading: false,
));
return;
}
emit(
PaymentAppleProductsLoaded(
products.consume
.map(
(e) => ProductDetails(
id: e.id,
title: e.name,
description: '',
price: products.preferUSD
? e.retailPriceUSDText
: e.retailPriceText,
rawPrice: e.retailPrice.toDouble(),
currencyCode: '',
),
)
.toList(),
note: products.note,
localProducts: products.consume,
loading: false,
preferUSD: products.preferUSD,
),
);
}
});
}
}
================================================
FILE: lib/bloc/payment_event.dart
================================================
part of 'payment_bloc.dart';
@immutable
abstract class PaymentEvent {}
class PaymentLoadAppleProducts extends PaymentEvent {}
================================================
FILE: lib/bloc/payment_state.dart
================================================
part of 'payment_bloc.dart';
@immutable
abstract class PaymentState {}
class PaymentInitial extends PaymentState {}
class PaymentAppleProductsLoaded extends PaymentState {
final List<ProductDetails> products;
final List<PaymentProduct> localProducts;
final Object? error;
final bool loading;
final String? note;
final bool preferUSD;
PaymentAppleProductsLoaded(
this.products, {
this.note,
required this.localProducts,
this.error,
required this.loading,
this.preferUSD = false,
});
}
================================================
FILE: lib/bloc/room_bloc.dart
================================================
import 'package:askaide/helper/ability.dart';
import 'package:askaide/helper/constant.dart';
import 'package:askaide/page/component/chat/message_state_manager.dart';
import 'package:askaide/repo/api/room_gallery.dart';
import 'package:askaide/repo/api_server.dart';
import 'package:askaide/repo/model/group.dart';
import 'package:askaide/repo/model/misc.dart';
import 'package:askaide/repo/model/room.dart';
import 'package:askaide/bloc/bloc_manager.dart';
import 'package:askaide/repo/chat_message_repo.dart';
import 'package:flutter/material.dart';
part 'room_event.dart';
part 'room_state.dart';
class RoomBloc extends BlocExt<RoomEvent, RoomState> {
final ChatMessageRepository chatMsgRepo;
final MessageStateManager stateManager;
Future<int?> fixRoomId(int? chatHistoryId) async {
if (chatHistoryId != null && chatHistoryId > 0) {
final his = await chatMsgRepo.getChatHistory(chatHistoryId);
if (his != null) {
return his.roomId;
}
}
return null;
}
/// 加载房间信息,如果房间不存在,则加载默认房间
Future<RoomInServer> loadRoom(int roomId) async {
try {
final room = await APIServer().room(roomId: roomId);
return room;
} catch (e) {
return await APIServer().room(roomId: chatAnywhereRoomId);
}
}
RoomBloc({
required this.chatMsgRepo,
required this.stateManager,
}) : super(RoomInitial()) {
// 加载指定聊天室信息
on<RoomLoadEvent>((event, emit) async {
try {
// 加快首屏加载速度,避免加载中状态
emit(RoomLoaded(
Room(
'',
'chat',
id: event.roomId,
),
const <String, MessageState>{},
cascading: false,
));
final roomId = await fixRoomId(event.chatHistoryId) ?? event.roomId;
if (Ability().isUserLogon()) {
final room = await loadRoom(roomId);
if (event.chatHistoryId != null && event.chatHistoryId! > 0) {
final chatHistory = await chatMsgRepo.getChatHistory(event.chatHistoryId!);
if (chatHistory != null && chatHistory.model != null) {
room.model = chatHistory.model!;
}
}
emit(RoomLoaded(
Room(
room.name,
'chat',
description: room.description,
id: room.id,
userId: room.userId,
createdAt: room.createdAt,
lastActiveTime: room.lastActiveTime,
systemPrompt: room.systemPrompt,
priority: room.priority ?? 0,
model: room.model.startsWith('v2@') ? room.model : '${room.vendor}:${room.model}',
initMessage: room.initMessage,
maxContext: room.maxContext,
avatarId: room.avatarId,
avatarUrl: room.avatarUrl,
roomType: room.roomType,
),
const <String, MessageState>{},
cascading: false,
));
final states = await stateManager.loadRoomStates(roomId);
emit(RoomLoaded(
Room(
room.name,
'chat',
description: room.description,
id: room.id,
userId: room.userId,
createdAt: room.createdAt,
lastActiveTime: room.lastActiveTime,
systemPrompt: room.systemPrompt,
priority: room.priority ?? 0,
model: room.model.startsWith('v2@') ? room.model : '${room.vendor}:${room.model}',
initMessage: room.initMessage,
maxContext: room.maxContext,
avatarId: room.avatarId,
avatarUrl: room.avatarUrl,
roomType: room.roomType,
),
states,
examples: await APIServer().example(
room.model.startsWith('v2@') ? room.model : '${room.vendor}:${room.model}',
),
cascading: event.cascading,
));
return;
}
final room = await chatMsgRepo.room(roomId);
if (room != null) {
final states = await stateManager.loadRoomStates(roomId);
emit(RoomLoaded(
room,
states,
examples: await APIServer().example(room.model),
cascading: event.cascading,
));
}
} catch (e) {
emit(RoomLoaded(
Room('-', '-'),
const {},
error: e,
cascading: event.cascading,
));
}
});
// 加载聊天室列表
on<RoomsLoadEvent>((event, emit) async {
if (!event.forceRefresh) {
emit(RoomsLoading());
}
emit(await createRoomsLoadedState(cache: !event.forceRefresh));
});
// 创建聊天室
on<RoomCreateEvent>((event, emit) async {
emit(RoomsLoading());
try {
if (Ability().isUserLogon()) {
String? model;
String? vendor;
if (event.model != null) {
final segs = event.model!.split(':');
model = event.model!.startsWith('v2@') ? event.model! : (segs.length > 1 ? segs.last : event.model);
vendor = event.model!.startsWith('v2@') ? '' : (segs.length > 1 ? segs.first : '');
}
await APIServer().createRoom(
name: event.name,
vendor: vendor,
model: model,
systemPrompt: event.prompt,
avatarId: event.avatarId,
avatarUrl: event.avatarUrl,
maxContext: event.maxContext,
initMessage: event.initMessage,
);
} else {
await chatMsgRepo.createRoom(
name: event.name,
category: 'chat',
model: event.model ?? 'gpt-4o',
systemPrompt: event.prompt,
userId: APIServer().localUserID(),
maxContext: event.maxContext,
);
}
emit(RoomOperationResult(true));
emit(await createRoomsLoadedState(cache: false));
} catch (e) {
emit(RoomOperationResult(false, error: e.toString()));
// emit(RoomsLoaded(const [], error: e.toString()));
}
});
// 删除聊天室
on<RoomDeleteEvent>((event, emit) async {
emit(RoomsLoading());
try {
if (Ability().isUserLogon()) {
await APIServer().deleteRoom(roomId: event.roomId);
} else {
var room = await chatMsgRepo.room(event.roomId);
if (room == null || room.category == 'system') {
return;
}
await chatMsgRepo.deleteRoom(event.roomId);
}
emit(await createRoomsLoadedState(cache: false));
} catch (e) {
emit(RoomsLoaded(const [], error: e.toString()));
}
});
// 更新聊天室信息
on<RoomUpdateEvent>((event, emit) async {
try {
if (Ability().isUserLogon()) {
final room = await APIServer().updateRoom(
roomId: event.roomId,
name: event.name!,
model: event.model != null
? (event.model!.startsWith('v2@') ? event.model! : event.model!.split(':').last)
: null,
vendor: event.model != null ? (event.model!.startsWith('v2@') ? '' : event.model!.split(':').first) : null,
systemPrompt: event.prompt!,
avatarId: event.avatarId,
avatarUrl: event.avatarUrl,
maxContext: event.maxContext,
initMessage: event.initMessage,
);
final states = await stateManager.loadRoomStates(event.roomId);
emit(
RoomLoaded(
Room(
room.name,
'chat',
description: room.description,
id: room.id,
userId: room.userId,
createdAt: room.createdAt,
lastActiveTime: room.lastActiveTime,
systemPrompt: room.systemPrompt,
priority: room.priority ?? 0,
model: room.model.startsWith('v2@') ? room.model : '${room.vendor}:${room.model}',
avatarId: room.avatarId,
avatarUrl: room.avatarUrl,
initMessage: room.initMessage,
roomType: room.roomType,
),
states,
examples: await APIServer().example(room.model),
cascading: false,
),
);
} else {
final room = await chatMsgRepo.room(event.roomId);
if (room != null) {
if (event.name != null && event.name != '') {
room.name = event.name!;
}
if (event.model != null && event.model != '') {
room.model = event.model!;
}
if (event.prompt != null && event.prompt != '') {
room.systemPrompt = event.prompt!;
}
if (event.maxContext != null) {
room.maxContext = event.maxContext!;
}
await chatMsgRepo.updateRoom(room);
final states = await stateManager.loadRoomStates(event.roomId);
emit(RoomLoaded(
room,
states,
examples: await APIServer().examples(),
cascading: false,
));
}
}
} catch (e) {
emit(RoomOperationResult(false, error: e.toString()));
}
});
on<GalleryRoomCopyEvent>((event, emit) async {
if (event.ids.isEmpty) {
return;
}
try {
final ids = await APIServer().copyRoomGallery(ids: event.ids);
emit(await createRoomsLoadedState(cache: false));
if (ids.isNotEmpty) {
emit(RoomOperationResult(true, redirect: '/room/${ids.first}/chat'));
}
} catch (e) {
emit(RoomCreateError(e));
}
});
on<RoomGalleriesLoadEvent>((event, emit) async {
try {
final resp = await APIServer().roomGalleries();
emit(RoomGalleriesLoaded(resp.galleries, tags: resp.tags));
} catch (e) {
emit(RoomGalleriesLoaded(const [], error: e));
}
});
// 创建群聊聊天室
on<GroupRoomCreateEvent>((event, emit) async {
emit(RoomsLoading());
try {
await APIServer().createGroupRoom(
name: event.name,
avatarUrl: event.avatarUrl,
members: event.members,
);
emit(GroupRoomUpdateResultState(true));
emit(awai
gitextract_69aiun7l/
├── .github/
│ └── workflows/
│ └── build_windows_app.yml
├── .gitignore
├── .metadata
├── AppRun
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── README.zh-CN.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── cc/
│ │ │ │ └── aicode/
│ │ │ │ └── flutter/
│ │ │ │ └── askaide/
│ │ │ │ └── askaide/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── values/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ └── values-v31/
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle
├── askaide.desktop
├── assets/
│ └── lottie/
│ └── empty_status.json
├── build-win-msix.bat
├── build-win.bat
├── devtools_options.yaml
├── docker-build.sh
├── flutter_launcher_icons.yaml
├── install.icns
├── install.iss
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── Runner-Bridging-Header.h
│ │ └── Runner.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ ├── IDEWorkspaceChecks.plist
│ └── WorkspaceSettings.xcsettings
├── lib/
│ ├── bloc/
│ │ ├── account_bloc.dart
│ │ ├── account_event.dart
│ │ ├── account_state.dart
│ │ ├── admin_payment_bloc.dart
│ │ ├── admin_payment_event.dart
│ │ ├── admin_payment_state.dart
│ │ ├── admin_room_bloc.dart
│ │ ├── admin_room_event.dart
│ │ ├── admin_room_state.dart
│ │ ├── background_image_bloc.dart
│ │ ├── background_image_event.dart
│ │ ├── background_image_state.dart
│ │ ├── bloc_manager.dart
│ │ ├── channel_bloc.dart
│ │ ├── channel_event.dart
│ │ ├── channel_state.dart
│ │ ├── chat_chat_bloc.dart
│ │ ├── chat_chat_event.dart
│ │ ├── chat_chat_state.dart
│ │ ├── chat_event.dart
│ │ ├── chat_message_bloc.dart
│ │ ├── chat_state.dart
│ │ ├── creative_island_bloc.dart
│ │ ├── creative_island_event.dart
│ │ ├── creative_island_state.dart
│ │ ├── free_count_bloc.dart
│ │ ├── free_count_event.dart
│ │ ├── free_count_state.dart
│ │ ├── gallery_bloc.dart
│ │ ├── gallery_event.dart
│ │ ├── gallery_state.dart
│ │ ├── group_chat_bloc.dart
│ │ ├── group_chat_event.dart
│ │ ├── group_chat_state.dart
│ │ ├── model_bloc.dart
│ │ ├── model_event.dart
│ │ ├── model_state.dart
│ │ ├── notify_bloc.dart
│ │ ├── notify_event.dart
│ │ ├── notify_state.dart
│ │ ├── payment_bloc.dart
│ │ ├── payment_event.dart
│ │ ├── payment_state.dart
│ │ ├── room_bloc.dart
│ │ ├── room_event.dart
│ │ ├── room_state.dart
│ │ ├── user_api_keys_bloc.dart
│ │ ├── user_api_keys_event.dart
│ │ ├── user_api_keys_state.dart
│ │ ├── user_bloc.dart
│ │ ├── user_event.dart
│ │ ├── user_state.dart
│ │ ├── version_bloc.dart
│ │ ├── version_event.dart
│ │ └── version_state.dart
│ ├── data/
│ │ └── migrate.dart
│ ├── helper/
│ │ ├── ability.dart
│ │ ├── cache.dart
│ │ ├── chat_token.dart
│ │ ├── color.dart
│ │ ├── constant.dart
│ │ ├── env.dart
│ │ ├── error.dart
│ │ ├── event.dart
│ │ ├── global_store.dart
│ │ ├── haptic_feedback.dart
│ │ ├── helper.dart
│ │ ├── http.dart
│ │ ├── image.dart
│ │ ├── logger.dart
│ │ ├── lru.dart
│ │ ├── model.dart
│ │ ├── model_resolver.dart
│ │ ├── path.dart
│ │ ├── platform.dart
│ │ ├── queue.dart
│ │ ├── tips.dart
│ │ └── upload.dart
│ ├── lang/
│ │ └── lang.dart
│ ├── main.dart
│ ├── page/
│ │ ├── admin/
│ │ │ ├── channels.dart
│ │ │ ├── channels_add.dart
│ │ │ ├── channels_edit.dart
│ │ │ ├── dashboard.dart
│ │ │ ├── messages.dart
│ │ │ ├── models.dart
│ │ │ ├── models_add.dart
│ │ │ ├── models_edit.dart
│ │ │ ├── payments.dart
│ │ │ ├── recently_messages.dart
│ │ │ ├── rooms.dart
│ │ │ ├── user.dart
│ │ │ └── users.dart
│ │ ├── app_scaffold.dart
│ │ ├── auth/
│ │ │ ├── signin_or_signup.dart
│ │ │ ├── signin_screen.dart
│ │ │ └── signup_screen.dart
│ │ ├── balance/
│ │ │ ├── free_statistics.dart
│ │ │ ├── payment.dart
│ │ │ ├── payment_history.dart
│ │ │ ├── price_block.dart
│ │ │ ├── quota_usage_details.dart
│ │ │ ├── quota_usage_statistics.dart
│ │ │ ├── web/
│ │ │ │ ├── payment_element.dart
│ │ │ │ └── payment_element_web.dart
│ │ │ ├── web_payment_proxy.dart
│ │ │ └── web_payment_result.dart
│ │ ├── chat/
│ │ │ ├── character_chat.dart
│ │ │ ├── character_create.dart
│ │ │ ├── character_edit.dart
│ │ │ ├── characters.dart
│ │ │ ├── component/
│ │ │ │ ├── character_box.dart
│ │ │ │ ├── group_avatar.dart
│ │ │ │ ├── group_empty.dart
│ │ │ │ ├── model_switcher.dart
│ │ │ │ └── stop_button.dart
│ │ │ ├── group/
│ │ │ │ ├── chat.dart
│ │ │ │ ├── create.dart
│ │ │ │ └── edit.dart
│ │ │ ├── home.dart
│ │ │ ├── home_chat.dart
│ │ │ └── home_chat_history.dart
│ │ ├── component/
│ │ │ ├── account_quota_card.dart
│ │ │ ├── advanced_button.dart
│ │ │ ├── animated_cursor.dart
│ │ │ ├── attached_button_panel.dart
│ │ │ ├── audio_player.dart
│ │ │ ├── avatar_selector.dart
│ │ │ ├── background_container.dart
│ │ │ ├── bottom_sheet_box.dart
│ │ │ ├── button.dart
│ │ │ ├── chat/
│ │ │ │ ├── chat_bubble.dart
│ │ │ │ ├── chat_input.dart
│ │ │ │ ├── chat_input_button.dart
│ │ │ │ ├── chat_preview.dart
│ │ │ │ ├── chat_share.dart
│ │ │ │ ├── empty.dart
│ │ │ │ ├── enhanced_selectable_text.dart
│ │ │ │ ├── file_upload.dart
│ │ │ │ ├── help_tips.dart
│ │ │ │ ├── markdown/
│ │ │ │ │ ├── citation.dart
│ │ │ │ │ ├── code.dart
│ │ │ │ │ ├── latex/
│ │ │ │ │ │ ├── latex_block_syntax.dart
│ │ │ │ │ │ ├── latex_element_builder.dart
│ │ │ │ │ │ └── latex_inline_syntax.dart
│ │ │ │ │ └── latex.dart
│ │ │ │ ├── markdown.dart
│ │ │ │ ├── message_state_manager.dart
│ │ │ │ ├── role_avatar.dart
│ │ │ │ ├── search_result.dart
│ │ │ │ ├── thinking_card.dart
│ │ │ │ └── voice_record.dart
│ │ │ ├── chat_tools_button.dart
│ │ │ ├── column_block.dart
│ │ │ ├── credit.dart
│ │ │ ├── dialog.dart
│ │ │ ├── effect/
│ │ │ │ └── glass.dart
│ │ │ ├── enhanced_button.dart
│ │ │ ├── enhanced_error.dart
│ │ │ ├── enhanced_input.dart
│ │ │ ├── enhanced_popup_menu.dart
│ │ │ ├── enhanced_textfield.dart
│ │ │ ├── file_preview.dart
│ │ │ ├── gallery_item_share.dart
│ │ │ ├── global_alert.dart
│ │ │ ├── gradient_style.dart
│ │ │ ├── group_list_widget.dart
│ │ │ ├── icon_box.dart
│ │ │ ├── icon_box_button.dart
│ │ │ ├── image.dart
│ │ │ ├── image_action.dart
│ │ │ ├── image_preview.dart
│ │ │ ├── invite_card.dart
│ │ │ ├── item_selector.dart
│ │ │ ├── item_selector_search.dart
│ │ │ ├── loading.dart
│ │ │ ├── message_box.dart
│ │ │ ├── model_indicator.dart
│ │ │ ├── model_item.dart
│ │ │ ├── multi_item_selector.dart
│ │ │ ├── notify_message.dart
│ │ │ ├── pagination.dart
│ │ │ ├── password_field.dart
│ │ │ ├── prompt_tags_selector.dart
│ │ │ ├── random_avatar.dart
│ │ │ ├── room_card.dart
│ │ │ ├── rotating_widget.dart
│ │ │ ├── select_mode_toolbar.dart
│ │ │ ├── share.dart
│ │ │ ├── sliver_component.dart
│ │ │ ├── social_icon.dart
│ │ │ ├── take_photo.dart
│ │ │ ├── theme/
│ │ │ │ ├── custom_size.dart
│ │ │ │ ├── custom_theme.dart
│ │ │ │ └── theme.dart
│ │ │ ├── transition_resolver.dart
│ │ │ ├── verify_code_input.dart
│ │ │ ├── video_player.dart
│ │ │ ├── weak_text_button.dart
│ │ │ └── windows.dart
│ │ ├── creative_island/
│ │ │ ├── draw/
│ │ │ │ ├── artistic_qr.dart
│ │ │ │ ├── artistic_wordart.dart
│ │ │ │ ├── components/
│ │ │ │ │ ├── artistic_style_selector.dart
│ │ │ │ │ ├── box.dart
│ │ │ │ │ ├── content_preview.dart
│ │ │ │ │ ├── creative_item.dart
│ │ │ │ │ ├── image_selector.dart
│ │ │ │ │ ├── image_size.dart
│ │ │ │ │ └── image_style_selector.dart
│ │ │ │ ├── data/
│ │ │ │ │ └── draw_history_datasource.dart
│ │ │ │ ├── draw_create.dart
│ │ │ │ ├── draw_list.dart
│ │ │ │ ├── draw_result.dart
│ │ │ │ └── image_edit_direct.dart
│ │ │ ├── gallery/
│ │ │ │ ├── components/
│ │ │ │ │ └── image_card.dart
│ │ │ │ ├── data/
│ │ │ │ │ └── gallery_datasource.dart
│ │ │ │ ├── gallery.dart
│ │ │ │ └── gallery_item.dart
│ │ │ ├── my_creation.dart
│ │ │ └── my_creation_item.dart
│ │ ├── custom_scaffold.dart
│ │ ├── data/
│ │ │ ├── chat_history_datasource.dart
│ │ │ ├── group_message_datasource.dart
│ │ │ └── notification_datasource.dart
│ │ ├── drawer.dart
│ │ ├── home.dart
│ │ ├── lab/
│ │ │ ├── avatar_selector.dart
│ │ │ ├── creative_models.dart
│ │ │ ├── draw_board.dart
│ │ │ ├── prompt.dart
│ │ │ └── user_center.dart
│ │ └── setting/
│ │ ├── account_security.dart
│ │ ├── article.dart
│ │ ├── background_selector.dart
│ │ ├── bind_phone_page.dart
│ │ ├── change_password.dart
│ │ ├── custom_home_models.dart
│ │ ├── destroy_account.dart
│ │ ├── diagnosis.dart
│ │ ├── notification.dart
│ │ ├── openai_setting.dart
│ │ ├── retrieve_password_screen.dart
│ │ ├── setting_screen.dart
│ │ └── user_api_keys.dart
│ └── repo/
│ ├── api/
│ │ ├── admin/
│ │ │ ├── channels.dart
│ │ │ ├── models.dart
│ │ │ ├── payment.dart
│ │ │ └── users.dart
│ │ ├── article.dart
│ │ ├── creative.dart
│ │ ├── image_model.dart
│ │ ├── info.dart
│ │ ├── keys.dart
│ │ ├── model.dart
│ │ ├── notification.dart
│ │ ├── page.dart
│ │ ├── payment.dart
│ │ ├── quota.dart
│ │ ├── room_gallery.dart
│ │ └── user.dart
│ ├── api_server.dart
│ ├── cache_repo.dart
│ ├── chat_message_repo.dart
│ ├── creative_island_repo.dart
│ ├── data/
│ │ ├── cache_data.dart
│ │ ├── chat_history.dart
│ │ ├── chat_message_data.dart
│ │ ├── creative_island_data.dart
│ │ ├── room_data.dart
│ │ └── settings_data.dart
│ ├── deepai_repo.dart
│ ├── model/
│ │ ├── chat_history.dart
│ │ ├── chat_message.dart
│ │ ├── creative_island_history.dart
│ │ ├── group.dart
│ │ ├── message.dart
│ │ ├── misc.dart
│ │ ├── model.dart
│ │ └── room.dart
│ ├── openai_repo.dart
│ ├── settings_repo.dart
│ └── stabilityai_repo.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── nginx.conf
├── pubspec.yaml
├── scripts/
│ ├── go.mod
│ ├── go.sum
│ ├── macos-icon-replace.sh
│ └── main.go
├── web/
│ ├── index.html
│ ├── manifest.json
│ ├── splash/
│ │ ├── splash.js
│ │ └── style.css
│ ├── sqflite_sw.js
│ └── sqlite3.wasm
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
Showing preview only (261K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3668 symbols across 292 files)
FILE: lib/bloc/account_bloc.dart
class AccountBloc (line 12) | class AccountBloc extends Bloc<AccountEvent, AccountState> {
FILE: lib/bloc/account_event.dart
class AccountEvent (line 3) | @immutable
class AccountLoadEvent (line 6) | class AccountLoadEvent extends AccountEvent {
class AccountSignOutEvent (line 12) | class AccountSignOutEvent extends AccountEvent {}
class AccountUpdateEvent (line 14) | class AccountUpdateEvent extends AccountEvent {
FILE: lib/bloc/account_state.dart
class AccountState (line 3) | @immutable
class AccountInitial (line 6) | class AccountInitial extends AccountState {}
class AccountLoading (line 8) | class AccountLoading extends AccountState {}
class AccountLoaded (line 10) | class AccountLoaded extends AccountState {
class AccountNeedSignIn (line 16) | class AccountNeedSignIn extends AccountState {}
FILE: lib/bloc/admin_payment_bloc.dart
class AdminPaymentBloc (line 10) | class AdminPaymentBloc extends Bloc<AdminPaymentEvent, AdminPaymentState> {
FILE: lib/bloc/admin_payment_event.dart
class AdminPaymentEvent (line 3) | @immutable
class AdminPaymentHistoriesLoadEvent (line 6) | class AdminPaymentHistoriesLoadEvent extends AdminPaymentEvent {
FILE: lib/bloc/admin_payment_state.dart
class AdminPaymentState (line 3) | @immutable
class AdminPaymentInitial (line 6) | final class AdminPaymentInitial extends AdminPaymentState {}
class AdminPaymentOperationResult (line 8) | class AdminPaymentOperationResult extends AdminPaymentState {
class AdminPaymentHistoriesLoaded (line 15) | class AdminPaymentHistoriesLoaded extends AdminPaymentState {
FILE: lib/bloc/admin_room_bloc.dart
class AdminRoomBloc (line 11) | class AdminRoomBloc extends Bloc<AdminRoomEvent, AdminRoomState> {
FILE: lib/bloc/admin_room_event.dart
class AdminRoomEvent (line 3) | @immutable
class AdminRoomsLoadEvent (line 6) | class AdminRoomsLoadEvent extends AdminRoomEvent {
class AdminRoomLoadEvent (line 12) | class AdminRoomLoadEvent extends AdminRoomEvent {
class AdminRoomRecentlyMessagesLoadEvent (line 19) | class AdminRoomRecentlyMessagesLoadEvent extends AdminRoomEvent {
class AdminRecentlyMessagesLoadEvent (line 31) | class AdminRecentlyMessagesLoadEvent extends AdminRoomEvent {
FILE: lib/bloc/admin_room_state.dart
class AdminRoomState (line 3) | @immutable
class AdminRoomInitial (line 6) | final class AdminRoomInitial extends AdminRoomState {}
class AdminRoomsLoaded (line 8) | final class AdminRoomsLoaded extends AdminRoomState {
class AdminRoomLoaded (line 14) | final class AdminRoomLoaded extends AdminRoomState {
class AdminRoomRecentlyMessagesLoaded (line 20) | final class AdminRoomRecentlyMessagesLoaded extends AdminRoomState {
class AdminRoomOperationResult (line 26) | class AdminRoomOperationResult extends AdminRoomState {
class AdminRecentlyMessagesLoaded (line 33) | class AdminRecentlyMessagesLoaded extends AdminRoomState {
FILE: lib/bloc/background_image_bloc.dart
class BackgroundImageBloc (line 9) | class BackgroundImageBloc
FILE: lib/bloc/background_image_event.dart
class BackgroundImageEvent (line 3) | @immutable
class BackgroundImageLoadEvent (line 6) | class BackgroundImageLoadEvent extends BackgroundImageEvent {}
FILE: lib/bloc/background_image_state.dart
class BackgroundImageState (line 3) | @immutable
class BackgroundImageInitial (line 6) | class BackgroundImageInitial extends BackgroundImageState {}
class BackgroundImageLoaded (line 8) | class BackgroundImageLoaded extends BackgroundImageState {
FILE: lib/bloc/bloc_manager.dart
class ChatBlocManager (line 7) | class ChatBlocManager {
method getBloc (line 24) | ChatMessageBloc getBloc(int roomId, {int? chatHistoryId})
method dispose (line 36) | void dispose()
class BlocExt (line 41) | abstract class BlocExt<K, V> extends Bloc<K, V> implements Disposable {
method dispose (line 45) | void dispose()
method close (line 50) | Future<void> close()
FILE: lib/bloc/channel_bloc.dart
class ChannelBloc (line 9) | class ChannelBloc extends Bloc<ChannelEvent, ChannelState> {
FILE: lib/bloc/channel_event.dart
class ChannelEvent (line 3) | @immutable
class ChannelsLoadEvent (line 6) | class ChannelsLoadEvent extends ChannelEvent {}
class ChannelLoadEvent (line 8) | class ChannelLoadEvent extends ChannelEvent {
class ChannelCreateEvent (line 14) | class ChannelCreateEvent extends ChannelEvent {
class ChannelUpdateEvent (line 20) | class ChannelUpdateEvent extends ChannelEvent {
class ChannelDeleteEvent (line 27) | class ChannelDeleteEvent extends ChannelEvent {
FILE: lib/bloc/channel_state.dart
class ChannelState (line 3) | @immutable
class ChannelInitial (line 6) | final class ChannelInitial extends ChannelState {}
class ChannelsLoaded (line 8) | class ChannelsLoaded extends ChannelState {
class ChannelLoaded (line 14) | class ChannelLoaded extends ChannelState {
class ChannelOperationResult (line 20) | class ChannelOperationResult extends ChannelState {
FILE: lib/bloc/chat_chat_bloc.dart
class ChatChatBloc (line 12) | class ChatChatBloc extends Bloc<ChatChatEvent, ChatChatState> {
FILE: lib/bloc/chat_chat_event.dart
class ChatChatEvent (line 3) | @immutable
class ChatChatLoadRecentHistories (line 6) | class ChatChatLoadRecentHistories extends ChatChatEvent {
class ChatChatNewChat (line 11) | class ChatChatNewChat extends ChatChatEvent {
class ChatChatDeleteHistory (line 16) | class ChatChatDeleteHistory extends ChatChatEvent {
FILE: lib/bloc/chat_chat_state.dart
class ChatChatState (line 3) | @immutable
class ChatChatInitial (line 6) | class ChatChatInitial extends ChatChatState {}
class ChatChatRecentHistoriesLoaded (line 8) | class ChatChatRecentHistoriesLoaded extends ChatChatState {
FILE: lib/bloc/chat_event.dart
class ChatMessageEvent (line 3) | @immutable
class ChatMessageReceivedEvent (line 6) | class ChatMessageReceivedEvent extends ChatMessageEvent {
class ChatMessageSendEvent (line 12) | class ChatMessageSendEvent extends ChatMessageEvent {
class ChatMessageGetRecentEvent (line 22) | class ChatMessageGetRecentEvent extends ChatMessageEvent {
class ChatMessageClearAllEvent (line 28) | class ChatMessageClearAllEvent extends ChatMessageEvent {}
class ChatMessageBreakContextEvent (line 30) | class ChatMessageBreakContextEvent extends ChatMessageEvent {}
class ChatMessageDeleteEvent (line 32) | class ChatMessageDeleteEvent extends ChatMessageEvent {
class ChatMessageStopEvent (line 38) | class ChatMessageStopEvent extends ChatMessageEvent {}
FILE: lib/bloc/chat_message_bloc.dart
class ChatMessageBloc (line 25) | class ChatMessageBloc extends BlocExt<ChatMessageEvent, ChatMessageState> {
method fixRoomId (line 47) | Future<int> fixRoomId(int? chatHistoryId)
method _deleteMessageEventHandler (line 58) | Future<void> _deleteMessageEventHandler(event, emit)
method _breakContextEventHandler (line 79) | Future<void> _breakContextEventHandler(event, emit)
method _clearAllEventHandler (line 139) | Future<void> _clearAllEventHandler(event, emit)
method _getRecentEventHandler (line 181) | Future<void> _getRecentEventHandler(event, emit)
method _stopEventHandler (line 204) | Future<void> _stopEventHandler(event, emit)
method resolveChatHistory (line 210) | Future<ChatHistory?> resolveChatHistory(Message message, int roomId)
method _messageSendEventHandler (line 228) | Future<void> _messageSendEventHandler(event, emit)
function queryRoomById (line 571) | Future<Room?> queryRoomById(ChatMessageRepository chatMsgRepo, int roomId)
FILE: lib/bloc/chat_state.dart
class ChatMessageState (line 3) | @immutable
class ChatMessageInitial (line 6) | class ChatMessageInitial extends ChatMessageState {}
class ChatMessagesLoaded (line 9) | class ChatMessagesLoaded extends ChatMessageState {
class ChatMessageError (line 26) | class ChatMessageError extends ChatMessageState {
class ChatMessageUpdated (line 32) | class ChatMessageUpdated extends ChatMessageState {
class ChatHistoryInited (line 41) | class ChatHistoryInited extends ChatMessageState {
FILE: lib/bloc/creative_island_bloc.dart
class CreativeIslandBloc (line 10) | class CreativeIslandBloc
FILE: lib/bloc/creative_island_event.dart
class CreativeIslandEvent (line 3) | @immutable
class CreativeIslandItemLoadEvent (line 20) | class CreativeIslandItemLoadEvent extends CreativeIslandEvent {
class CreativeIslandHistoriesAllLoadEvent (line 25) | class CreativeIslandHistoriesAllLoadEvent extends CreativeIslandEvent {
class CreativeIslandGalleryLoadEvent (line 32) | class CreativeIslandGalleryLoadEvent extends CreativeIslandEvent {
class CreativeIslandHistoriesLoadEvent (line 43) | class CreativeIslandHistoriesLoadEvent extends CreativeIslandEvent {
class CreativeIslandDeleteEvent (line 49) | class CreativeIslandDeleteEvent extends CreativeIslandEvent {
class CreativeIslandListLoadEvent (line 59) | class CreativeIslandListLoadEvent extends CreativeIslandEvent {
class CreativeIslandHistoryItemLoadEvent (line 65) | class CreativeIslandHistoryItemLoadEvent extends CreativeIslandEvent {
class CreativeIslandItemsV2LoadEvent (line 71) | class CreativeIslandItemsV2LoadEvent extends CreativeIslandEvent {
FILE: lib/bloc/creative_island_state.dart
class CreativeIslandState (line 3) | @immutable
class CreativeIslandInitial (line 6) | class CreativeIslandInitial extends CreativeIslandState {}
class CreativeIslandItemLoaded (line 16) | class CreativeIslandItemLoaded extends CreativeIslandState {
class CreativeIslandHistoriesLoading (line 25) | class CreativeIslandHistoriesLoading extends CreativeIslandInitial {}
class CreativeIslandHistoriesLoaded (line 27) | class CreativeIslandHistoriesLoaded extends CreativeIslandState {
class CreativeIslandGalleryLoaded (line 37) | class CreativeIslandGalleryLoaded extends CreativeIslandState {
class CreativeIslandHistoriesAllLoaded (line 45) | class CreativeIslandHistoriesAllLoaded extends CreativeIslandState {
class CreativeIslandListLoaded (line 54) | class CreativeIslandListLoaded extends CreativeIslandState {
class CreativeIslandHistoryItemLoading (line 70) | class CreativeIslandHistoryItemLoading extends CreativeIslandState {}
class CreativeIslandHistoryItemLoaded (line 72) | class CreativeIslandHistoryItemLoaded extends CreativeIslandState {
class CreativeIslandItemsV2Loaded (line 79) | class CreativeIslandItemsV2Loaded extends CreativeIslandState {
FILE: lib/bloc/free_count_bloc.dart
class FreeCountBloc (line 10) | class FreeCountBloc extends Bloc<FreeCountEvent, FreeCountState> {
FILE: lib/bloc/free_count_event.dart
class FreeCountEvent (line 3) | @immutable
class FreeCountReloadEvent (line 6) | class FreeCountReloadEvent extends FreeCountEvent {
class FreeCountReloadAllEvent (line 11) | class FreeCountReloadAllEvent extends FreeCountEvent {
FILE: lib/bloc/free_count_state.dart
class FreeCountState (line 3) | @immutable
class FreeCountInitial (line 6) | final class FreeCountInitial extends FreeCountState {}
class FreeCountLoadedState (line 8) | class FreeCountLoadedState extends FreeCountState {
method model (line 12) | FreeModelCount? model(String model)
FILE: lib/bloc/gallery_bloc.dart
class GalleryBloc (line 10) | class GalleryBloc extends Bloc<GalleryEvent, GalleryState> {
FILE: lib/bloc/gallery_event.dart
class GalleryEvent (line 3) | @immutable
class GalleryLoadEvent (line 6) | class GalleryLoadEvent extends GalleryEvent {
class GalleryItemLoadEvent (line 13) | class GalleryItemLoadEvent extends GalleryEvent {
FILE: lib/bloc/gallery_state.dart
class GalleryState (line 3) | @immutable
class GalleryInitial (line 6) | class GalleryInitial extends GalleryState {}
class GalleryLoaded (line 8) | class GalleryLoaded extends GalleryState {
class GalleryItemLoaded (line 14) | class GalleryItemLoaded extends GalleryState {
FILE: lib/bloc/group_chat_bloc.dart
class GroupChatBloc (line 15) | class GroupChatBloc extends Bloc<GroupChatEvent, GroupChatState> {
method loadDefaultChatMembers (line 177) | Future<List<int>> loadDefaultChatMembers(int groupId)
method updateDefaultChatMembers (line 188) | Future<List<int>> updateDefaultChatMembers(
FILE: lib/bloc/group_chat_event.dart
class GroupChatEvent (line 3) | @immutable
class GroupChatLoadEvent (line 6) | class GroupChatLoadEvent extends GroupChatEvent {
class GroupChatMessagesLoadEvent (line 13) | class GroupChatMessagesLoadEvent extends GroupChatEvent {
class GroupChatSendEvent (line 25) | class GroupChatSendEvent extends GroupChatEvent {
class GroupChatUpdateMessageStatusEvent (line 36) | class GroupChatUpdateMessageStatusEvent extends GroupChatEvent {
class GroupChatSendSystemEvent (line 42) | class GroupChatSendSystemEvent extends GroupChatEvent {
class GroupChatDeleteAllEvent (line 50) | class GroupChatDeleteAllEvent extends GroupChatEvent {
class GroupChatDeleteEvent (line 56) | class GroupChatDeleteEvent extends GroupChatEvent {
FILE: lib/bloc/group_chat_state.dart
class GroupChatState (line 3) | @immutable
class GroupChatInitial (line 6) | final class GroupChatInitial extends GroupChatState {}
class GroupChatLoaded (line 8) | class GroupChatLoaded extends GroupChatState {
class GroupDefaultMemberSelected (line 20) | class GroupDefaultMemberSelected extends GroupChatState {
class GroupChatMessagesLoaded (line 26) | class GroupChatMessagesLoaded extends GroupChatState {
FILE: lib/bloc/model_bloc.dart
class ModelBloc (line 9) | class ModelBloc extends Bloc<ModelEvent, ModelState> {
FILE: lib/bloc/model_event.dart
class ModelEvent (line 3) | @immutable
class ModelsLoadEvent (line 6) | class ModelsLoadEvent extends ModelEvent {}
class ModelLoadEvent (line 8) | class ModelLoadEvent extends ModelEvent {
class ModelCreateEvent (line 14) | class ModelCreateEvent extends ModelEvent {
class ModelUpdateEvent (line 20) | class ModelUpdateEvent extends ModelEvent {
class ModelDeleteEvent (line 27) | class ModelDeleteEvent extends ModelEvent {
FILE: lib/bloc/model_state.dart
class ModelState (line 3) | @immutable
class ModelInitial (line 6) | final class ModelInitial extends ModelState {}
class ModelsLoaded (line 8) | class ModelsLoaded extends ModelState {
class ModelLoaded (line 14) | class ModelLoaded extends ModelState {
class ModelOperationResult (line 20) | class ModelOperationResult extends ModelState {
FILE: lib/bloc/notify_bloc.dart
class NotifyBloc (line 7) | class NotifyBloc extends BlocExt<NotifyEvent, NotifyState> {
FILE: lib/bloc/notify_event.dart
class NotifyEvent (line 3) | @immutable
class NotifyFiredEvent (line 6) | class NotifyFiredEvent extends NotifyEvent {
class NotifyResetEvent (line 14) | class NotifyResetEvent extends NotifyEvent {}
FILE: lib/bloc/notify_state.dart
class NotifyState (line 3) | @immutable
class NotifyInitial (line 6) | class NotifyInitial extends NotifyState {}
class NotifyFired (line 8) | class NotifyFired extends NotifyState {
FILE: lib/bloc/payment_bloc.dart
class PaymentBloc (line 11) | class PaymentBloc extends Bloc<PaymentEvent, PaymentState> {
FILE: lib/bloc/payment_event.dart
class PaymentEvent (line 3) | @immutable
class PaymentLoadAppleProducts (line 6) | class PaymentLoadAppleProducts extends PaymentEvent {}
FILE: lib/bloc/payment_state.dart
class PaymentState (line 3) | @immutable
class PaymentInitial (line 6) | class PaymentInitial extends PaymentState {}
class PaymentAppleProductsLoaded (line 8) | class PaymentAppleProductsLoaded extends PaymentState {
FILE: lib/bloc/room_bloc.dart
class RoomBloc (line 17) | class RoomBloc extends BlocExt<RoomEvent, RoomState> {
method fixRoomId (line 21) | Future<int?> fixRoomId(int? chatHistoryId)
method loadRoom (line 33) | Future<RoomInServer> loadRoom(int roomId)
method createRoomsLoadedState (line 363) | Future<RoomsLoaded> createRoomsLoadedState({bool cache = true})
FILE: lib/bloc/room_event.dart
class RoomEvent (line 3) | @immutable
class RoomsLoadEvent (line 6) | class RoomsLoadEvent extends RoomEvent {
class RoomsRecentLoadEvent (line 12) | class RoomsRecentLoadEvent extends RoomEvent {
class RoomCreateEvent (line 16) | class RoomCreateEvent extends RoomEvent {
class GroupRoomCreateEvent (line 36) | class GroupRoomCreateEvent extends RoomEvent {
class GroupRoomUpdateEvent (line 48) | class GroupRoomUpdateEvent extends RoomEvent {
class RoomDeleteEvent (line 62) | class RoomDeleteEvent extends RoomEvent {
class RoomLoadEvent (line 68) | class RoomLoadEvent extends RoomEvent {
class RoomUpdateEvent (line 75) | class RoomUpdateEvent extends RoomEvent {
class GalleryRoomCopyEvent (line 98) | class GalleryRoomCopyEvent extends RoomEvent {
class RoomGalleriesLoadEvent (line 104) | class RoomGalleriesLoadEvent extends RoomEvent {
FILE: lib/bloc/room_state.dart
class RoomState (line 3) | @immutable
class RoomInitial (line 6) | class RoomInitial extends RoomState {}
class RoomsLoading (line 8) | class RoomsLoading extends RoomState {}
class RoomsLoaded (line 10) | class RoomsLoaded extends RoomState {
class RoomsRecentLoaded (line 18) | class RoomsRecentLoaded extends RoomState {
class RoomLoaded (line 25) | class RoomLoaded extends RoomState {
class RoomCreateError (line 45) | class RoomCreateError extends RoomState {
class RoomGalleriesLoaded (line 51) | class RoomGalleriesLoaded extends RoomState {
class GroupRoomUpdateResultState (line 59) | class GroupRoomUpdateResultState extends RoomState {
class RoomOperationResult (line 66) | class RoomOperationResult extends RoomState {
FILE: lib/bloc/user_api_keys_bloc.dart
class UserApiKeysBloc (line 9) | class UserApiKeysBloc extends Bloc<UserApiKeysEvent, UserApiKeysState> {
FILE: lib/bloc/user_api_keys_event.dart
class UserApiKeysEvent (line 3) | @immutable
class UserApiKeysLoad (line 6) | class UserApiKeysLoad extends UserApiKeysEvent {}
class UserApiKeyLoad (line 8) | class UserApiKeyLoad extends UserApiKeysEvent {
class UserApiKeyCreate (line 14) | class UserApiKeyCreate extends UserApiKeysEvent {
class UserApiKeyDelete (line 20) | class UserApiKeyDelete extends UserApiKeysEvent {
FILE: lib/bloc/user_api_keys_state.dart
class UserApiKeysState (line 3) | @immutable
class UserApiKeysInitial (line 6) | final class UserApiKeysInitial extends UserApiKeysState {}
class UserApiKeysLoaded (line 8) | class UserApiKeysLoaded extends UserApiKeysState {
class UserApiKeyLoaded (line 14) | class UserApiKeyLoaded extends UserApiKeysState {
class UserApiKeyCreated (line 20) | class UserApiKeyCreated extends UserApiKeysState {
FILE: lib/bloc/user_bloc.dart
class UserBloc (line 11) | class UserBloc extends Bloc<UserEvent, UserState> {
FILE: lib/bloc/user_event.dart
class UserEvent (line 3) | @immutable
class UserLoadEvent (line 6) | class UserLoadEvent extends UserEvent {
class UserListLoadEvent (line 12) | class UserListLoadEvent extends UserEvent {
class UserQuotaLoadEvent (line 24) | class UserQuotaLoadEvent extends UserEvent {
FILE: lib/bloc/user_state.dart
class UserState (line 3) | @immutable
class UserInitial (line 6) | final class UserInitial extends UserState {}
class UserLoaded (line 8) | class UserLoaded extends UserState {
class UserOperationResult (line 14) | class UserOperationResult extends UserState {
class UsersLoaded (line 21) | class UsersLoaded extends UserState {
class UserQuotaLoaded (line 27) | class UserQuotaLoaded extends UserState {
FILE: lib/bloc/version_bloc.dart
class VersionBloc (line 9) | class VersionBloc extends Bloc<VersionEvent, VersionState> {
FILE: lib/bloc/version_event.dart
class VersionEvent (line 3) | @immutable
class VersionCheckEvent (line 6) | class VersionCheckEvent extends VersionEvent {}
FILE: lib/bloc/version_state.dart
class VersionState (line 3) | @immutable
class VersionInitial (line 6) | class VersionInitial extends VersionState {}
class VersionCheckLoaded (line 8) | class VersionCheckLoaded extends VersionState {
FILE: lib/data/migrate.dart
function migrate (line 5) | Future<void> migrate(db, oldVersion, newVersion)
function initDatabase (line 120) | void initDatabase(db, version)
function initUserDefaultRooms (line 216) | Future<void> initUserDefaultRooms(Database db, {int? userId})
FILE: lib/helper/ability.dart
class Ability (line 7) | class Ability {
method isUserLogon (line 133) | bool isUserLogon()
method usingLocalOpenAIModel (line 143) | bool usingLocalOpenAIModel(String model)
method supportImglocUploader (line 186) | bool supportImglocUploader()
method supportQiniuUploader (line 192) | bool supportQiniuUploader()
FILE: lib/helper/cache.dart
class Cache (line 4) | class Cache {
method boolGet (line 21) | Future<bool> boolGet({required String key})
method remove (line 30) | Future<void> remove({required String key})
method clearAll (line 34) | Future<void> clearAll()
method setBool (line 38) | Future<void> setBool({
method setString (line 46) | Future<void> setString({
method stringGet (line 54) | Future<String?> stringGet({required String key})
method setInt (line 58) | Future<int> setInt({
method intGet (line 67) | Future<int> intGet({required String key})
FILE: lib/helper/chat_token.dart
function tokenCount (line 5) | int tokenCount(String model, String message)
FILE: lib/helper/color.dart
function colorToString (line 4) | String colorToString(Color color, {String defaultColor = 'FF000000'})
function stringToColor (line 13) | Color stringToColor(String colorString, {Color defaultColor = Colors.bla...
FILE: lib/helper/error.dart
function resolveErrorMessage (line 5) | Object resolveErrorMessage(dynamic e, {bool isChat = false})
function resolveHTTPStatusCode (line 20) | Object? resolveHTTPStatusCode(int statusCode,
FILE: lib/helper/event.dart
class GlobalEvent (line 1) | class GlobalEvent {
method on (line 14) | Function() on(String event, Function(dynamic data) callback)
method emit (line 27) | void emit(String event, [dynamic data])
FILE: lib/helper/global_store.dart
class GlobalStore (line 3) | class GlobalStore {
FILE: lib/helper/haptic_feedback.dart
class HapticFeedbackHelper (line 3) | class HapticFeedbackHelper {
method lightImpact (line 4) | Future<void> lightImpact()
method mediumImpact (line 8) | Future<void> mediumImpact()
method heavyImpact (line 12) | Future<void> heavyImpact()
FILE: lib/helper/helper.dart
function randomId (line 13) | String randomId()
function writeImageFromBase64 (line 18) | Future<String> writeImageFromBase64(String base64, String ext)
function filenameWithoutExt (line 28) | String filenameWithoutExt(String filePath)
function writeTempFile (line 38) | Future<File> writeTempFile(String path, Uint8List bytes)
function readTempFile (line 44) | Future<Uint8List> readTempFile(String path)
function writeStringFileToDocumentsDirectory (line 50) | Future<void> writeStringFileToDocumentsDirectory(String path, String con...
function readStringFileFromDocumentsDirectory (line 61) | Future<String> readStringFileFromDocumentsDirectory(String path)
function removeExternalFile (line 71) | Future<void> removeExternalFile(String externalFilepath)
function copyExternalFileToAppDocs (line 83) | Future<String> copyExternalFileToAppDocs(String externalFilePath)
function humanTime (line 112) | String humanTime(DateTime? ts, {bool withTime = false})
function resolveError (line 139) | String resolveError(BuildContext context, Object error)
FILE: lib/helper/http.dart
class HttpClient (line 6) | class HttpClient {
method init (line 20) | init()
method get (line 38) | Future<Response> get(
method getCached (line 47) | Future<Response> getCached(
method cleanCache (line 77) | Future<void> cleanCache()
method post (line 81) | Future<Response> post(
method postJSON (line 101) | Future<Response> postJSON(
method put (line 121) | Future<Response> put(
method putJSON (line 136) | Future<Response> putJSON(
method delete (line 151) | Future<Response> delete(
FILE: lib/helper/image.dart
function imageURL (line 1) | String imageURL(String url, String filter)
function isImage (line 17) | bool isImage(String url)
FILE: lib/helper/logger.dart
class Logger (line 7) | class Logger {
FILE: lib/helper/lru.dart
class Disposable (line 3) | abstract class Disposable {
method dispose (line 4) | void dispose()
class LRUCache (line 7) | class LRUCache<K, V extends Disposable> {
method containsKey (line 13) | bool containsKey(K key)
method get (line 17) | V? get(K key)
method put (line 28) | void put(K key, V value)
method remove (line 40) | void remove(K key)
method clear (line 47) | void clear()
FILE: lib/helper/model.dart
class ModelAggregate (line 7) | class ModelAggregate {
method init (line 10) | void init(SettingRepository settings)
method models (line 15) | Future<List<mm.Model>> models({bool cache = true})
method model (line 44) | Future<mm.Model> model(String uid)
FILE: lib/helper/model_resolver.dart
class ModelResolver (line 16) | class ModelResolver {
method init (line 22) | void init({
method audioToText (line 36) | Future<String> audioToText(File file)
method request (line 45) | Future request({
method _stabilityAIModel (line 86) | Future<void> _stabilityAIModel({
method _waitForTasks (line 114) | Future<void> _waitForTasks(
method _deepAIModel (line 137) | Future<void> _deepAIModel({
method _openAIModel (line 154) | Future<void> _openAIModel({
method _buildRequestContext (line 187) | List<ChatMessage> _buildRequestContext(
FILE: lib/helper/path.dart
class PathHelper (line 7) | class PathHelper {
method toMap (line 67) | Map<String, String> toMap()
FILE: lib/helper/platform.dart
class PlatformTool (line 5) | class PlatformTool {
method isDesktop (line 6) | bool isDesktop()
method isDesktopAndWeb (line 10) | bool isDesktopAndWeb()
method isMobile (line 14) | bool isMobile()
method isIOS (line 18) | bool isIOS()
method isAndroid (line 26) | bool isAndroid()
method isWeb (line 34) | bool isWeb()
method isMacOS (line 38) | bool isMacOS()
method isWindows (line 46) | bool isWindows()
method isLinux (line 54) | bool isLinux()
method operatingSystem (line 62) | String operatingSystem()
method operatingSystemVersion (line 70) | String operatingSystemVersion()
method localeName (line 78) | String localeName()
FILE: lib/helper/queue.dart
class QueueFinishedException (line 4) | class QueueFinishedException implements Exception {
class GracefulQueue (line 10) | class GracefulQueue<T> {
method add (line 15) | void add(T item)
method dispose (line 23) | void dispose()
method listen (line 27) | Future<void> listen(
method finish (line 48) | void finish()
FILE: lib/helper/upload.dart
class ImageUploader (line 15) | class ImageUploader {
method upload (line 26) | Future<UploadedFile> upload(String path, {String? usage})
method base64 (line 36) | Future<String> base64({
method uploadData (line 71) | Future<UploadedFile> uploadData(Uint8List imageData, {String? usage})
method _imageDataCompress (line 80) | Future<Uint8List?> _imageDataCompress(Uint8List imageData,
method _imageCompress (line 153) | Future<Uint8List?> _imageCompress(String path,
class UploadedFile (line 234) | class UploadedFile {
class ImglocUploader (line 241) | class ImglocUploader {
method upload (line 247) | Future<UploadedFile> upload(
class QiniuUploader (line 276) | class QiniuUploader {
method upload (line 281) | Future<UploadedFile> upload(
method uploadFile (line 311) | Future<UploadedFile> uploadFile(String path, {String? usage})
FILE: lib/lang/lang.dart
class LanguageText (line 1031) | class LanguageText {
method toString (line 1037) | String toString()
function resolveSystemLanguage (line 1047) | String resolveSystemLanguage(String deviceLocale)
FILE: lib/main.dart
function main (line 132) | void main()
class MyApp (line 280) | class MyApp extends StatefulWidget {
method createState (line 1275) | State<MyApp> createState()
class _MyAppState (line 1278) | class _MyAppState extends State<MyApp> {
method initState (line 1280) | void initState()
method build (line 1323) | Widget build(BuildContext context)
function createLightThemeData (line 1373) | ThemeData createLightThemeData()
function createDarkThemeData (line 1405) | ThemeData createDarkThemeData()
FILE: lib/page/admin/channels.dart
class ChannelsPage (line 18) | class ChannelsPage extends StatefulWidget {
method createState (line 26) | State<ChannelsPage> createState()
class _ChannelsPageState (line 29) | class _ChannelsPageState extends State<ChannelsPage> {
method initState (line 34) | void initState()
method build (line 50) | Widget build(BuildContext context)
method buildChannelItem (line 125) | Widget buildChannelItem(
FILE: lib/page/admin/channels_add.dart
class ChannelAddPage (line 22) | class ChannelAddPage extends StatefulWidget {
method createState (line 30) | State<ChannelAddPage> createState()
class _ChannelAddPageState (line 33) | class _ChannelAddPageState extends State<ChannelAddPage> {
method dispose (line 58) | void dispose()
method initState (line 69) | void initState()
method build (line 83) | Widget build(BuildContext context)
method onSubmit (line 274) | void onSubmit()
method buildSelectedChannelTypeText (line 311) | String buildSelectedChannelTypeText()
FILE: lib/page/admin/channels_edit.dart
class ChannelEditPage (line 21) | class ChannelEditPage extends StatefulWidget {
method createState (line 31) | State<ChannelEditPage> createState()
class _ChannelEditPageState (line 34) | class _ChannelEditPageState extends State<ChannelEditPage> {
method dispose (line 62) | void dispose()
method initState (line 73) | void initState()
method build (line 90) | Widget build(BuildContext context)
method onSubmit (line 296) | void onSubmit()
method buildSelectedChannelTypeText (line 337) | String buildSelectedChannelTypeText()
FILE: lib/page/admin/dashboard.dart
class AdminDashboardPage (line 13) | class AdminDashboardPage extends StatefulWidget {
method createState (line 18) | State<AdminDashboardPage> createState()
class _AdminDashboardPageState (line 21) | class _AdminDashboardPageState extends State<AdminDashboardPage> {
method build (line 23) | Widget build(BuildContext context)
FILE: lib/page/admin/messages.dart
class AdminRoomMessagesPage (line 20) | class AdminRoomMessagesPage extends StatefulWidget {
method createState (line 34) | State<AdminRoomMessagesPage> createState()
class _AdminRoomMessagesPageState (line 37) | class _AdminRoomMessagesPageState extends State<AdminRoomMessagesPage> {
method dispose (line 42) | void dispose()
method initState (line 48) | void initState()
method build (line 71) | Widget build(BuildContext context)
FILE: lib/page/admin/models.dart
class AdminModelsPage (line 22) | class AdminModelsPage extends StatefulWidget {
method createState (line 30) | State<AdminModelsPage> createState()
class _AdminModelsPageState (line 33) | class _AdminModelsPageState extends State<AdminModelsPage> {
method searchChannel (line 41) | AdminChannel searchChannel(AdminModelProvider provider)
method initState (line 61) | void initState()
method build (line 78) | Widget build(BuildContext context)
method buildModelItem (line 186) | Widget buildModelItem(
method buildAvatar (line 337) | Widget buildAvatar(AdminModel mod)
method buildModelDescription (line 360) | String buildModelDescription(AdminModel mod)
FILE: lib/page/admin/models_add.dart
class AdminModelCreatePage (line 39) | class AdminModelCreatePage extends StatefulWidget {
method createState (line 47) | State<AdminModelCreatePage> createState()
class _AdminModelCreatePageState (line 50) | class _AdminModelCreatePageState extends State<AdminModelCreatePage> {
method dispose (line 107) | void dispose()
method initState (line 125) | void initState()
method build (line 148) | Widget build(BuildContext context)
method onSubmit (line 1034) | void onSubmit()
method buildChannelName (line 1108) | String buildChannelName(AdminModelProvider provider)
FILE: lib/page/admin/models_edit.dart
class AdminModelEditPage (line 39) | class AdminModelEditPage extends StatefulWidget {
method createState (line 49) | State<AdminModelEditPage> createState()
class _AdminModelEditPageState (line 52) | class _AdminModelEditPageState extends State<AdminModelEditPage> {
method dispose (line 112) | void dispose()
method initState (line 129) | void initState()
method build (line 155) | Widget build(BuildContext context)
method onSubmit (line 1109) | void onSubmit()
method buildChannelName (line 1185) | String buildChannelName(AdminModelProvider provider)
FILE: lib/page/admin/payments.dart
class PaymentHistoriesPage (line 19) | class PaymentHistoriesPage extends StatefulWidget {
method createState (line 27) | State<PaymentHistoriesPage> createState()
class _PaymentHistoriesPageState (line 30) | class _PaymentHistoriesPageState extends State<PaymentHistoriesPage> {
method initState (line 41) | void initState()
method dispose (line 51) | void dispose()
method build (line 57) | Widget build(BuildContext context)
method buildHistoryInfo (line 189) | Widget buildHistoryInfo(
function buildAvatar (line 312) | Widget buildAvatar(
function buildTags (line 341) | Widget buildTags(BuildContext context, CustomColors customColors, AdminP...
function buildTag (line 355) | Widget buildTag(BuildContext context, CustomColors customColors, String s)
FILE: lib/page/admin/recently_messages.dart
class AdminRecentlyMessagesPage (line 17) | class AdminRecentlyMessagesPage extends StatefulWidget {
method createState (line 23) | State<AdminRecentlyMessagesPage> createState()
class _AdminRecentlyMessagesPageState (line 26) | class _AdminRecentlyMessagesPageState extends State<AdminRecentlyMessage...
method initState (line 37) | void initState()
method dispose (line 47) | void dispose()
method build (line 53) | Widget build(BuildContext context)
FILE: lib/page/admin/rooms.dart
class AdminRoomsPage (line 21) | class AdminRoomsPage extends StatefulWidget {
method createState (line 31) | State<AdminRoomsPage> createState()
class _AdminRoomsPageState (line 34) | class _AdminRoomsPageState extends State<AdminRoomsPage> {
method initState (line 36) | void initState()
method build (line 42) | Widget build(BuildContext context)
method _buildAvatar (line 181) | Widget _buildAvatar(RoomInServer room)
FILE: lib/page/admin/user.dart
class AdminUserPage (line 22) | class AdminUserPage extends StatefulWidget {
method createState (line 32) | State<AdminUserPage> createState()
class _AdminUserPageState (line 35) | class _AdminUserPageState extends State<AdminUserPage> {
method initState (line 37) | void initState()
method build (line 44) | Widget build(BuildContext context)
method buildPaymentDetails (line 333) | Widget buildPaymentDetails(
method _buildTagForItem (line 431) | Widget _buildTagForItem(QuotaDetail item)
method _buildTag (line 443) | Widget _buildTag(String text, Color color)
FILE: lib/page/admin/users.dart
class AdminUsersPage (line 22) | class AdminUsersPage extends StatefulWidget {
method createState (line 30) | State<AdminUsersPage> createState()
class _AdminUsersPageState (line 33) | class _AdminUsersPageState extends State<AdminUsersPage> {
method initState (line 44) | void initState()
method dispose (line 54) | void dispose()
method build (line 60) | Widget build(BuildContext context)
method buildUserInfo (line 192) | Widget buildUserInfo(
function buildUserAvatar (line 339) | Widget buildUserAvatar(
function buildTags (line 365) | Widget buildTags(BuildContext context, CustomColors customColors, AdminU...
function buildTag (line 391) | Widget buildTag(BuildContext context, CustomColors customColors, String s)
FILE: lib/page/app_scaffold.dart
class AppScaffold (line 12) | class AppScaffold extends StatefulWidget {
method createState (line 21) | State<AppScaffold> createState()
class _AppScaffoldState (line 24) | class _AppScaffoldState extends State<AppScaffold> {
method dispose (line 31) | void dispose()
method initState (line 39) | void initState()
method _bottomNavigationBarList (line 61) | List<BottomNavigationBarConfig> _bottomNavigationBarList(
method build (line 122) | Widget build(BuildContext context)
method _calculateSelectedIndex (line 158) | int _calculateSelectedIndex(BuildContext context)
method _onTap (line 170) | void _onTap(BuildContext context, int index)
function createAnimatedNavBarItem (line 180) | BottomNavigationBarItem createAnimatedNavBarItem({
class BottomNavigationBarConfig (line 199) | class BottomNavigationBarConfig {
FILE: lib/page/auth/signin_or_signup.dart
class SigninOrSignupScreen (line 23) | class SigninOrSignupScreen extends StatefulWidget {
method createState (line 40) | State<SigninOrSignupScreen> createState()
class _SigninOrSignupScreenState (line 43) | class _SigninOrSignupScreenState extends State<SigninOrSignupScreen> {
method initState (line 53) | void initState()
method dispose (line 59) | void dispose()
method build (line 68) | Widget build(BuildContext context)
method signInWithPassword (line 107) | Widget signInWithPassword(
method signInOrSignUpWithSMSOrEmailCode (line 221) | Widget signInOrSignUpWithSMSOrEmailCode(
FILE: lib/page/auth/signin_screen.dart
class SignInScreen (line 33) | class SignInScreen extends StatefulWidget {
method createState (line 40) | State<SignInScreen> createState()
class _SignInScreenState (line 43) | class _SignInScreenState extends State<SignInScreen> {
method initState (line 57) | void initState()
method dispose (line 143) | void dispose()
method build (line 150) | Widget build(BuildContext context)
method _buildUserTermsAndPrivicy (line 323) | Row _buildUserTermsAndPrivicy(CustomColors customColors, BuildContext ...
method _buildThirdPartySignInButtons (line 396) | Widget _buildThirdPartySignInButtons(BuildContext context, CustomColor...
FILE: lib/page/auth/signup_screen.dart
class SignupScreen (line 28) | class SignupScreen extends StatefulWidget {
method createState (line 35) | State<SignupScreen> createState()
class _SignupScreenState (line 38) | class _SignupScreenState extends State<SignupScreen> {
method initState (line 56) | void initState()
method dispose (line 81) | void dispose()
method build (line 95) | Widget build(BuildContext context)
method _buildUserTermsAndPrivicy (line 376) | Row _buildUserTermsAndPrivicy(CustomColors customColors, BuildContext ...
FILE: lib/page/balance/free_statistics.dart
class FreeStatisticsPage (line 18) | class FreeStatisticsPage extends StatefulWidget {
method createState (line 24) | State<FreeStatisticsPage> createState()
class _FreeStatisticsPageState (line 27) | class _FreeStatisticsPageState extends State<FreeStatisticsPage> {
method initState (line 29) | void initState()
method build (line 35) | Widget build(BuildContext context)
method buildLeftCountWidget (line 197) | Widget buildLeftCountWidget({required int leftCount, required int maxC...
FILE: lib/page/balance/payment.dart
class PaymentScreen (line 37) | class PaymentScreen extends StatefulWidget {
method createState (line 42) | State<PaymentScreen> createState()
class _PaymentScreenState (line 45) | class _PaymentScreenState extends State<PaymentScreen> {
method initState (line 50) | void initState()
method dispose (line 80) | void dispose()
method _listenToPurchaseUpdated (line 91) | void _listenToPurchaseUpdated(
method _closePaymentLoading (line 162) | void _closePaymentLoading()
method _startPaymentLoading (line 171) | void _startPaymentLoading()
method build (line 184) | Widget build(BuildContext context)
method handlePaymentForWeb (line 396) | void handlePaymentForWeb(PaymentAppleProductsLoaded state, BuildContex...
method handlePaymentForPC (line 481) | void handlePaymentForPC(
method handlePaymentForAndroid (line 550) | void handlePaymentForAndroid(
method createAppApplePay (line 620) | Future<void> createAppApplePay()
method createWebOrWapAlipay (line 630) | Future<void> createWebOrWapAlipay({required String source})
method paymentSource (line 682) | String paymentSource()
method createWechatPayment (line 692) | Future<void> createWechatPayment(PaymentProduct product)
method createStripePayment (line 784) | Future<void> createStripePayment(PaymentProduct product)
method createAppAlipay (line 942) | Future<void> createAppAlipay()
class PaymentMethodItem (line 994) | class PaymentMethodItem extends StatelessWidget {
method build (line 1001) | Widget build(BuildContext context)
FILE: lib/page/balance/payment_history.dart
class PaymentHistoryScreen (line 15) | class PaymentHistoryScreen extends StatefulWidget {
method createState (line 20) | State<PaymentHistoryScreen> createState()
class _PaymentHistoryScreenState (line 23) | class _PaymentHistoryScreenState extends State<PaymentHistoryScreen> {
method build (line 25) | Widget build(BuildContext context)
method _buildQuotaDetailPage (line 85) | Widget _buildQuotaDetailPage(BuildContext context, QuotaResp quota, Cu...
method _buildTagForItem (line 164) | Widget _buildTagForItem(QuotaDetail item)
method _buildTag (line 176) | Widget _buildTag(String text, Color color)
FILE: lib/page/balance/price_block.dart
class PriceBlock (line 10) | class PriceBlock extends StatelessWidget {
method build (line 27) | Widget build(BuildContext context)
FILE: lib/page/balance/quota_usage_details.dart
class QuotaUsageDetailScreen (line 11) | class QuotaUsageDetailScreen extends StatefulWidget {
method createState (line 22) | State<QuotaUsageDetailScreen> createState()
class _QuotaUsageDetailScreenState (line 25) | class _QuotaUsageDetailScreenState extends State<QuotaUsageDetailScreen> {
method initState (line 30) | void initState()
method build (line 42) | Widget build(BuildContext context)
method _buildQuotaUsagePage (line 71) | Widget _buildQuotaUsagePage(
FILE: lib/page/balance/quota_usage_statistics.dart
class QuotaUsageStatisticsScreen (line 15) | class QuotaUsageStatisticsScreen extends StatefulWidget {
method createState (line 20) | State<QuotaUsageStatisticsScreen> createState()
class _QuotaUsageStatisticsScreenState (line 23) | class _QuotaUsageStatisticsScreenState extends State<QuotaUsageStatistic...
method initState (line 28) | void initState()
method build (line 40) | Widget build(BuildContext context)
method _buildQuotaUsagePage (line 80) | Widget _buildQuotaUsagePage(
FILE: lib/page/balance/web/payment_element.dart
function pay (line 4) | Future<PaymentIntent> pay(String paymentId, {String? action})
function closeWindow (line 8) | void closeWindow()
class PlatformPaymentElement (line 12) | class PlatformPaymentElement extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/page/balance/web/payment_element_web.dart
function pay (line 7) | Future<PaymentIntent> pay(String paymentId, {String? action})
function closeWindow (line 25) | void closeWindow()
class PlatformPaymentElement (line 29) | class PlatformPaymentElement extends StatelessWidget {
method build (line 35) | Widget build(BuildContext context)
FILE: lib/page/balance/web_payment_proxy.dart
class WebPaymentProxy (line 18) | class WebPaymentProxy extends StatefulWidget {
method createState (line 37) | State<WebPaymentProxy> createState()
class _WebPaymentProxyState (line 40) | class _WebPaymentProxyState extends State<WebPaymentProxy> {
method initState (line 42) | void initState()
method build (line 50) | Widget build(BuildContext context)
FILE: lib/page/balance/web_payment_result.dart
class WebPaymentResult (line 9) | class WebPaymentResult extends StatefulWidget {
method createState (line 19) | State<WebPaymentResult> createState()
class _WebPaymentResultState (line 22) | class _WebPaymentResultState extends State<WebPaymentResult> {
method initState (line 27) | void initState()
method build (line 61) | Widget build(BuildContext context)
method buildResult (line 96) | List<Widget> buildResult()
FILE: lib/page/chat/character_chat.dart
class CharacterChatPage (line 43) | class CharacterChatPage extends StatefulWidget {
method createState (line 56) | State<CharacterChatPage> createState()
class _CharacterChatPageState (line 59) | class _CharacterChatPageState extends State<CharacterChatPage> {
method initState (line 88) | void initState()
method dispose (line 127) | void dispose()
method build (line 135) | Widget build(BuildContext context)
method _buildChatComponents (line 152) | Widget _buildChatComponents(CustomColors customColors)
method _buildChatPreviewArea (line 289) | BlocConsumer<ChatMessageBloc, ChatMessageState> _buildChatPreviewArea(
method _buildAppBar (line 428) | AppBar _buildAppBar(BuildContext context, CustomColors customColors)
method createNewChat (line 492) | void createNewChat()
method _handleSubmit (line 500) | void _handleSubmit(
function handleDeleteMessage (line 628) | void handleDeleteMessage(BuildContext context, int id, {int? chatHistory...
function handleOpenExampleQuestion (line 638) | void handleOpenExampleQuestion(
FILE: lib/page/chat/character_create.dart
class CharacterCreatePage (line 36) | class CharacterCreatePage extends StatefulWidget {
method createState (line 41) | State<CharacterCreatePage> createState()
class _CharacterCreatePageState (line 44) | class _CharacterCreatePageState extends State<CharacterCreatePage> {
method initState (line 71) | void initState()
method dispose (line 82) | void dispose()
method build (line 89) | Widget build(BuildContext context)
method buildCustomCharacter (line 139) | Widget buildCustomCharacter(CustomColors customColors, BuildContext co...
function openSelectModelDialog (line 406) | void openSelectModelDialog(
function future (line 415) | future()
function openSystemPromptSelectDialog (line 467) | void openSystemPromptSelectDialog(
class ChatMemory (line 526) | class ChatMemory {
FILE: lib/page/chat/character_edit.dart
class CharacterEditPage (line 34) | class CharacterEditPage extends StatefulWidget {
method createState (line 40) | State<CharacterEditPage> createState()
class _CharacterEditPageState (line 43) | class _CharacterEditPageState extends State<CharacterEditPage> {
method initState (line 72) | void initState()
method dispose (line 86) | void dispose()
method build (line 93) | Widget build(BuildContext context)
FILE: lib/page/chat/characters.dart
class CharactersPage (line 24) | class CharactersPage extends StatefulWidget {
method createState (line 29) | State<CharactersPage> createState()
class _CharactersPageState (line 32) | class _CharactersPageState extends State<CharactersPage> {
method initState (line 34) | void initState()
method build (line 43) | Widget build(BuildContext context)
method buildColumnTitle (line 172) | Widget buildColumnTitle(BuildContext context, CustomColors customColor...
method buildBody (line 183) | Widget buildBody(CustomColors customColors, RoomsLoaded state, BuildCo...
method onItemSelected (line 242) | void onItemSelected(RoomGallery item)
FILE: lib/page/chat/component/character_box.dart
class CharacterBox (line 19) | class CharacterBox extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
method buildItem (line 75) | Widget buildItem(CustomColors customColors, BuildContext context)
class CharacterBoxItem (line 92) | class CharacterBoxItem extends StatelessWidget {
method build (line 108) | Widget build(BuildContext context)
method buildRoomDesc (line 169) | Widget buildRoomDesc(CustomColors customColors)
method buildAvatar (line 185) | Widget buildAvatar()
FILE: lib/page/chat/component/group_avatar.dart
class GroupAvatar (line 6) | class GroupAvatar extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
method buildAvatar (line 39) | Widget buildAvatar(BuildContext context)
FILE: lib/page/chat/component/group_empty.dart
class GroupEmptyBoard (line 5) | class GroupEmptyBoard extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
method buildTextLine (line 70) | Widget buildTextLine(CustomColors customColors, String text, IconData?...
method _resolveTipWidth (line 99) | double _resolveTipWidth(BuildContext context)
FILE: lib/page/chat/component/model_switcher.dart
class ModelSwitcher (line 11) | class ModelSwitcher extends StatelessWidget {
method openActionDialog (line 21) | void openActionDialog({
method build (line 38) | Widget build(BuildContext context)
FILE: lib/page/chat/component/stop_button.dart
class StopButton (line 4) | class StopButton extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/page/chat/group/chat.dart
class GroupChatPage (line 32) | class GroupChatPage extends StatefulWidget {
method createState (line 45) | State<GroupChatPage> createState()
class _GroupChatPageState (line 48) | class _GroupChatPageState extends State<GroupChatPage> {
method initState (line 64) | void initState()
method dispose (line 92) | void dispose()
method build (line 101) | Widget build(BuildContext context)
method _buildChatComponents (line 114) | Widget _buildChatComponents(CustomColors customColors)
method onModelSelect (line 241) | void onModelSelect(
method _buildChatPreviewArea (line 290) | BlocConsumer<GroupChatBloc, GroupChatState> _buildChatPreviewArea(
method _buildAppBar (line 433) | AppBar _buildAppBar(BuildContext context, CustomColors customColors)
method _buildAvatar (line 483) | Widget _buildAvatar({String? avatarUrl, int? id, int size = 30})
method _handleSubmit (line 499) | void _handleSubmit(
method handleDeleteMessage (line 519) | void handleDeleteMessage(BuildContext context, int id, {int? chatHisto...
method handleResetContext (line 532) | void handleResetContext(BuildContext context)
method handleClearHistory (line 542) | void handleClearHistory(BuildContext context)
method buildSelectModeToolbars (line 555) | Widget buildSelectModeToolbars(
method buildChatMoreMenu (line 661) | Widget buildChatMoreMenu(
FILE: lib/page/chat/group/create.dart
class GroupCreatePage (line 23) | class GroupCreatePage extends StatefulWidget {
method createState (line 29) | State<GroupCreatePage> createState()
class _GroupCreatePageState (line 32) | class _GroupCreatePageState extends State<GroupCreatePage> {
method initState (line 39) | void initState()
method build (line 51) | Widget build(BuildContext context)
method onSave (line 166) | void onSave(BuildContext context)
method _buildAvatar (line 198) | Widget _buildAvatar({String? avatarUrl, int? id, int size = 30})
FILE: lib/page/chat/group/edit.dart
class ModelWithMemberId (line 34) | class ModelWithMemberId {
class GroupEditPage (line 52) | class GroupEditPage extends StatefulWidget {
method createState (line 63) | State<GroupEditPage> createState()
class _GroupEditPageState (line 66) | class _GroupEditPageState extends State<GroupEditPage> {
method initState (line 80) | void initState()
method dispose (line 98) | void dispose()
method build (line 104) | Widget build(BuildContext context)
method canSubmit (line 408) | bool canSubmit()
method buildSelectedModelsPreview (line 420) | Widget buildSelectedModelsPreview()
method _buildAvatar (line 450) | Widget _buildAvatar({String? avatarUrl, int? id, int size = 30})
method resolveSelectedModelsPreviewWidth (line 465) | double resolveSelectedModelsPreviewWidth(BuildContext context)
FILE: lib/page/chat/home.dart
class HomePage (line 41) | class HomePage extends StatefulWidget {
method createState (line 49) | State<HomePage> createState()
class ChatModel (line 52) | class ChatModel {
class _HomePageState (line 66) | class _HomePageState extends State<HomePage> {
method dispose (line 119) | void dispose()
method initState (line 125) | void initState()
method buildModelIndicators (line 175) | Map<String, ModelIndicator> buildModelIndicators()
method build (line 192) | Widget build(BuildContext context)
method buildChatComponents (line 323) | Container buildChatComponents(
method buildNotifyMessageWidget (line 597) | NotifyMessageWidget buildNotifyMessageWidget(BuildContext context)
method _buildSendOrVoiceButton (line 680) | Widget _buildSendOrVoiceButton(
method onSubmit (line 763) | void onSubmit(BuildContext context, String text)
class ChatHistoryItem (line 789) | class ChatHistoryItem extends StatelessWidget {
method build (line 802) | Widget build(BuildContext context)
FILE: lib/page/chat/home_chat.dart
class HomeChatPage (line 44) | class HomeChatPage extends StatefulWidget {
method createState (line 76) | State<HomeChatPage> createState()
class _HomeChatPageState (line 79) | class _HomeChatPageState extends State<HomeChatPage> {
method initState (line 116) | void initState()
method dispose (line 188) | void dispose()
method loadCurrentModel (line 195) | Future<void> loadCurrentModel(String model)
method build (line 208) | Widget build(BuildContext context)
method buildAppBar (line 250) | AppBar buildAppBar(BuildContext context, CustomColors customColors)
method buildChatComponents (line 305) | Widget buildChatComponents(
method buildChatPreviewArea (line 480) | Widget buildChatPreviewArea(
method _searchModelName (line 601) | String _searchModelName(String model)
method handleSubmit (line 611) | void handleSubmit(
FILE: lib/page/chat/home_chat_history.dart
class HomeChatHistoryPage (line 19) | class HomeChatHistoryPage extends StatefulWidget {
method createState (line 26) | State<HomeChatHistoryPage> createState()
class _HomeChatHistoryPageState (line 29) | class _HomeChatHistoryPageState extends State<HomeChatHistoryPage> {
method initState (line 35) | void initState()
method build (line 42) | Widget build(BuildContext context)
method getTimeGroup (line 126) | String getTimeGroup(DateTime date)
FILE: lib/page/component/account_quota_card.dart
class AccountQuotaCard (line 13) | class AccountQuotaCard extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: lib/page/component/advanced_button.dart
class AdvancedButton (line 7) | class AdvancedButton extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
FILE: lib/page/component/animated_cursor.dart
class Cursor (line 5) | class Cursor extends CustomPainter {
method paint (line 11) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 17) | bool shouldRepaint(CustomPainter oldDelegate)
class AnimatedCursor (line 22) | class AnimatedCursor extends StatefulWidget {
method createState (line 35) | State<AnimatedCursor> createState()
class _AnimatedCursorState (line 38) | class _AnimatedCursorState extends State<AnimatedCursor>
method initState (line 44) | void initState()
method build (line 54) | Widget build(BuildContext context)
method dispose (line 64) | void dispose()
FILE: lib/page/component/attached_button_panel.dart
class AttachedButtonPanel (line 4) | class AttachedButtonPanel extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/page/component/audio_player.dart
class AudioPlayerController (line 10) | class AudioPlayerController {
method dispose (line 73) | void dispose()
method playAudio (line 81) | Future<void> playAudio(String text)
method stop (line 101) | Future<void> stop()
method playNextAudioForPlayer (line 112) | Future<void> playNextAudioForPlayer()
method resetAudioSourcesForPlayer (line 125) | void resetAudioSourcesForPlayer(List<String> sources)
class EnhancedAudioPlayer (line 131) | class EnhancedAudioPlayer extends StatelessWidget {
method build (line 138) | Widget build(BuildContext context)
FILE: lib/page/component/avatar_selector.dart
type AvatarType (line 13) | enum AvatarType {
class Avatar (line 19) | class Avatar {
class AvatarSelector (line 31) | class AvatarSelector extends StatefulWidget {
method createState (line 53) | State<AvatarSelector> createState()
class _AvatarSelectorState (line 56) | class _AvatarSelectorState extends State<AvatarSelector> {
method initState (line 61) | void initState()
method build (line 68) | Widget build(BuildContext context)
method buildAvatarSelectBox (line 118) | Widget buildAvatarSelectBox(CustomColors customColors, BuildContext co...
method _buildAvatarButton (line 213) | Widget _buildAvatarButton(CustomColors customColors, Avatar avatar)
FILE: lib/page/component/background_container.dart
class BackgroundContainer (line 11) | class BackgroundContainer extends StatefulWidget {
method createState (line 34) | State<BackgroundContainer> createState()
class _BackgroundContainerState (line 37) | class _BackgroundContainerState extends State<BackgroundContainer> {
method initState (line 43) | void initState()
method build (line 75) | Widget build(BuildContext context)
method _buildChild (line 109) | Widget _buildChild(CustomColors customColors)
method _resolveImage (line 151) | DecorationImage _resolveImage()
method _createPureColorDecoration (line 158) | BoxDecoration _createPureColorDecoration(CustomColors customColors)
method _createLinearGradientDecoration (line 164) | BoxDecoration _createLinearGradientDecoration()
method _createTransportDecoration (line 178) | BoxDecoration _createTransportDecoration()
FILE: lib/page/component/bottom_sheet_box.dart
class BottomSheetBox (line 6) | class BottomSheetBox extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
FILE: lib/page/component/button.dart
class Button (line 4) | class Button extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
class ButtonSize (line 38) | class ButtonSize {
FILE: lib/page/component/chat/chat_bubble.dart
class SpecialChatBubbleOne (line 5) | class SpecialChatBubbleOne extends CustomPainter {
method paint (line 20) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 119) | bool shouldRepaint(CustomPainter oldDelegate)
class BubbleSpecialThree (line 124) | class BubbleSpecialThree extends StatelessWidget {
method build (line 151) | Widget build(BuildContext context)
class SpecialChatBubbleThree (line 227) | class SpecialChatBubbleThree extends CustomPainter {
method paint (line 241) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 393) | bool shouldRepaint(CustomPainter oldDelegate)
class BubbleSpecialTwo (line 398) | class BubbleSpecialTwo extends StatelessWidget {
method build (line 425) | Widget build(BuildContext context)
class SpecialChatBubbleTwo (line 502) | class SpecialChatBubbleTwo extends CustomPainter {
method paint (line 517) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 617) | bool shouldRepaint(CustomPainter oldDelegate)
FILE: lib/page/component/chat/chat_input.dart
class ChatInput (line 25) | class ChatInput extends StatefulWidget {
method createState (line 63) | State<ChatInput> createState()
class _ChatInputState (line 66) | class _ChatInputState extends State<ChatInput> with TickerProviderStateM...
method initState (line 94) | void initState()
method dispose (line 120) | void dispose()
method build (line 136) | Widget build(BuildContext context)
method buildSelectedFilePreview (line 271) | Widget buildSelectedFilePreview(CustomColors customColors)
method buildSelectedImagePreview (line 324) | Widget buildSelectedImagePreview(CustomColors customColors)
method _buildSendOrVoiceButton (line 391) | Widget _buildSendOrVoiceButton(
method onImageUploadButtonPressed (line 458) | void onImageUploadButtonPressed()
method onFileUploadButtonPressed (line 478) | void onFileUploadButtonPressed()
method buildUploadButtons (line 494) | Widget buildUploadButtons(
method onTakePhotoButtonPressed (line 525) | void onTakePhotoButtonPressed(BuildContext context, CustomColors custo...
method _handleSubmited (line 563) | void _handleSubmited(String text, {bool notSend = false})
FILE: lib/page/component/chat/chat_input_button.dart
class ChatInputButton (line 5) | class ChatInputButton extends StatefulWidget {
method createState (line 14) | State<ChatInputButton> createState()
class _ChatInputButtonState (line 17) | class _ChatInputButtonState extends State<ChatInputButton> {
method build (line 19) | Widget build(BuildContext context)
class ChatInputSquareButton (line 56) | class ChatInputSquareButton extends StatelessWidget {
method build (line 66) | Widget build(BuildContext context)
FILE: lib/page/component/chat/chat_preview.dart
class ChatPreview (line 36) | class ChatPreview extends StatefulWidget {
method createState (line 73) | State<ChatPreview> createState()
class _ChatPreviewState (line 76) | class _ChatPreviewState extends State<ChatPreview> {
method initState (line 78) | void initState()
method build (line 87) | Widget build(BuildContext context)
method _resolveMessage (line 167) | Message _resolveMessage(ChatMessageState state, MessageWithState message)
method _buildMessageBox (line 178) | Widget _buildMessageBox(
method buildErrorIndicator (line 585) | Widget buildErrorIndicator(
method onMarkdownUrlTap (line 632) | void onMarkdownUrlTap(value)
method avatarWrap (line 650) | Widget avatarWrap(Widget avatar)
method buildAvatar (line 654) | Widget buildAvatar(Message message)
method _handleMessageTapControl (line 679) | void _handleMessageTapControl(
method _chatBoxMaxWidth (line 1010) | double _chatBoxMaxWidth(BuildContext context)
method _chatBoxImagePreviewWidth (line 1020) | double _chatBoxImagePreviewWidth(BuildContext context, int imageCount)
method _chatBoxFilePreviewWidth (line 1027) | double _chatBoxFilePreviewWidth(BuildContext context)
class ChatPreviewController (line 1038) | class ChatPreviewController extends ChangeNotifier {
method selectedMessages (line 1052) | List<MessageWithState> selectedMessages()
method setAllMessageIds (line 1061) | void setAllMessageIds(List<MessageWithState> messages)
method toggleSelectMode (line 1065) | void toggleSelectMode()
method exitSelectMode (line 1070) | void exitSelectMode()
method enterSelectMode (line 1076) | void enterSelectMode()
method toggleMessageSelected (line 1082) | void toggleMessageSelected(int messageId)
method selectAllMessage (line 1091) | void selectAllMessage()
method selectMessage (line 1110) | void selectMessage(int id)
method unSelectMessage (line 1115) | void unSelectMessage(int id)
method isMessageSelected (line 1120) | bool isMessageSelected(int id)
class ReferenceDocument (line 1125) | class ReferenceDocument {
method fromJson (line 1141) | fromJson(Map<String, dynamic> json)
class ReferenceDocumentWidget (line 1153) | class ReferenceDocumentWidget extends StatelessWidget {
method build (line 1159) | Widget build(BuildContext context)
FILE: lib/page/component/chat/chat_share.dart
class ChatShareMessage (line 30) | class ChatShareMessage {
class ChatShareScreen (line 46) | class ChatShareScreen extends StatefulWidget {
method createState (line 54) | State<ChatShareScreen> createState()
class _ChatShareScreenState (line 57) | class _ChatShareScreenState extends State<ChatShareScreen> {
method build (line 64) | Widget build(BuildContext context)
method buildShareWindow (line 235) | Widget buildShareWindow(CustomColors customColors, BuildContext contex...
method buildQRCodePanel (line 252) | Widget buildQRCodePanel(CustomColors customColors, AsyncSnapshot<Share...
method buildListPreview (line 282) | Widget buildListPreview(BuildContext context, CustomColors customColors)
method buildChatPreview (line 361) | Widget buildChatPreview(BuildContext context, CustomColors customColors)
method _chatBoxMaxWidth (line 453) | double _chatBoxMaxWidth(BuildContext context)
method _chatBoxImagePreviewWidth (line 463) | double _chatBoxImagePreviewWidth(BuildContext context, int imageCount)
method _buildAvatar (line 469) | Widget _buildAvatar({String? avatarUrl, int? id, int size = 30})
FILE: lib/page/component/chat/empty.dart
class EmptyPreview (line 10) | class EmptyPreview extends StatefulWidget {
method createState (line 23) | State<EmptyPreview> createState()
class _EmptyPreviewState (line 26) | class _EmptyPreviewState extends State<EmptyPreview> {
method dispose (line 32) | void dispose()
method build (line 38) | Widget build(BuildContext context)
method _resolveTipWidth (line 237) | double _resolveTipWidth(BuildContext context)
method _resolveTipHeight (line 246) | double _resolveTipHeight(BuildContext context)
class ListTextItem (line 256) | class ListTextItem extends StatefulWidget {
method createState (line 269) | State<ListTextItem> createState()
class _ListTextItemState (line 272) | class _ListTextItemState extends State<ListTextItem> {
method build (line 274) | Widget build(BuildContext context)
FILE: lib/page/component/chat/enhanced_selectable_text.dart
class EnhancedSelectableText (line 3) | class EnhancedSelectableText extends StatefulWidget {
method createState (line 8) | State<EnhancedSelectableText> createState()
class _EnhancedSelectableTextState (line 11) | class _EnhancedSelectableTextState extends State<EnhancedSelectableText> {
method build (line 13) | Widget build(BuildContext context)
FILE: lib/page/component/chat/file_upload.dart
class FileUpload (line 8) | class FileUpload {
class FileUploadPreview (line 21) | class FileUploadPreview extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
FILE: lib/page/component/chat/help_tips.dart
class HelpTips (line 9) | class HelpTips extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
method _buildNewChatActionTip (line 34) | RichText _buildNewChatActionTip(CustomColors customColors, BuildContex...
method _buildContinueActionTip (line 57) | RichText _buildContinueActionTip(CustomColors customColors, BuildConte...
FILE: lib/page/component/chat/markdown.dart
class Markdown (line 22) | class Markdown extends StatelessWidget {
method build (line 41) | Widget build(BuildContext context)
FILE: lib/page/component/chat/markdown/citation.dart
class CitationSyntax (line 7) | class CitationSyntax extends md.InlineSyntax {
method onMatch (line 13) | bool onMatch(md.InlineParser parser, Match match)
class CitationBuilder (line 29) | class CitationBuilder extends MarkdownElementBuilder {
method visitElementAfterWithContext (line 37) | Widget visitElementAfterWithContext(
FILE: lib/page/component/chat/markdown/code.dart
function codeTheme (line 13) | Map<String, TextStyle> codeTheme()
class CodeElementBuilder (line 23) | class CodeElementBuilder extends MarkdownElementBuilder {
method visitElementAfter (line 29) | Widget? visitElementAfter(md.Element element, TextStyle? preferredStyle)
FILE: lib/page/component/chat/markdown/latex.dart
class LatexSyntax (line 13) | class LatexSyntax extends m.InlineSyntax {
method onMatch (line 17) | bool onMatch(m.InlineParser parser, Match match)
class LatexNode (line 42) | class LatexNode extends SpanNode {
method build (line 50) | InlineSpan build()
FILE: lib/page/component/chat/markdown/latex/latex_block_syntax.dart
class LatexBlockSyntax (line 3) | class LatexBlockSyntax extends BlockSyntax {
method parseChildLines (line 13) | List<Line> parseChildLines(BlockParser parser)
method parse (line 38) | Node parse(BlockParser parser)
FILE: lib/page/component/chat/markdown/latex/latex_element_builder.dart
class LatexElementBuilder (line 6) | class LatexElementBuilder extends MarkdownElementBuilder {
method visitElementAfterWithContext (line 19) | Widget visitElementAfterWithContext(
FILE: lib/page/component/chat/markdown/latex/latex_inline_syntax.dart
function escapeRegex (line 17) | String escapeRegex(String string)
function generateRegexRules (line 23) | String generateRegexRules(List<Map<String, dynamic>> delimiters)
class LatexInlineSyntax (line 42) | class LatexInlineSyntax extends InlineSyntax {
method onMatch (line 46) | bool onMatch(InlineParser parser, Match match)
FILE: lib/page/component/chat/message_state_manager.dart
class MessageWithState (line 6) | class MessageWithState {
class MessageState (line 14) | class MessageState {
method isInitializeState (line 31) | bool isInitializeState()
class MessageStateManager (line 51) | class MessageStateManager {
method loadRoomStates (line 55) | Future<Map<String, MessageState>> loadRoomStates(int roomId)
method getKey (line 62) | String getKey(int roomId, int id)
method getState (line 66) | Future<MessageState> getState(int roomId, int id)
method setState (line 76) | Future<void> setState(int roomId, int id, MessageState state)
method removeState (line 90) | Future<void> removeState(int roomId, int id)
FILE: lib/page/component/chat/role_avatar.dart
class RoleAvatar (line 10) | class RoleAvatar extends StatefulWidget {
method createState (line 27) | State<RoleAvatar> createState()
class _RoleAvatarState (line 30) | class _RoleAvatarState extends State<RoleAvatar> {
method build (line 32) | Widget build(BuildContext context)
method _buildAvatar (line 36) | Widget _buildAvatar(BuildContext context)
FILE: lib/page/component/chat/search_result.dart
class SearchResult (line 12) | class SearchResult extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/page/component/chat/thinking_card.dart
class ThinkingCard (line 8) | class ThinkingCard extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: lib/page/component/chat/voice_record.dart
class VoiceRecord (line 22) | class VoiceRecord extends StatefulWidget {
method createState (line 29) | State<VoiceRecord> createState()
class _VoiceRecordState (line 32) | class _VoiceRecordState extends State<VoiceRecord> {
method initState (line 40) | void initState()
method dispose (line 50) | void dispose()
method build (line 57) | Widget build(BuildContext context)
method onRecordStop (line 207) | Future onRecordStop()
FILE: lib/page/component/chat_tools_button.dart
class ChatToolsButton (line 6) | class ChatToolsButton extends StatefulWidget {
method createState (line 21) | State<ChatToolsButton> createState()
class _ChatToolsButtonState (line 24) | class _ChatToolsButtonState extends State<ChatToolsButton> {
method build (line 28) | Widget build(BuildContext context)
FILE: lib/page/component/column_block.dart
class ColumnBlock (line 5) | class ColumnBlock extends StatelessWidget {
method build (line 28) | Widget build(BuildContext context)
FILE: lib/page/component/credit.dart
class Credit (line 5) | class Credit extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
method formatCount (line 48) | String formatCount()
FILE: lib/page/component/dialog.dart
function showErrorMessageEnhanced (line 20) | showErrorMessageEnhanced(
function showCustomBeautyDialog (line 78) | showCustomBeautyDialog(
function showBeautyDialog (line 120) | Future<dynamic> showBeautyDialog(
function showErrorMessage (line 167) | showErrorMessage(String message, {Duration duration = const Duration(sec...
function showSuccessMessage (line 182) | showSuccessMessage(String message, {Duration duration = const Duration(s...
function showImportantMessage (line 194) | showImportantMessage(BuildContext context, String message)
function openModalBottomSheet (line 210) | Future openModalBottomSheet(
function openConfirmDialog (line 269) | openConfirmDialog(
function buildBottomSheetTopBar (line 380) | Center buildBottomSheetTopBar(CustomColors customColors)
function openDialog (line 400) | Future<T?> openDialog<T>(
function _calDialogWidth (line 452) | double _calDialogWidth(BuildContext context)
function openListSelectDialogWithDatasource (line 461) | openListSelectDialogWithDatasource<T>({
function openListSelectDialog (line 503) | openListSelectDialog(
function openTextFieldDialog (line 534) | openTextFieldDialog(
function openFullscreenDialog (line 666) | openFullscreenDialog(
class _FullScreenDialog (line 684) | @immutable
method build (line 698) | Widget build(BuildContext context)
class CustomDialog (line 721) | class CustomDialog extends StatelessWidget {
method build (line 740) | Widget build(BuildContext context)
FILE: lib/page/component/effect/glass.dart
class GlassEffect (line 5) | class GlassEffect extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: lib/page/component/enhanced_button.dart
class EnhancedButton (line 5) | class EnhancedButton extends StatelessWidget {
method build (line 28) | Widget build(BuildContext context)
FILE: lib/page/component/enhanced_error.dart
class EnhancedErrorWidget (line 8) | class EnhancedErrorWidget extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
FILE: lib/page/component/enhanced_input.dart
class EnhancedInputSimple (line 6) | class EnhancedInputSimple extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
class EnhancedInput (line 53) | class EnhancedInput extends StatelessWidget {
method build (line 72) | Widget build(BuildContext context)
FILE: lib/page/component/enhanced_popup_menu.dart
class EnhancedPopupMenuItem (line 5) | class EnhancedPopupMenuItem {
class EnhancedPopupMenu (line 19) | class EnhancedPopupMenu extends StatelessWidget {
method build (line 38) | Widget build(BuildContext context)
FILE: lib/page/component/enhanced_textfield.dart
type LabelPosition (line 6) | enum LabelPosition { top, left, inner }
class InputSelector (line 8) | class InputSelector extends StatelessWidget {
method build (line 19) | Widget build(BuildContext context)
class EnhancedTextField (line 30) | class EnhancedTextField extends StatefulWidget {
method createState (line 112) | State<EnhancedTextField> createState()
class _EnhancedTextFieldState (line 115) | class _EnhancedTextFieldState extends State<EnhancedTextField> {
method initState (line 121) | void initState()
method dispose (line 138) | void dispose()
method build (line 146) | Widget build(BuildContext context)
method _buildTextField (line 227) | Widget _buildTextField()
method resolveInputBorder (line 341) | InputBorder resolveInputBorder()
FILE: lib/page/component/file_preview.dart
class FilePreview (line 4) | class FilePreview extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
FILE: lib/page/component/gallery_item_share.dart
class GalleryItemShareScreen (line 27) | class GalleryItemShareScreen extends StatefulWidget {
method createState (line 40) | State<GalleryItemShareScreen> createState()
class _GalleryItemShareScreenState (line 43) | class _GalleryItemShareScreenState extends State<GalleryItemShareScreen> {
method build (line 49) | Widget build(BuildContext context)
FILE: lib/page/component/global_alert.dart
class GlobalAlertEvent (line 9) | class GlobalAlertEvent {
class GlobalAlert (line 32) | class GlobalAlert extends StatefulWidget {
method createState (line 37) | State<GlobalAlert> createState()
class _GlobalAlertState (line 40) | class _GlobalAlertState extends State<GlobalAlert> {
method initState (line 46) | void initState()
method dispose (line 66) | void dispose()
method build (line 72) | Widget build(BuildContext context)
method resolveBackgroundColor (line 99) | Color resolveBackgroundColor()
FILE: lib/page/component/gradient_style.dart
class GradientStyle (line 3) | class GradientStyle {
method warmLinear (line 4) | LinearGradient warmLinear()
method coldLinear (line 17) | LinearGradient coldLinear()
method greenLinear (line 30) | LinearGradient greenLinear()
method whiteLinear (line 42) | LinearGradient whiteLinear()
FILE: lib/page/component/group_list_widget.dart
class Group (line 5) | class Group<T> {
class GroupListWidget (line 12) | class GroupListWidget<T> extends StatelessWidget {
method build (line 32) | Widget build(BuildContext context)
FILE: lib/page/component/icon_box.dart
class IconBox (line 4) | class IconBox extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: lib/page/component/icon_box_button.dart
class IconBoxButton (line 4) | class IconBoxButton extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
FILE: lib/page/component/image.dart
function resolveImageProvider (line 8) | ImageProvider resolveImageProvider(
class CachedNetworkImageEnhanced (line 23) | class CachedNetworkImageEnhanced extends StatelessWidget {
method build (line 48) | Widget build(BuildContext context)
class CachedNetworkImageProviderEnhanced (line 62) | class CachedNetworkImageProviderEnhanced extends CachedNetworkImageProvi...
FILE: lib/page/component/image_action.dart
function openImageWorkflowActionDialog (line 12) | Future<dynamic> openImageWorkflowActionDialog(
function actionsBuilder (line 54) | Widget actionsBuilder(
FILE: lib/page/component/image_preview.dart
class NetworkImagePreviewer (line 25) | class NetworkImagePreviewer extends StatefulWidget {
method createState (line 46) | State<NetworkImagePreviewer> createState()
class _NetworkImagePreviewerState (line 49) | class _NetworkImagePreviewerState extends State<NetworkImagePreviewer> {
method build (line 51) | Widget build(BuildContext context)
method _buildImage (line 202) | Widget _buildImage(BorderRadius? borderRadius)
method _buildImageBrokenWidget (line 237) | Widget _buildImageBrokenWidget(BuildContext context)
class ImageFilePreviewer (line 249) | class ImageFilePreviewer extends StatelessWidget {
method build (line 265) | Widget build(BuildContext context)
function openImagePreviewDialog (line 287) | void openImagePreviewDialog(
class ImageProviderPreviewer (line 465) | class ImageProviderPreviewer extends StatelessWidget {
method build (line 475) | Widget build(BuildContext context)
FILE: lib/page/component/invite_card.dart
class InviteCard (line 10) | class InviteCard extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
FILE: lib/page/component/item_selector.dart
class ItemSelector (line 5) | class ItemSelector extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
FILE: lib/page/component/item_selector_search.dart
class ItemSearchSelector (line 10) | class ItemSearchSelector extends StatefulWidget {
method createState (line 31) | State<ItemSearchSelector> createState()
class _ItemSearchSelectorState (line 34) | class _ItemSearchSelectorState extends State<ItemSearchSelector> {
method initState (line 38) | void initState()
method dispose (line 47) | void dispose()
method build (line 53) | Widget build(BuildContext context)
class SelectorItem (line 185) | class SelectorItem<T> {
FILE: lib/page/component/loading.dart
class LoadingIndicator (line 5) | class LoadingIndicator extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/page/component/message_box.dart
class MessageBox (line 4) | class MessageBox extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
class MessageBoxType (line 68) | class MessageBoxType {
FILE: lib/page/component/model_indicator.dart
class IconAndColor (line 5) | class IconAndColor {
class ModelIndicatorInfo (line 18) | class ModelIndicatorInfo {
class ModelIndicator (line 36) | class ModelIndicator extends StatelessWidget {
method build (line 51) | Widget build(BuildContext context)
FILE: lib/page/component/model_item.dart
class ModelItem (line 17) | class ModelItem extends StatefulWidget {
method createState (line 32) | State<ModelItem> createState()
class _ModelItemState (line 35) | class _ModelItemState extends State<ModelItem> {
method build (line 39) | Widget build(BuildContext context)
method buildItem (line 160) | Widget buildItem(BuildContext context, Model item, CustomColors custom...
method searchModels (line 287) | List<Model> searchModels()
method buildPriceBlock (line 362) | Widget buildPriceBlock(CustomColors customColors, Model model, ModelPr...
method buildCategory (line 416) | Widget buildCategory(CustomColors customColors, String category)
method buildAvatar (line 430) | Widget buildAvatar({String? avatarUrl, int? id, int size = 30})
method buildTag (line 445) | Widget buildTag(
function modelTagColorSeq (line 464) | String modelTagColorSeq(int index)
function formatTags (line 477) | List<Widget> formatTags(List<Widget> tags)
FILE: lib/page/component/multi_item_selector.dart
class MultiItemSelector (line 8) | class MultiItemSelector<T> extends StatefulWidget {
method createState (line 27) | State<MultiItemSelector<T>> createState()
class _MultiItemSelectorState (line 30) | class _MultiItemSelectorState<T> extends State<MultiItemSelector<T>> {
method initState (line 34) | void initState()
method build (line 40) | Widget build(BuildContext context)
FILE: lib/page/component/notify_message.dart
class NotifyMessageWidget (line 6) | class NotifyMessageWidget extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
method buildGradientStyle (line 89) | LinearGradient buildGradientStyle()
FILE: lib/page/component/pagination.dart
class Pagination (line 6) | class Pagination extends StatefulWidget {
method createState (line 21) | State<Pagination> createState()
class _PaginationState (line 24) | class _PaginationState extends State<Pagination> {
method initState (line 29) | void initState()
method didUpdateWidget (line 35) | void didUpdateWidget(Pagination oldWidget)
method _calculateVisiblePages (line 40) | void _calculateVisiblePages()
method build (line 62) | Widget build(BuildContext context)
FILE: lib/page/component/password_field.dart
class PasswordField (line 5) | class PasswordField extends StatefulWidget {
method createState (line 22) | State<PasswordField> createState()
class _PasswordFieldState (line 25) | class _PasswordFieldState extends State<PasswordField> {
method build (line 29) | Widget build(BuildContext context)
FILE: lib/page/component/prompt_tags_selector.dart
class PromptTagsSelector (line 10) | class PromptTagsSelector extends StatefulWidget {
method createState (line 20) | State<PromptTagsSelector> createState()
class _PromptTagsSelectorState (line 23) | class _PromptTagsSelectorState extends State<PromptTagsSelector> {
method dispose (line 30) | void dispose()
method initState (line 36) | void initState()
method build (line 51) | Widget build(BuildContext context)
method buildTabBarView (line 171) | Widget buildTabBarView(CustomColors customColors, List<PromptCategory>...
method buildTagView (line 205) | Widget buildTagView(CustomColors customColors, List<PromptTag> tags)
class Tag (line 236) | class Tag extends StatelessWidget {
method build (line 255) | Widget build(BuildContext context)
FILE: lib/page/component/random_avatar.dart
type AvatarUsage (line 6) | enum AvatarUsage {
class RandomAvatar (line 12) | class RandomAvatar extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
class RemoteAvatar (line 51) | class RemoteAvatar extends StatelessWidget {
method build (line 58) | Widget build(BuildContext context)
class LocalAvatar (line 73) | class LocalAvatar extends StatelessWidget {
method build (line 79) | Widget build(BuildContext context)
FILE: lib/page/component/room_card.dart
class RoomCard (line 13) | class RoomCard extends StatelessWidget {
method openRoomCard (line 30) | Future openRoomCard(BuildContext context, RoomGallery item)
method build (line 52) | Widget build(BuildContext context)
class GalleryRoomCard (line 123) | class GalleryRoomCard extends StatelessWidget {
method build (line 130) | Widget build(BuildContext context)
FILE: lib/page/component/rotating_widget.dart
class RotatingWidget (line 5) | class RotatingWidget extends StatefulWidget {
method createState (line 10) | State<RotatingWidget> createState()
class _RotatingWidgetState (line 13) | class _RotatingWidgetState extends State<RotatingWidget>
method initState (line 18) | void initState()
method dispose (line 27) | void dispose()
method build (line 33) | Widget build(BuildContext context)
FILE: lib/page/component/select_mode_toolbar.dart
class SelectModeToolbar (line 13) | class SelectModeToolbar extends StatefulWidget {
method createState (line 18) | State<SelectModeToolbar> createState()
class _SelectModeToolbarState (line 21) | class _SelectModeToolbarState extends State<SelectModeToolbar> {
method build (line 23) | Widget build(BuildContext context)
FILE: lib/page/component/share.dart
function shareTo (line 12) | Future<void> shareTo(
FILE: lib/page/component/sliver_component.dart
class SliverSingleComponent (line 6) | class SliverSingleComponent extends StatelessWidget {
method build (line 27) | Widget build(BuildContext context)
class SliverComponent (line 64) | class SliverComponent extends StatelessWidget {
method build (line 86) | Widget build(BuildContext context)
class SliverTabComponent (line 127) | class SliverTabComponent extends StatelessWidget {
method build (line 151) | Widget build(BuildContext context)
FILE: lib/page/component/social_icon.dart
class SocialItem (line 9) | class SocialItem {
class SocialIconGroup (line 23) | class SocialIconGroup extends StatelessWidget {
method build (line 96) | Widget build(BuildContext context)
class SocialIcon (line 136) | class SocialIcon extends StatelessWidget {
method build (line 148) | Widget build(BuildContext context)
FILE: lib/page/component/take_photo.dart
class TakePhoto (line 8) | class TakePhoto extends StatefulWidget {
method createState (line 12) | State<TakePhoto> createState()
class _TakePhotoState (line 15) | class _TakePhotoState extends State<TakePhoto> with WidgetsBindingObserv...
method didChangeAppLifecycleState (line 20) | void didChangeAppLifecycleState(AppLifecycleState state)
method _initializeCameraController (line 35) | Future<void> _initializeCameraController(CameraDescription cameraDescr...
method initState (line 87) | void initState()
method dispose (line 99) | void dispose()
method build (line 106) | Widget build(BuildContext context)
class DisplayPictureScreen (line 161) | class DisplayPictureScreen extends StatelessWidget {
method build (line 167) | Widget build(BuildContext context)
FILE: lib/page/component/theme/custom_size.dart
class CustomSize (line 3) | class CustomSize {
method adaptiveMaxWindowWidth (line 27) | double adaptiveMaxWindowWidth(BuildContext context)
FILE: lib/page/component/theme/custom_theme.dart
class CustomColors (line 5) | class CustomColors extends ThemeExtension<CustomColors> {
method lerp (line 130) | ThemeExtension<CustomColors> lerp(
method copyWith (line 311) | ThemeExtension<CustomColors> copyWith({
FILE: lib/page/component/theme/theme.dart
class AppTheme (line 3) | class AppTheme extends ChangeNotifier {
method get (line 22) | AppTheme get()
method themeModeFormString (line 30) | ThemeMode themeModeFormString(String mode)
method dispose (line 50) | void dispose()
FILE: lib/page/component/transition_resolver.dart
function transitionResolver (line 5) | Page<dynamic> transitionResolver(Widget child, {bool useTransition = true})
FILE: lib/page/component/verify_code_input.dart
class VerifyCodeInput (line 12) | class VerifyCodeInput extends StatefulWidget {
method createState (line 28) | State<VerifyCodeInput> createState()
class _VerifyCodeInputState (line 31) | class _VerifyCodeInputState extends State<VerifyCodeInput> {
method dispose (line 41) | void dispose()
method build (line 47) | Widget build(BuildContext context)
FILE: lib/page/component/video_player.dart
class VideoPlayer (line 20) | class VideoPlayer extends StatefulWidget {
method createState (line 29) | State<VideoPlayer> createState()
class _VideoPlayerState (line 32) | class _VideoPlayerState extends State<VideoPlayer> {
method initState (line 37) | void initState()
method dispose (line 44) | void dispose()
method build (line 50) | Widget build(BuildContext context)
FILE: lib/page/component/weak_text_button.dart
class WeakTextButton (line 4) | class WeakTextButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/page/component/windows.dart
class WindowFrameWidget (line 6) | class WindowFrameWidget extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
class WindowButtons (line 57) | class WindowButtons extends StatefulWidget {
method createState (line 61) | State<WindowButtons> createState()
class _WindowButtonsState (line 64) | class _WindowButtonsState extends State<WindowButtons> {
method maximizeOrRestore (line 65) | void maximizeOrRestore()
method build (line 72) | Widget build(BuildContext context)
FILE: lib/page/creative_island/draw/artistic_qr.dart
class ArtisticQRScreen (line 36) | class ArtisticQRScreen extends StatefulWidget {
method createState (line 53) | State<ArtisticQRScreen> createState()
class _ArtisticQRScreenState (line 56) | class _ArtisticQRScreenState extends State<ArtisticQRScreen> {
method dispose (line 76) | void dispose()
method initState (line 85) | void initState()
method build (line 143) | Widget build(BuildContext context)
method openDefaultTutorials (line 197) | void openDefaultTutorials({Function? onConfirm})
method buildEditPanel (line 211) | Widget buildEditPanel(BuildContext context, CustomColors customColors)
method buildPromptField (line 426) | List<Widget> buildPromptField(CustomColors customColors)
method onGenerate (line 520) | void onGenerate()
method request (line 566) | request(int waitDuration)
method queryCompletionTaskStatus (line 611) | Future<IslandResult> queryCompletionTaskStatus({
FILE: lib/page/creative_island/draw/artistic_wordart.dart
class ArtisticWordArtScreen (line 34) | class ArtisticWordArtScreen extends StatefulWidget {
method createState (line 49) | State<ArtisticWordArtScreen> createState()
class _ArtisticWordArtScreenState (line 52) | class _ArtisticWordArtScreenState extends State<ArtisticWordArtScreen> {
method dispose (line 69) | void dispose()
method initState (line 76) | void initState()
method build (line 118) | Widget build(BuildContext context)
method openDefaultTutorials (line 172) | void openDefaultTutorials({Function? onConfirm})
method buildEditPanel (line 186) | Widget buildEditPanel(BuildContext context, CustomColors customColors)
method buildPromptField (line 297) | List<Widget> buildPromptField(CustomColors customColors)
method onGenerate (line 391) | void onGenerate()
method request (line 428) | request(int waitDuration)
method queryCompletionTaskStatus (line 472) | Future<IslandResult> queryCompletionTaskStatus({
FILE: lib/page/creative_island/draw/components/artistic_style_selector.dart
class ArtisticStyleSelector (line 11) | class ArtisticStyleSelector extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
method _buildImageStyleItemPreview (line 97) | Widget _buildImageStyleItemPreview(
FILE: lib/page/creative_island/draw/components/box.dart
class CreativeIslandBox (line 12) | class CreativeIslandBox extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/page/creative_island/draw/components/content_preview.dart
class CreativeIslandContentPreview (line 12) | class CreativeIslandContentPreview extends StatefulWidget {
method createState (line 27) | State<CreativeIslandContentPreview> createState()
class _CreativeIslandContentPreviewState (line 30) | class _CreativeIslandContentPreviewState extends State<CreativeIslandCon...
method build (line 34) | Widget build(BuildContext context)
method _buildVideoPreviewer (line 100) | Widget _buildVideoPreviewer(
method _buildImagePreviewer (line 114) | Widget _buildImagePreviewer(
class IslandResult (line 127) | class IslandResult {
method hasImageParam (line 131) | bool hasImageParam()
FILE: lib/page/creative_island/draw/components/creative_item.dart
class CreativeItem (line 7) | class CreativeItem extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
FILE: lib/page/creative_island/draw/components/image_selector.dart
class ImageSelector (line 13) | class ImageSelector extends StatelessWidget {
method build (line 31) | Widget build(BuildContext context)
FILE: lib/page/creative_island/draw/components/image_size.dart
class ImageSize (line 5) | class ImageSize extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/page/creative_island/draw/components/image_style_selector.dart
class ImageStyleSelector (line 11) | class ImageStyleSelector extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
method _buildImageStyleItemPreview (line 95) | Widget _buildImageStyleItemPreview(
FILE: lib/page/creative_island/draw/data/draw_history_datasource.dart
class DrawHistoryDatasource (line 6) | class DrawHistoryDatasource extends LoadingMoreBase<CreativeItemInServer> {
method loadData (line 15) | Future<bool> loadData([bool isloadMoreAction = false])
method refresh (line 43) | Future<bool> refresh([bool notifyStateChanged = false])
FILE: lib/page/creative_island/draw/draw_create.dart
class DrawCreateScreen (line 40) | class DrawCreateScreen extends StatefulWidget {
method createState (line 59) | State<DrawCreateScreen> createState()
class _DrawCreateScreenState (line 62) | class _DrawCreateScreenState extends State<DrawCreateScreen> {
method dispose (line 87) | void dispose()
method initState (line 95) | void initState()
method openDefaultTutorials (line 183) | void openDefaultTutorials({Function? onConfirm})
method build (line 198) | Widget build(BuildContext context)
method buildEditPanel (line 254) | Widget buildEditPanel(BuildContext context, CustomColors customColors)
method buildPromptField (line 664) | List<Widget> buildPromptField(CustomColors customColors)
method onGenerate (line 758) | void onGenerate()
method request (line 812) | request(int waitDuration)
method imageStrengthText (line 913) | String imageStrengthText()
method queryCompletionTaskStatus (line 933) | Future<IslandResult> queryCompletionTaskStatus({
method _calImageSelectorHeight (line 972) | double _calImageSelectorHeight(BuildContext context)
FILE: lib/page/creative_island/draw/draw_list.dart
class DrawListScreen (line 17) | class DrawListScreen extends StatefulWidget {
method createState (line 22) | State<DrawListScreen> createState()
class _DrawListScreenState (line 25) | class _DrawListScreenState extends State<DrawListScreen> {
method initState (line 27) | void initState()
method dispose (line 40) | void dispose()
method build (line 45) | Widget build(BuildContext context)
method _buildIslandItems (line 57) | Widget _buildIslandItems(
method _calCrossAxisCount (line 175) | int _calCrossAxisCount(BuildContext context)
FILE: lib/page/creative_island/draw/draw_result.dart
class DrawResultPage (line 12) | class DrawResultPage extends StatefulWidget {
method createState (line 23) | State<DrawResultPage> createState()
class _DrawResultPageState (line 28) | class _DrawResultPageState extends State<DrawResultPage> {
method build (line 35) | Widget build(BuildContext context)
class CountDownProgressBar (line 171) | class CountDownProgressBar extends StatefulWidget {
method createState (line 183) | State<CountDownProgressBar> createState()
class _CountDownProgressBarState (line 186) | class _CountDownProgressBarState extends State<CountDownProgressBar> {
method build (line 188) | Widget build(BuildContext context)
FILE: lib/page/creative_island/draw/image_edit_direct.dart
class ImageEditDirectScreen (line 29) | class ImageEditDirectScreen extends StatefulWidget {
method createState (line 48) | State<ImageEditDirectScreen> createState()
class _ImageEditDirectScreenState (line 51) | class _ImageEditDirectScreenState extends State<ImageEditDirectScreen> {
method initState (line 65) | void initState()
method openDefaultTutorials (line 105) | void openDefaultTutorials({Function? onConfirm})
method openImageToVideoTutorials (line 119) | void openImageToVideoTutorials({Function? onConfirm})
method dispose (line 135) | void dispose()
method build (line 141) | Widget build(BuildContext context)
method buildEditPanel (line 202) | Widget buildEditPanel(BuildContext context, CustomColors customColors)
method cfgScaleText (line 394) | String cfgScaleText(double? cfgScale)
method motionBucketIdText (line 399) | String motionBucketIdText(int? motionBucketId)
method onGenerate (line 404) | void onGenerate()
method request (line 433) | request(int waitDuration)
method queryCompletionTaskStatus (line 505) | Future<IslandResult> queryCompletionTaskStatus({
method _calImageSelectorHeight (line 551) | double _calImageSelectorHeight(BuildContext context)
FILE: lib/page/creative_island/gallery/components/image_card.dart
class ImageCard (line 9) | class ImageCard extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
FILE: lib/page/creative_island/gallery/data/gallery_datasource.dart
class GalleryDatasource (line 6) | class GalleryDatasource extends LoadingMoreBase<CreativeGallery> {
method loadData (line 15) | Future<bool> loadData([bool isloadMoreAction = false])
method refresh (line 43) | Future<bool> refresh([bool notifyStateChanged = false])
FILE: lib/page/creative_island/gallery/gallery.dart
class GalleryScreen (line 18) | class GalleryScreen extends StatefulWidget {
method createState (line 23) | State<GalleryScreen> createState()
class _GalleryScreenState (line 26) | class _GalleryScreenState extends State<GalleryScreen> {
method initState (line 29) | void initState()
method dispose (line 34) | void dispose()
method build (line 40) | Widget build(BuildContext context)
method _buildIslandItems (line 52) | Widget _buildIslandItems(
method _calCrossAxisCount (line 149) | int _calCrossAxisCount(BuildContext context)
FILE: lib/page/creative_island/gallery/gallery_item.dart
class GalleryItemScreen (line 30) | class GalleryItemScreen extends StatefulWidget {
method createState (line 40) | State<GalleryItemScreen> createState()
class _GalleryItemScreenState (line 43) | class _GalleryItemScreenState extends State<GalleryItemScreen> {
method initState (line 45) | void initState()
method build (line 52) | Widget build(BuildContext context)
class TextItem (line 317) | class TextItem extends StatefulWidget {
method createState (line 328) | State<TextItem> createState()
class _TextItemState (line 331) | class _TextItemState extends State<TextItem> {
method build (line 335) | Widget build(BuildContext context)
FILE: lib/page/creative_island/my_creation.dart
class MyCreationScreen (line 24) | class MyCreationScreen extends StatefulWidget {
method createState (line 30) | State<MyCreationScreen> createState()
class _MyCreationScreenState (line 33) | class _MyCreationScreenState extends State<MyCreationScreen> {
method dispose (line 37) | void dispose()
method build (line 43) | Widget build(BuildContext context)
method buildIslandTypeText (line 263) | Widget buildIslandTypeText(CustomColors customColors, CreativeItemInSe...
method onItemDelete (line 273) | void onItemDelete(BuildContext context, CreativeItemInServer item, int...
method _buildAnswerImagePreview (line 285) | Widget _buildAnswerImagePreview(
method _calCrossAxisCount (line 393) | int _calCrossAxisCount(BuildContext context)
FILE: lib/page/creative_island/my_creation_item.dart
class MyCreationItemPage (line 17) | class MyCreationItemPage extends StatefulWidget {
method createState (line 32) | State<MyCreationItemPage> createState()
class _MyCreationItemPageState (line 35) | class _MyCreationItemPageState extends State<MyCreationItemPage> with Si...
method initState (line 39) | void initState()
method dispose (line 49) | void dispose()
method build (line 55) | Widget build(BuildContext context)
method buildActions (line 155) | List<Widget> buildActions(
method _buildNotSuccessBox (line 231) | Widget _buildNotSuccessBox(
method _buildItemArguments (line 287) | List<Widget> _buildItemArguments(CreativeItemArguments arg, CustomColo...
FILE: lib/page/custom_scaffold.dart
class CustomScaffold (line 7) | class CustomScaffold extends StatefulWidget {
method createState (line 30) | State<CustomScaffold> createState()
class _CustomScaffoldState (line 33) | class _CustomScaffoldState extends State<CustomScaffold> {
method build (line 35) | Widget build(BuildContext context)
method buildAppBar (line 49) | AppBar? buildAppBar()
FILE: lib/page/data/chat_history_datasource.dart
class ChatHistoryDatasource (line 7) | class ChatHistoryDatasource extends LoadingMoreBase<ChatHistory> {
method loadData (line 21) | Future<bool> loadData([bool isloadMoreAction = false])
method refresh (line 51) | Future<bool> refresh([bool notifyStateChanged = false, String? keyword])
FILE: lib/page/data/group_message_datasource.dart
class GroupMessageDatasource (line 6) | class GroupMessageDatasource extends LoadingMoreBase<GroupMessage> {
method loadData (line 19) | Future<bool> loadData([bool isloadMoreAction = false])
method refresh (line 45) | Future<bool> refresh([bool notifyStateChanged = false])
FILE: lib/page/data/notification_datasource.dart
class NotificationDatasource (line 6) | class NotificationDatasource extends LoadingMoreBase<NotifyMessage> {
method loadData (line 17) | Future<bool> loadData([bool isloadMoreAction = false])
method refresh (line 43) | Future<bool> refresh([bool notifyStateChanged = false])
FILE: lib/page/drawer.dart
class LeftDrawer (line 19) | class LeftDrawer extends StatefulWidget {
method createState (line 23) | State<LeftDrawer> createState()
class _LeftDrawerState (line 26) | class _LeftDrawerState extends State<LeftDrawer> {
method initState (line 28) | void initState()
method reload (line 34) | void reload()
method maxDrawerWidth (line 43) | double maxDrawerWidth()
method build (line 49) | Widget build(BuildContext context)
method buildAccountCard (line 268) | Widget buildAccountCard(BuildContext context)
FILE: lib/page/home.dart
class NewHomePage (line 49) | class NewHomePage extends StatefulWidget {
method createState (line 66) | State<NewHomePage> createState()
class _NewHomePageState (line 69) | class _NewHomePageState extends State<NewHomePage> {
method initState (line 105) | void initState()
method showInitialDialog (line 119) | void showInitialDialog()
method reloadPage (line 161) | void reloadPage({bool loadAll = false})
method reloadModels (line 179) | Future<void> reloadModels({bool cache = true})
method initListeners (line 206) | void initListeners()
method createNewChat (line 229) | void createNewChat()
method updateCurrentChat (line 243) | void updateCurrentChat(int chatId)
method dispose (line 260) | void dispose()
method loadCurrentModel (line 268) | Future<void> loadCurrentModel(String model)
method build (line 281) | Widget build(BuildContext context)
method buildChatComponents (line 411) | Widget buildChatComponents(
method buildChatPreviewArea (line 590) | Widget buildChatPreviewArea(
method handleSubmit (line 686) | void handleSubmit(
FILE: lib/page/lab/avatar_selector.dart
class AvatarSelectorScreen (line 6) | class AvatarSelectorScreen extends StatefulWidget {
method createState (line 11) | State<AvatarSelectorScreen> createState()
class _AvatarSelectorScreenState (line 14) | class _AvatarSelectorScreenState extends State<AvatarSelectorScreen> {
method build (line 16) | Widget build(BuildContext context)
FILE: lib/page/lab/creative_models.dart
class CreativeModelScreen (line 23) | class CreativeModelScreen extends StatefulWidget {
method createState (line 28) | State<CreativeModelScreen> createState()
class _CreativeModelScreenState (line 31) | class _CreativeModelScreenState extends State<CreativeModelScreen> {
method initState (line 36) | void initState()
method build (line 57) | Widget build(BuildContext context)
method _calCrossAxisCount (line 361) | int _calCrossAxisCount(BuildContext context)
FILE: lib/page/lab/draw_board.dart
class DrawboardScreen (line 20) | class DrawboardScreen extends StatefulWidget {
method createState (line 24) | State<DrawboardScreen> createState()
class _DrawboardScreenState (line 27) | class _DrawboardScreenState extends State<DrawboardScreen> {
method build (line 30) | Widget build(BuildContext context)
class DrawMaskBoardController (line 122) | class DrawMaskBoardController {
method save (line 134) | Future<ByteData?> save()
class DrawMaskBoard (line 145) | class DrawMaskBoard extends StatefulWidget {
method createState (line 155) | State<DrawMaskBoard> createState()
class _DrawMaskBoardState (line 158) | class _DrawMaskBoardState extends State<DrawMaskBoard> {
method dispose (line 166) | void dispose()
method initState (line 173) | void initState()
method build (line 197) | Widget build(BuildContext context)
FILE: lib/page/lab/prompt.dart
class PromptScreen (line 13) | class PromptScreen extends StatefulWidget {
method createState (line 19) | State<PromptScreen> createState()
class _PromptScreenState (line 22) | class _PromptScreenState extends State<PromptScreen> {
method initState (line 26) | void initState()
method dispose (line 32) | void dispose()
method build (line 38) | Widget build(BuildContext context)
method openSystemPromptSelectDialog (line 90) | void openSystemPromptSelectDialog(
FILE: lib/page/lab/user_center.dart
class UserCenterScreen (line 14) | class UserCenterScreen extends StatefulWidget {
method createState (line 19) | State<UserCenterScreen> createState()
class _UserCenterScreenState (line 22) | class _UserCenterScreenState extends State<UserCenterScreen> {
method initState (line 24) | void initState()
method build (line 32) | Widget build(BuildContext context)
FILE: lib/page/setting/account_security.dart
class AccountSecurityScreen (line 23) | class AccountSecurityScreen extends StatefulWidget {
method createState (line 28) | State<AccountSecurityScreen> createState()
class _AccountSecurityScreenState (line 31) | class _AccountSecurityScreenState extends State<AccountSecurityScreen> {
method dispose (line 35) | void dispose()
method initState (line 43) | void initState()
method build (line 83) | Widget build(BuildContext context)
function buildSettingsList (line 285) | Widget buildSettingsList(
FILE: lib/page/setting/article.dart
class ArticleScreen (line 16) | class ArticleScreen extends StatefulWidget {
method createState (line 22) | State<ArticleScreen> createState()
class _ArticleScreenState (line 25) | class _ArticleScreenState extends State<ArticleScreen> {
method initState (line 33) | void initState()
method build (line 43) | Widget build(BuildContext context)
FILE: lib/page/setting/background_selector.dart
class BackgroundSelectorScreen (line 19) | class BackgroundSelectorScreen extends StatefulWidget {
method createState (line 25) | State<BackgroundSelectorScreen> createState()
class _BackgroundSelectorScreenState (line 28) | class _BackgroundSelectorScreenState extends State<BackgroundSelectorScr...
method initState (line 35) | void initState()
method dispose (line 44) | void dispose()
method build (line 50) | Widget build(BuildContext context)
FILE: lib/page/setting/bind_phone_page.dart
class BindPhoneScreen (line 24) | class BindPhoneScreen extends StatefulWidget {
method createState (line 30) | State<BindPhoneScreen> createState()
class _BindPhoneScreenState (line 33) | class _BindPhoneScreenState extends State<BindPhoneScreen> {
method initState (line 42) | void initState()
method dispose (line 65) | void dispose()
method build (line 74) | Widget build(BuildContext context)
FILE: lib/page/setting/change_password.dart
class ChangePasswordScreen (line 19) | class ChangePasswordScreen extends StatefulWidget {
method createState (line 25) | State<ChangePasswordScreen> createState()
class _ChangePasswordScreenState (line 28) | class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
method dispose (line 35) | void dispose()
method build (line 42) | Widget build(BuildContext context)
FILE: lib/page/setting/custom_home_models.dart
class CustomHomeModelsPage (line 26) | class CustomHomeModelsPage extends StatefulWidget {
method createState (line 31) | State<CustomHomeModelsPage> createState()
class _CustomHomeModelsPageState (line 34) | class _CustomHomeModelsPageState extends State<CustomHomeModelsPage> {
method initState (line 57) | void initState()
method build (line 96) | Widget build(BuildContext context)
function openSelectCustomModelDialog (line 237) | void openSelectCustomModelDialog(
class HomeModelItem (line 270) | class HomeModelItem extends StatelessWidget {
method build (line 283) | Widget build(BuildContext context)
method buildTabView (line 348) | Widget buildTabView(
method buildAvatar (line 407) | Widget buildAvatar({String? avatarUrl, int? id, int size = 30})
FILE: lib/page/setting/destroy_account.dart
class DestroyAccountScreen (line 20) | class DestroyAccountScreen extends StatefulWidget {
method createState (line 26) | State<DestroyAccountScreen> createState()
class _DestroyAccountScreenState (line 29) | class _DestroyAccountScreenState extends State<DestroyAccountScreen> {
method dispose (line 36) | void dispose()
method build (line 43) | Widget build(BuildContext context)
FILE: lib/page/setting/diagnosis.dart
class DiagnosisScreen (line 23) | class DiagnosisScreen extends StatefulWidget {
method createState (line 28) | State<DiagnosisScreen> createState()
class _DiagnosisScreenState (line 31) | class _DiagnosisScreenState extends State<DiagnosisScreen> {
method initState (line 38) | void initState()
method dispose (line 63) | void dispose()
method build (line 69) | Widget build(BuildContext context)
FILE: lib/page/setting/notification.dart
class NotificationScreen (line 18) | class NotificationScreen extends StatefulWidget {
method createState (line 23) | State<NotificationScreen> createState()
class _NotificationScreenState (line 26) | class _NotificationScreenState extends State<NotificationScreen> {
method dispose (line 30) | void dispose()
method build (line 36) | Widget build(BuildContext context)
class NotifyMessageItem (line 118) | class NotifyMessageItem extends StatelessWidget {
method build (line 131) | Widget build(BuildContext context)
FILE: lib/page/setting/openai_setting.dart
class OpenAISettingScreen (line 22) | class OpenAISettingScreen extends StatefulWidget {
method createState (line 32) | State<OpenAISettingScreen> createState()
class _OpenAISettingScreenState (line 35) | class _OpenAISettingScreenState extends State<OpenAISettingScreen> {
method initState (line 44) | void initState()
method dispose (line 55) | void dispose()
method build (line 63) | Widget build(BuildContext context)
method onSaveAndEnter (line 213) | void onSaveAndEnter(String apiKey, String organization, String url, Bu...
method verifySecretKey (line 233) | Future<void> verifySecretKey()
FILE: lib/page/setting/retrieve_password_screen.dart
class RetrievePasswordScreen (line 19) | class RetrievePasswordScreen extends StatefulWidget {
method createState (line 25) | State<RetrievePasswordScreen> createState()
class _RetrievePasswordScreenState (line 28) | class _RetrievePasswordScreenState extends State<RetrievePasswordScreen> {
method initState (line 39) | void initState()
method dispose (line 48) | void dispose()
method build (line 57) | Widget build(BuildContext context)
FILE: lib/page/setting/setting_screen.dart
class SettingScreen (line 40) | class SettingScreen extends StatefulWidget {
method createState (line 45) | State<SettingScreen> createState()
class _SettingScreenState (line 48) | class _SettingScreenState extends State<SettingScreen> {
method initState (line 50) | void initState()
method build (line 57) | Widget build(BuildContext context)
method userHasLabPermission (line 360) | bool userHasLabPermission(AccountState state)
method forceShowLab (line 365) | bool forceShowLab()
method _buildAccountQuotaCard (line 369) | CustomSettingsSection _buildAccountQuotaCard(
method _buildInviteCard (line 390) | CustomSettingsSection _buildInviteCard(BuildContext context, AccountLo...
method _buildCommonLanguageSetting (line 402) | SettingsTile _buildCommonLanguageSetting()
method _defaultServerList (line 475) | Future<List<SelectorItem<String>>> _defaultServerList()
method _buildAccountSetting (line 483) | List<SettingsTile> _buildAccountSetting(AccountState state, CustomColo...
method _buildCommonThemeSetting (line 561) | SettingsTile _buildCommonThemeSetting(CustomColors customColors)
method _buildOpenAISelfHostedSetting (line 630) | SettingsTile _buildOpenAISelfHostedSetting(CustomColors customColors)
method _buildUserAPIKeySetting (line 649) | SettingsTile _buildUserAPIKeySetting(CustomColors customColors)
method _buildServerSelfHostedSetting (line 658) | SettingsTile _buildServerSelfHostedSetting(CustomColors customColors)
method _buildSocialIcons (line 699) | CustomSettingsSection _buildSocialIcons(BuildContext context)
FILE: lib/page/setting/user_api_keys.dart
class UserAPIKeysScreen (line 21) | class UserAPIKeysScreen extends StatefulWidget {
method createState (line 27) | State<UserAPIKeysScreen> createState()
class _UserAPIKeysScreenState (line 30) | class _UserAPIKeysScreenState extends State<UserAPIKeysScreen> {
method initState (line 34) | void initState()
method build (line 40) | Widget build(BuildContext context)
FILE: lib/repo/api/admin/channels.dart
class AdminChannel (line 1) | class AdminChannel {
method toJson (line 35) | Map<String, dynamic> toJson()
class AdminChannelMeta (line 47) | class AdminChannelMeta {
method toJson (line 66) | Map<String, dynamic> toJson()
class AdminChannelAddReq (line 75) | class AdminChannelAddReq {
method toJson (line 91) | Map<String, dynamic> toJson()
class AdminChannelUpdateReq (line 102) | class AdminChannelUpdateReq {
method toJson (line 118) | Map<String, dynamic> toJson()
class AdminChannelType (line 129) | class AdminChannelType {
method toJson (line 152) | Map<String, dynamic> toJson()
FILE: lib/repo/api/admin/models.dart
class AdminModel (line 1) | class AdminModel {
method toJson (line 42) | Map<String, dynamic> toJson()
class AdminModelMeta (line 56) | class AdminModelMeta {
method toJson (line 123) | Map<String, dynamic> toJson()
class AdminModelProvider (line 147) | class AdminModelProvider {
method toJson (line 169) | Map<String, dynamic> toJson()
class AdminModelAddReq (line 179) | class AdminModelAddReq {
method toJson (line 200) | Map<String, dynamic> toJson()
class AdminModelUpdateReq (line 214) | class AdminModelUpdateReq {
method toJson (line 233) | Map<String, dynamic> toJson()
FILE: lib/repo/api/admin/payment.dart
class AdminPaymentHistory (line 1) | class AdminPaymentHistory {
method toJson (line 35) | Map<String, dynamic> toJson()
FILE: lib/repo/api/admin/users.dart
class AdminUser (line 1) | class AdminUser {
method toJson (line 67) | Map<String, dynamic> toJson()
FILE: lib/repo/api/article.dart
class Article (line 1) | class Article {
method toJson (line 31) | Map<String, dynamic> toJson()
FILE: lib/repo/api/creative.dart
class CreativeGalleryItemResponse (line 5) | class CreativeGalleryItemResponse {
method fromJson (line 16) | CreativeGalleryItemResponse fromJson(Map<String, dynamic> json)
class CreativeGallery (line 24) | class CreativeGallery {
method fromJson (line 118) | CreativeGallery fromJson(Map<String, dynamic> json)
class CreativeIslandCapacity (line 145) | class CreativeIslandCapacity {
method fromJson (line 200) | CreativeIslandCapacity fromJson(Map<String, dynamic> json)
class CreativeIslandArtisticStyle (line 236) | class CreativeIslandArtisticStyle {
method fromJson (line 253) | CreativeIslandArtisticStyle fromJson(Map<String, dynamic> json)
class CreativeIslandImageFilter (line 262) | class CreativeIslandImageFilter {
method fromJson (line 282) | CreativeIslandImageFilter fromJson(Map<String, dynamic> json)
class CreativeIslandVendorModel (line 292) | class CreativeIslandVendorModel {
method fromJson (line 321) | CreativeIslandVendorModel fromJson(Map<String, dynamic> json)
class CreativeIslandCompletionResp (line 334) | class CreativeIslandCompletionResp {
method fromJson (line 351) | CreativeIslandCompletionResp fromJson(Map<String, dynamic> json)
class CreativeIslandItems (line 364) | class CreativeIslandItems {
class CreativeIslandItemExtSize (line 372) | class CreativeIslandItemExtSize {
method fromJson (line 389) | CreativeIslandItemExtSize fromJson(Map<String, dynamic> json)
class CreativeIslandItemExtension (line 398) | class CreativeIslandItemExtension {
method fromJson (line 424) | CreativeIslandItemExtension fromJson(Map<String, dynamic> json)
class CreativeIslandItem (line 440) | class CreativeIslandItem {
method fromJson (line 554) | fromJson(Map<String, dynamic> json)
class CreativeIslandCompletionAsyncResp (line 582) | class CreativeIslandCompletionAsyncResp {
method fromJson (line 591) | CreativeIslandCompletionAsyncResp fromJson(Map<String, dynamic> json)
class CreativeItemInServer (line 596) | class CreativeItemInServer {
method fromJson (line 671) | CreativeItemInServer fromJson(Map<String, dynamic> json)
class CreativeItemArguments (line 769) | class CreativeItemArguments {
method fromJson (line 813) | CreativeItemArguments fromJson(Map<String, dynamic> json)
class CreativeIslandItemV2 (line 831) | class CreativeIslandItemV2 {
method fromJson (line 863) | CreativeIslandItemV2 fromJson(Map<String, dynamic> json)
FILE: lib/repo/api/image_model.dart
class ImageModel (line 3) | class ImageModel {
method fromJson (line 29) | ImageModel fromJson(Map<String, dynamic> json)
class ImageModelFilter (line 41) | class ImageModelFilter {
method fromJson (line 67) | ImageModelFilter fromJson(Map<String, dynamic> json)
FILE: lib/repo/api/info.dart
class Capabilities (line 4) | class Capabilities {
method toJson (line 114) | Map<String, dynamic> toJson()
class HomeModel (line 141) | class HomeModel {
method toJson (line 178) | Map<String, dynamic> toJson()
FILE: lib/repo/api/keys.dart
class UserAPIKey (line 1) | class UserAPIKey {
method toJson (line 36) | Map<String, dynamic> toJson()
FILE: lib/repo/api/model.dart
class HomeModelV2 (line 2) | class HomeModelV2 {
method fromJson (line 30) | HomeModelV2 fromJson(Map<String, dynamic> json)
FILE: lib/repo/api/notification.dart
class NotifyMessage (line 1) | class NotifyMessage {
method toJson (line 31) | Map<String, dynamic> toJson()
FILE: lib/repo/api/page.dart
class PagedData (line 1) | class PagedData<T> {
class OffsetPageData (line 17) | class OffsetPageData<T> {
FILE: lib/repo/api/payment.dart
class OtherPayCreatedReponse (line 1) | class OtherPayCreatedReponse {
method fromJson (line 14) | OtherPayCreatedReponse fromJson(Map<String, dynamic> json)
class PaymentProduct (line 23) | class PaymentProduct {
method fromJson (line 69) | PaymentProduct fromJson(Map<String, dynamic> json)
class PaymentProducts (line 87) | class PaymentProducts {
method fromJson (line 100) | PaymentProducts fromJson(Map<String, dynamic> json)
class PaymentStatus (line 111) | class PaymentStatus {
method fromJson (line 122) | PaymentStatus fromJson(Map<String, dynamic> json)
class WechatPaymentCreatedResponse (line 130) | class WechatPaymentCreatedResponse {
method fromJson (line 168) | WechatPaymentCreatedResponse fromJson(Map<String, dynamic> json)
class StripePaymentCreatedResponse (line 184) | class StripePaymentCreatedResponse {
method fromJson (line 210) | StripePaymentCreatedResponse fromJson(Map<String, dynamic> json)
FILE: lib/repo/api/quota.dart
class QuotaEvaluated (line 3) | class QuotaEvaluated {
method fromJson (line 16) | QuotaEvaluated fromJson(Map<String, dynamic> json)
class QuotaResp (line 25) | class QuotaResp {
method fromJson (line 36) | QuotaResp fromJson(Map<String, dynamic> json)
class QuotaDetail (line 44) | class QuotaDetail {
method fromJson (line 79) | QuotaDetail fromJson(Map<String, dynamic> json)
class Quota (line 94) | class Quota {
method quotaPercent (line 101) | double quotaPercent()
method quotaRemain (line 105) | int quotaRemain()
method quotaRemainString (line 109) | String quotaRemainString()
method quotaString (line 113) | String quotaString()
method usedString (line 117) | String usedString()
method fromJson (line 127) | fromJson(Map<String, dynamic> json)
FILE: lib/repo/api/room_gallery.dart
class RoomGalleryResponse (line 1) | class RoomGalleryResponse {
method fromJson (line 15) | RoomGalleryResponse fromJson(Map<String, dynamic> json)
class RoomGallery (line 27) | class RoomGallery {
method fromJson (line 50) | RoomGallery fromJson(Map<String, dynamic> json)
FILE: lib/repo/api/user.dart
class User (line 3) | class User {
method displayName (line 27) | String displayName()
method fromJson (line 54) | fromJson(Map<String, dynamic> json)
class UserInfo (line 68) | class UserInfo {
method fromJson (line 84) | fromJson(Map<String, dynamic> json)
method empty (line 92) | UserInfo empty()
class UserControl (line 101) | class UserControl {
method fromJson (line 133) | UserControl fromJson(Map<String, dynamic> json)
FILE: lib/repo/api_server.dart
class APIServer (line 33) | class APIServer {
method _exceptionHandle (line 80) | Object _exceptionHandle(Object e, Object? stackTrace)
method _buildRequestOptions (line 109) | Options _buildRequestOptions({int? requestTimeout = 10000})
method _buildAuthHeaders (line 118) | Map<String, dynamic> _buildAuthHeaders()
method localUserID (line 136) | int? localUserID()
method sendGetRequest (line 154) | Future<T> sendGetRequest<T>(
method sendCachedGetRequest (line 170) | Future<T> sendCachedGetRequest<T>(
method sendPostRequest (line 191) | Future<T> sendPostRequest<T>(
method sendPostJSONRequest (line 210) | Future<T> sendPostJSONRequest<T>(
method sendPutRequest (line 229) | Future<T> sendPutRequest<T>(
method sendPutJSONRequest (line 251) | Future<T> sendPutJSONRequest<T>(
method sendDeleteRequest (line 273) | Future<T> sendDeleteRequest<T>(
method request (line 295) | Future<T> request<T>(
method _cacheSubKey (line 336) | String? _cacheSubKey()
method quotaDetails (line 346) | Future<QuotaResp?> quotaDetails()
method userInfo (line 354) | Future<UserInfo?> userInfo({bool cache = true})
method checkPhoneExists (line 365) | Future<UserExistenceResp> checkPhoneExists(String username)
method signInOrUp (line 376) | Future<SignInResp> signInOrUp({
method signInWithPassword (line 397) | Future<SignInResp> signInWithPassword(
method signInWithApple (line 414) | Future<SignInResp> signInWithApple({
method trySignInWithWechat (line 440) | Future<TrySignInResp> trySignInWithWechat({
method signInWithWechat (line 453) | Future<SignInResp> signInWithWechat({
method bindWechat (line 466) | Future<void> bindWechat({required String code})
method proxyServers (line 477) | Future<List<String>> proxyServers(String service)
method models (line 486) | Future<List<Model>> models({bool cache = true})
method prompts (line 503) | Future<List<Prompt>> prompts()
method examples (line 519) | Future<List<ChatExample>> examples()
method avatars (line 539) | Future<List<String>> avatars()
method backgrounds (line 549) | Future<List<BackgroundImage>> backgrounds()
method translate (line 563) | Future<TranslateText> translate(
method uploadInit (line 578) | Future<UploadInitResponse> uploadInit(
method exampleByTag (line 595) | Future<List<ChatExample>> exampleByTag(String tag)
method negativePromptExamples (line 614) | Future<List<ChatExample>> negativePromptExamples(String tag)
method example (line 632) | Future<List<ChatExample>> example(String model)
method modelStyles (line 651) | Future<List<ModelStyle>> modelStyles(String category)
method creativeIslandItems (line 666) | Future<CreativeIslandItems> creativeIslandItems({
method creativeIslandItem (line 691) | Future<CreativeIslandItem> creativeIslandItem(String id)
method creativeIslandCompletionsEvaluate (line 701) | Future<QuotaEvaluated> creativeIslandCompletionsEvaluate(String id, Ma...
method creativeIslandCompletions (line 710) | Future<List<String>> creativeIslandCompletions(String id, Map<String, ...
method creativeIslandCompletionsAsync (line 727) | Future<String> creativeIslandCompletionsAsync(String id, Map<String, d...
method creativeIslandCompletionsEvaluateV2 (line 740) | Future<QuotaEvaluated> creativeIslandCompletionsEvaluateV2(Map<String,...
method creativeIslandCompletionsAsyncV2 (line 748) | Future<String> creativeIslandCompletionsAsyncV2(Map<String, dynamic> p...
method creativeIslandArtisticTextCompletionsAsyncV2 (line 759) | Future<String> creativeIslandArtisticTextCompletionsAsyncV2(Map<String...
method creativeIslandImageToVideoCompletionsAsyncV2 (line 770) | Future<String> creativeIslandImageToVideoCompletionsAsyncV2(Map<String...
method creativeIslandImageDirectEdit (line 781) | Future<String> creativeIslandImageDirectEdit(
method modelStylesV2 (line 796) | Future<List<ModelStyle>> modelStylesV2({String? modelId})
method creativeIslandCapacity (line 811) | Future<CreativeIslandCapacity> creativeIslandCapacity({required String...
method asyncTaskStatus (line 822) | Future<AsyncTaskResp> asyncTaskStatus(String taskId)
method sendResetPasswordCodeForSignedUser (line 830) | Future<String> sendResetPasswordCodeForSignedUser()
method resetPasswordByCodeSignedUser (line 838) | Future<void> resetPasswordByCodeSignedUser({
method resetPasswordByCode (line 855) | Future<void> resetPasswordByCode({
method sendResetPasswordCode (line 874) | Future<String> sendResetPasswordCode(
method sendSigninOrSignupVerifyCode (line 888) | Future<String> sendSigninOrSignupVerifyCode(
method sendSigninVerifyCode (line 901) | Future<String> sendSigninVerifyCode(
method sendSignupVerifyCode (line 915) | Future<String> sendSignupVerifyCode(
method sendBindPhoneCode (line 929) | Future<String> sendBindPhoneCode(String username)
method bindPhone (line 940) | Future<SignInResp> bindPhone({
method signupWithPassword (line 959) | Future<SignInResp> signupWithPassword({
method sendDestroyAccountSMSCode (line 980) | Future<String> sendDestroyAccountSMSCode()
method destroyAccount (line 988) | Future<void> destroyAccount({
method versionCheck (line 1003) | Future<VersionCheckResp> versionCheck({bool cache = true})
method paymentProducts (line 1018) | Future<PaymentProducts> paymentProducts()
method createApplePay (line 1026) | Future<String> createApplePay(String productId)
method createOtherPay (line 1037) | Future<OtherPayCreatedReponse> createOtherPay(String productId, {requi...
method otherPayClientConfirm (line 1049) | Future<String> otherPayClientConfirm(Map<String, dynamic> params)
method queryPaymentStatus (line 1058) | Future<PaymentStatus> queryPaymentStatus(String paymentId)
method updateApplePay (line 1066) | Future<String> updateApplePay(
method verifyApplePay (line 1086) | Future<String> verifyApplePay(
method cancelApplePay (line 1112) | Future<String> cancelApplePay(String paymentId, {String? reason})
method rooms (line 1123) | Future<RoomsResponse> rooms({bool cache = true})
method recentRooms (line 1135) | Future<List<RoomInServer>> recentRooms()
method room (line 1150) | Future<RoomInServer> room({required roomId, bool cache = true})
method createGroupRoom (line 1161) | Future<int> createGroupRoom({
method updateGroupRoom (line 1182) | Future<void> updateGroupRoom({
method createRoom (line 1204) | Future<int> createRoom({
method updateRoom (line 1236) | Future<RoomInServer> updateRoom({
method deleteRoom (line 1269) | Future<void> deleteRoom({required int roomId})
method creativeUserGallery (line 1280) | Future<List<CreativeItemInServer>> creativeUserGallery({
method imageModels (line 1302) | Future<List<ImageModel>> imageModels()
method imageModelFilters (line 1318) | Future<List<ImageModelFilter>> imageModelFilters()
method creativeHistories (line 1334) | Future<PagedData<CreativeItemInServer>> creativeHistories({
method shareCreativeHistoryToGallery (line 1375) | Future<void> shareCreativeHistoryToGallery({required int historyId})
method cancelShareCreativeHistoryToGallery (line 1383) | Future<void> cancelShareCreativeHistoryToGallery({required int history...
method forbidCreativeHistoryItem (line 1391) | Future<void> forbidCreativeHistoryItem({required int historyId})
method creativeItemHistories (line 1399) | Future<List<CreativeItemInServer>> creativeItemHistories(String island...
method creativeHistoryItem (line 1417) | Future<CreativeItemInServer> creativeHistoryItem({
method deleteCreativeHistoryItem (line 1431) | Future<void> deleteCreativeHistoryItem(String islandId, {required hisId})
method quotaUsedStatistics (line 1439) | Future<List<QuotaUsageInDay>> quotaUsedStatistics({bool cache = true})
method quotaUsedDetails (line 1457) | Future<List<QuotaUsageDetailInDay>> quotaUsedDetails({required String ...
method creativeGallery (line 1471) | Future<PagedData<CreativeGallery>> creativeGallery({
method creativeGalleryItem (line 1501) | Future<CreativeGalleryItemResponse> creativeGalleryItem({
method textToVoice (line 1514) | Future<List<String>> textToVoice({required String text})
method diagnosisUpload (line 1523) | Future<void> diagnosisUpload({required String data})
method shareInfo (line 1537) | Future<ShareInfo> shareInfo()
method roomGalleries (line 1546) | Future<RoomGalleryResponse> roomGalleries({bool cache = true})
method roomGalleryItem (line 1557) | Future<RoomGallery> roomGalleryItem({required int id, bool cache = true})
method copyRoomGallery (line 1566) | Future<List<int>> copyRoomGallery({required List<int> ids})
method creativeIslandItemsV2 (line 1581) | Future<List<CreativeIslandItemV2>> creativeIslandItemsV2({bool cache =...
method drawPromptTags (line 1597) | Future<List<PromptCategory>> drawPromptTags({bool cache = true})
method updateUserAvatar (line 1613) | Future<void> updateUserAvatar({required String avatarURL})
method updateUserRealname (line 1625) | Future<void> updateUserRealname({required String realname})
method capabilities (line 1637) | Future<Capabilities> capabilities({bool cache = true})
method userFreeStatistics (line 1646) | Future<List<FreeModelCount>> userFreeStatistics()
method freeChatCounts (line 1660) | Future<List<FreeModelCount>> freeChatCounts()
method userFreeStatisticsForModel (line 1674) | Future<FreeModelCount> userFreeStatisticsForModel({required String mod...
method notificationPromotionEvents (line 1682) | Future<Map<String, List<PromotionEvent>>> notificationPromotionEvents(...
method updateCustomHomeModels (line 1706) | Future<void> updateCustomHomeModels({required List<String> models})
method customHomeModelsV2 (line 1717) | Future<List<HomeModelV2>> customHomeModelsV2({bool cache = true})
method customHomeModelsItemV2 (line 1733) | Future<HomeModelV2> customHomeModelsItemV2({
method updateCustomHomeModelsV2 (line 1748) | Future<void> updateCustomHomeModelsV2({required List<String> models})
method chatGroups (line 1761) | Future<List<RoomInServer>> chatGroups({bool cache = true})
method chatGroup (line 1777) | Future<ChatGroup> chatGroup(int groupId, {bool cache = true})
method chatGroupMessages (line 1786) | Future<OffsetPageData<GroupMessage>> chatGroupMessages(
method chatGroupSendMessage (line 1816) | Future<GroupChatSendResponse> chatGroupSendMessage(int groupId, GroupC...
method chatGroupSendSystemMessage (line 1827) | Future<GroupMessage> chatGroupSendSystemMessage(
method chatGroupMessageStatus (line 1843) | Future<List<GroupMessage>> chatGroupMessageStatus(int groupId, List<in...
method chatGroupDeleteAllMessages (line 1861) | Future<void> chatGroupDeleteAllMessages(int groupId)
method chatGroupDeleteMessage (line 1866) | Future<void> chatGroupDeleteMessage(int groupId, int messageId)
method userAPIKeys (line 1872) | Future<List<UserAPIKey>> userAPIKeys()
method userAPIKeyDetail (line 1879) | Future<UserAPIKey> userAPIKeyDetail({required int id})
method createAPIKey (line 1886) | Future<String> createAPIKey({required String name})
method deleteAPIKey (line 1895) | Future<void> deleteAPIKey({required int id})
method notifications (line 1901) | Future<OffsetPageData<NotifyMessage>> notifications({
method article (line 1931) | Future<Article> article({
method createStripePaymentSheet (line 1945) | Future<StripePaymentCreatedResponse> createStripePaymentSheet({
method createWechatPayment (line 1962) | Future<WechatPaymentCreatedResponse> createWechatPayment({
method adminChannelTypes (line 1979) | Future<List<AdminChannelType>> adminChannelTypes()
method adminChannelsAgg (line 1991) | Future<List<AdminChannel>> adminChannelsAgg()
method adminChannels (line 2008) | Future<List<AdminChannel>> adminChannels()
method adminChannel (line 2020) | Future<AdminChannel> adminChannel({required int id})
method adminCreateChannel (line 2027) | Future<void> adminCreateChannel(AdminChannelAddReq req)
method adminUpdateChannel (line 2036) | Future<void> adminUpdateChannel({required int id, required AdminChanne...
method adminDeleteChannel (line 2045) | Future<void> adminDeleteChannel({required int id})
method adminModels (line 2050) | Future<List<AdminModel>> adminModels()
method adminModel (line 2068) | Future<AdminModel> adminModel({required String modelId})
method adminCreateModel (line 2075) | Future<void> adminCreateModel(AdminModelAddReq req)
method adminUpdateModel (line 2084) | Future<void> adminUpdateModel({required String modelId, required Admin...
method adminDeleteModel (line 2093) | Future<void> adminDeleteModel({required String modelId})
method adminUsers (line 2098) | Future<PagedData<AdminUser>> adminUsers({
method adminUser (line 2128) | Future<AdminUser> adminUser({required int id})
method adminUserQuotaAssign (line 2135) | Future<void> adminUserQuotaAssign({
method adminUserQuota (line 2154) | Future<QuotaResp> adminUserQuota({required int userId})
method adminSettingsReload (line 2161) | Future<void> adminSettingsReload()
method adminSettingReload (line 2166) | Future<void> adminSettingReload(String key)
method adminPaymentHistories (line 2171) | Future<PagedData<AdminPaymentHistory>> adminPaymentHistories({
method adminUserRooms (line 2201) | Future<List<RoomInServer>> adminUserRooms({required int userId})
method adminUserRoom (line 2213) | Future<RoomInServer> adminUserRoom({required int userId, required int ...
method adminUserRoomMessages (line 2220) | Future<List<MessageInServer>> adminUserRoomMessages({required int user...
method adminUserRoomGroupMessages (line 2232) | Future<List<GroupMessage>> adminUserRoomGroupMessages({
method adminRecentlyMessages (line 2250) | Future<PagedData<MessageInServer>> adminRecentlyMessages({
FILE: lib/repo/cache_repo.dart
class CacheRepository (line 5) | class CacheRepository {
method set (line 11) | Future<void> set(
method get (line 20) | Future<String?> get(String key)
method getAllInGroup (line 30) | Future<Map<String, String>> getAllInGroup(String group)
method remove (line 34) | Future<void> remove(String key)
method clearAll (line 38) | Future<void> clearAll()
FILE: lib/repo/chat_message_repo.dart
class ChatMessageRepository (line 10) | class ChatMessageRepository {
method rooms (line 22) | Future<List<Room>> rooms({int? userId})
method createRoom (line 27) | Future<Room> createRoom({
method deleteRoom (line 50) | Future<void> deleteRoom(int roomId)
method getRecentMessages (line 56) | Future<List<Message>> getRecentMessages({
method sendMessage (line 76) | Future<int> sendMessage(int roomId, Message message)
method fixMessageStatus (line 81) | Future<void> fixMessageStatus(int roomId)
method updateMessage (line 86) | Future<void> updateMessage(int roomId, int id, Message message)
method updateMessagePart (line 91) | Future<void> updateMessagePart(
method removeMessage (line 100) | Future<void> removeMessage(int roomId, List<int> ids)
method clearMessages (line 105) | Future<void> clearMessages(int roomId, {int? userId})
method getLastMessage (line 110) | Future<Message?> getLastMessage(int roomId, {int? userId, int? chatHis...
method room (line 115) | Future<Room?> room(int roomId)
method updateRoom (line 125) | Future<int> updateRoom(Room room)
method updateRoomLastActiveTime (line 130) | Future<void> updateRoomLastActiveTime(int roomId)
method createChatHistory (line 134) | Future<ChatHistory> createChatHistory({
method recentChatHistories (line 150) | Future<List<ChatHistory>> recentChatHistories(
method getChatHistory (line 164) | Future<ChatHistory?> getChatHistory(int chatId)
method deleteChatHistory (line 168) | Future<int> deleteChatHistory(int chatId)
method updateChatHistory (line 172) | Future<int> updateChatHistory(int chatId, ChatHistory chatHistory)
FILE: lib/repo/creative_island_repo.dart
class CreativeIslandRepository (line 4) | class CreativeIslandRepository {
method getRecentHistories (line 9) | Future<List<CreativeIslandHistory>> getRecentHistories(
method create (line 19) | Future<CreativeIslandHistory> create(
method update (line 40) | Future<void> update(int id, CreativeIslandHistory his)
method delete (line 44) | Future<int> delete(int hisId)
method history (line 48) | Future<CreativeIslandHistory?> history(int id)
FILE: lib/repo/data/cache_data.dart
class CacheDataProvider (line 3) | class CacheDataProvider {
method set (line 8) | Future<void> set(
method getAllInGroup (line 24) | Future<Map<String, String>> getAllInGroup(String group)
method get (line 44) | Future<String?> get(String key)
method remove (line 60) | Future<void> remove(String key)
method gc (line 65) | Future<void> gc()
method clearAll (line 74) | Future<void> clearAll()
FILE: lib/repo/data/chat_history.dart
class ChatHistoryProvider (line 4) | class ChatHistoryProvider {
method getChatHistories (line 8) | Future<List<ChatHistory>> getChatHistories(
method create (line 45) | Future<ChatHistory> create({
method update (line 66) | Future<int> update(ChatHistory his)
method delete (line 81) | Future<int> delete(int id)
method history (line 85) | Future<ChatHistory?> history(int id)
FILE: lib/repo/data/chat_message_data.dart
class MessagePart (line 4) | class MessagePart {
class ChatMessageDataProvider (line 11) | class ChatMessageDataProvider {
method getRecentMessages (line 15) | Future<List<Message>> getRecentMessages(int count, {int? userId, int? ...
method getLastMessage (line 33) | Future<Message?> getLastMessage(
method sendMessage (line 58) | Future<int> sendMessage(int roomId, Message message)
method fixMessageStatus (line 66) | Future<void> fixMessageStatus(int roomId)
method updateMessage (line 77) | Future<void> updateMessage(int roomId, int id, Message message)
method updateMessagePart (line 88) | Future<void> updateMessagePart(
method removeMessage (line 108) | Future<void> removeMessage(int roomId, List<int> ids)
method clearMessages (line 120) | Future<void> clearMessages(int roomId, {int? userId})
FILE: lib/repo/data/creative_island_data.dart
class CreativeIslandDataProvider (line 4) | class CreativeIslandDataProvider {
method getRecentHistories (line 8) | Future<List<CreativeIslandHistory>> getRecentHistories(
method create (line 25) | Future<CreativeIslandHistory> create(
method update (line 49) | Future<void> update(int id, CreativeIslandHistory his)
method delete (line 55) | Future<int> delete(int hisId)
method history (line 61) | Future<CreativeIslandHistory?> history(int id)
FILE: lib/repo/data/room_data.dart
class RoomDataProvider (line 5) | class RoomDataProvider {
method chatRooms (line 10) | Future<List<Room>> chatRooms({int? userId})
method createRoom (line 23) | Future<Room> createRoom({
method deleteRoom (line 52) | Future<int> deleteRoom(int roomId)
method room (line 57) | Future<Room?> room(int roomId)
method updateRoom (line 68) | Future<int> updateRoom(Room room)
method updateRoomLastActiveTime (line 82) | Future<void> updateRoomLastActiveTime(int roomId)
FILE: lib/repo/data/settings_data.dart
class SettingDataProvider (line 3) | class SettingDataProvider {
method loadSettings (line 12) | Future<void> loadSettings()
method listen (line 21) | void listen(
method set (line 27) | Future<void> set(String key, String value)
method get (line 43) | String? get(String key)
method getDefault (line 47) | String getDefault(String key, String defaultValue)
method getDefaultInt (line 51) | int getDefaultInt(String key, int defaultValue)
method getDefaultBool (line 55) | bool getDefaultBool(String key, bool defaultValue)
method getDefaultDouble (line 59) | double getDefaultDouble(String key, double defaultValue)
FILE: lib/repo/deepai_repo.dart
class DeepAIRepository (line 9) | class DeepAIRepository {
method _reloadServerConfig (line 33) | void _reloadServerConfig()
method painting (line 230) | Future<DeepAIPaintResult> painting(
method paintingAsync (line 275) | Future<String> paintingAsync(
class DeepAIPaintResult (line 314) | class DeepAIPaintResult {
FILE: lib/repo/model/chat_history.dart
class ChatHistory (line 1) | class ChatHistory {
method toMap (line 33) | Map<String, Object?> toMap()
FILE: lib/repo/model/chat_message.dart
class ChatMessage (line 5) | class ChatMessage extends OpenAIChatCompletionChoiceMessageModel {
method toMap (line 12) | Map<String, dynamic> toMap()
FILE: lib/repo/model/creative_island_history.dart
class CreativeIslandHistory (line 1) | class CreativeIslandHistory {
method toJson (line 24) | Map<String, Object?> toJson()
FILE: lib/repo/model/group.dart
class ChatGroup (line 7) | class ChatGroup {
method findMember (line 11) | GroupMember? findMember(int memberId)
method toJson (line 29) | Map<String, dynamic> toJson()
class GroupMember (line 37) | class GroupMember {
method toJson (line 62) | Map<String, dynamic> toJson()
class GroupMessage (line 73) | class GroupMessage {
method toJson (line 124) | Map<String, dynamic> toJson()
class GroupChatSendRequestMessage (line 143) | class GroupChatSendRequestMessage {
method toJson (line 154) | Map<String, dynamic> toJson()
class GroupChatSendRequest (line 171) | class GroupChatSendRequest {
method toJson (line 180) | Map<String, dynamic> toJson()
class GroupChatSendResponseTask (line 195) | class GroupChatSendResponseTask {
method toJson (line 214) | Map<String, dynamic> toJson()
class GroupChatSendResponse (line 223) | class GroupChatSendResponse {
method toJson (line 241) | Map<String, dynamic> toJson()
FILE: lib/repo/model/message.dart
class Message (line 6) | class Message {
method setExtra (line 96) | void setExtra(dynamic data)
method updateExtra (line 101) | void updateExtra(dynamic data)
method pushExtra (line 112) | void pushExtra(String key, dynamic value)
method popExtra (line 125) | void popExtra(String key)
method isSystem (line 142) | bool isSystem()
method isInitMessage (line 147) | bool isInitMessage()
method isTimeline (line 152) | bool isTimeline()
method friendlyTime (line 157) | String friendlyTime()
method statusIsFailed (line 162) | bool statusIsFailed()
method statusIsSucceed (line 167) | bool statusIsSucceed()
method statusPending (line 172) | bool statusPending()
method toMap (line 185) | Map<String, Object?> toMap()
type Role (line 231) | enum Role {
type MessageType (line 262) | enum MessageType {
FILE: lib/repo/model/misc.dart
type PromotionEventClickButtonType (line 3) | enum PromotionEventClickButtonType {
class PromotionEvent (line 31) | class PromotionEvent {
method fromJson (line 66) | PromotionEvent fromJson(Map<String, dynamic> json)
class ShareInfo (line 81) | class ShareInfo {
method fromJson (line 98) | ShareInfo fromJson(Map<String, dynamic> json)
class QuotaUsageInDay (line 107) | class QuotaUsageInDay {
method fromJson (line 121) | QuotaUsageInDay fromJson(Map<String, dynamic> json)
class QuotaUsageDetailInDay (line 129) | class QuotaUsageDetailInDay {
method fromJson (line 146) | QuotaUsageDetailInDay fromJson(Map<String, dynamic> json)
class RoomsResponse (line 155) | class RoomsResponse {
method fromJson (line 169) | RoomsResponse fromJson(Map<String, dynamic> json)
class RoomInServer (line 187) | class RoomInServer {
method fromJson (line 250) | RoomInServer fromJson(Map<String, dynamic> json)
class MessageInServer (line 274) | class MessageInServer {
method fromJson (line 321) | MessageInServer fromJson(Map<String, dynamic> json)
class VersionCheckResp (line 340) | class VersionCheckResp {
method fromJson (line 363) | VersionCheckResp fromJson(Map<String, dynamic> json)
class TrySignInResp (line 374) | class TrySignInResp {
method fromJson (line 388) | TrySignInResp fromJson(Map<String, dynamic> json)
class SignInResp (line 396) | class SignInResp {
method fromJson (line 428) | SignInResp fromJson(Map<String, dynamic> json)
class AsyncTaskResp (line 442) | class AsyncTaskResp {
method fromJson (line 461) | AsyncTaskResp fromJson(Map<String, dynamic> json)
class Prompt (line 474) | class Prompt {
class ChatExample (line 493) | class ChatExample {
class TranslateText (line 523) | class TranslateText {
method fromJson (line 534) | fromJson(Map<String, dynamic> json)
class UploadInitResponse (line 539) | class UploadInitResponse {
method fromJson (line 562) | fromJson(Map<String, dynamic> json)
class ModelStyle (line 573) | class ModelStyle {
method fromJson (line 586) | ModelStyle fromJson(Map<String, dynamic> json)
class Model (line 595) | class Model {
method fromJson (line 666) | Model fromJson(Map<String, dynamic> json)
class BackgroundImage (line 691) | class BackgroundImage {
method fromJson (line 702) | BackgroundImage fromJson(Map<String, dynamic> json)
class UserExistenceResp (line 710) | class UserExistenceResp {
method fromJson (line 721) | UserExistenceResp fromJson(Map<String, dynamic> json)
class PromptCategory (line 729) | class PromptCategory {
method fromJson (line 742) | PromptCategory fromJson(Map<String, dynamic> json)
class PromptTag (line 761) | class PromptTag {
method fromJson (line 772) | PromptTag fromJson(Map<String, dynamic> json)
class FreeModelCount (line 780) | class FreeModelCount {
method fromJson (line 803) | FreeModelCount fromJson(Map<String, dynamic> json)
FILE: lib/repo/model/model.dart
class Model (line 3) | class Model {
method uid (line 48) | String uid()
method copyWith (line 52) | Model copyWith({
class ModelPrice (line 107) | class ModelPrice {
FILE: lib/repo/model/room.dart
class Room (line 4) | class Room {
method modelCategory (line 50) | String modelCategory()
method modelName (line 60) | String modelName()
method toJson (line 113) | Map<String, Object?> toJson()
FILE: lib/repo/openai_repo.dart
class OpenAIRepository (line 17) | class OpenAIRepository {
method _reloadServerConfig (line 37) | void _reloadServerConfig()
method createImage (line 61) | Future<List<String>> createImage(
method isChatModel (line 72) | bool isChatModel(String model)
method isImageModel (line 77) | bool isImageModel(String model)
method supportModels (line 148) | List<mm.Model> supportModels()
method completionStream (line 178) | Future<void> completionStream(
method chatStream (line 217) | Future<void> chatStream(
method audioTranscription (line 358) | Future<String> audioTranscription({
class ChatReplyMessage (line 370) | class ChatReplyMessage {
class ChatStreamRespData (line 384) | class ChatStreamRespData {
FILE: lib/repo/settings_repo.dart
class SettingRepository (line 3) | class SettingRepository {
method listen (line 10) | void listen(
method set (line 16) | Future<void> set(String key, String value)
method get (line 20) | String? get(String key)
method stringDefault (line 24) | String stringDefault(String key, String defaultValue)
method intDefault (line 28) | int intDefault(String key, int defaultValue)
method boolDefault (line 32) | bool boolDefault(String key, bool defaultValue)
method doubleDefault (line 36) | double doubleDefault(String key, double defaultValue)
FILE: lib/repo/stabilityai_repo.dart
class StabilityAIRepository (line 9) | class StabilityAIRepository {
method _reloadServerConfig (line 35) | void _reloadServerConfig()
method _buildRequestHeaders (line 58) | Map<String, String> _buildRequestHeaders()
method createImageBase64 (line 172) | Future<List<String>> createImageBase64(
method createImageBase64Async (line 249) | Future<String> createImageBase64Async(
class StabilityAIPrompt (line 318) | class StabilityAIPrompt {
method toJson (line 324) | Map<String, dynamic> toJson()
FILE: linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 18) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: linux/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: linux/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
function gboolean (line 66) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_dispose (line 85) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 91) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 97) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 99) | MyApplication* my_application_new() {
FILE: scripts/main.go
function main (line 12) | func main() {
FILE: web/splash/splash.js
function removeSplashFromWeb (line 1) | function removeSplashFromWeb() {
FILE: web/sqflite_sw.js
function copyProperties (line 1) | function copyProperties(a,b){var s=Object.keys(a)
function mixinPropertiesHard (line 3) | function mixinPropertiesHard(a,b){var s=Object.keys(a)
function mixinPropertiesEasy (line 5) | function mixinPropertiesEasy(a,b){Object.assign(b,a)}
function inherit (line 12) | function inherit(a,b){a.prototype.constructor=a
function inheritMany (line 17) | function inheritMany(a,b){for(var s=0;s<b.length;s++)inherit(b[s],a)}
function mixinEasy (line 17) | function mixinEasy(a,b){mixinPropertiesEasy(b.prototype,a.prototype)
function mixinHard (line 18) | function mixinHard(a,b){mixinPropertiesHard(b.prototype,a.prototype)
function lazyOld (line 19) | function lazyOld(a,b,c,d){var s=a
function lazy (line 26) | function lazy(a,b,c,d){var s=a
function lazyFinal (line 30) | function lazyFinal(a,b,c,d){var s=a
function makeConstList (line 36) | function makeConstList(a){a.immutable$list=Array
function convertToFastObject (line 38) | function convertToFastObject(a){function t(){}t.prototype=a
function convertAllToFastObject (line 40) | function convertAllToFastObject(a){for(var s=0;s<a.length;++s)convertToF...
function instanceTearOffGetter (line 41) | function instanceTearOffGetter(a,b){var s=null
function staticTearOffGetter (line 44) | function staticTearOffGetter(a){var s=null
function tearOffParameters (line 47) | function tearOffParameters(a,b,c,d,e,f,g,h,i,j){if(typeof h=="number")h+=x
function installStaticTearOff (line 48) | function installStaticTearOff(a,b,c,d,e,f,g,h){var s=tearOffParameters(a...
function installInstanceTearOff (line 50) | function installInstanceTearOff(a,b,c,d,e,f,g,h,i,j){c=!!c
function setOrUpdateInterceptorsByTag (line 53) | function setOrUpdateInterceptorsByTag(a){var s=v.interceptorsByTag
function setOrUpdateLeafTags (line 55) | function setOrUpdateLeafTags(a){var s=v.leafTags
function updateTypes (line 57) | function updateTypes(a){var s=v.types
function updateHolder (line 60) | function updateHolder(a,b){copyProperties(b,a)
function initializeDeferredHunk (line 63) | function initializeDeferredHunk(a){x=v.types.length
method fe (line 65) | fe(a,b,c){if(b.h("k<0>").b(a))return new A.ep(a,b.h("@<0>").q(c).h("ep<1...
method rv (line 67) | rv(a){return new A.cQ("Field '"+a+"' has been assigned during initializa...
method oN (line 68) | oN(a){return new A.cQ("Field '"+a+"' has not been initialized.")}
method n9 (line 69) | n9(a){var s,r=a^48
method bZ (line 74) | bZ(a,b){a=a+b&536870911
method nO (line 77) | nO(a){a=a+((a&67108863)<<3)&536870911
method c7 (line 80) | c7(a,b,c){return a}
method eb (line 81) | eb(a,b,c,d){A.aT(b,"start")
method nD (line 84) | nD(a,b,c,d){if(t.V.b(a))return new A.ce(a,b,c.h("@<0>").q(d).h("ce<1,2>"))
method p0 (line 86) | p0(a,b,c){var s="count"
method bt (line 92) | bt(){return new A.bB("No element")}
method oJ (line 93) | oJ(){return new A.bB("Too few elements")}
method ry (line 94) | ry(a,b){return new A.dO(a,b.h("dO<0>"))}
method t0 (line 95) | t0(a,b,c){A.he(a,0,J.Y(a)-1,b,c)}
method he (line 96) | he(a,b,c,d,e){if(c-b<=32)A.t_(a,b,c,d,e)
method t_ (line 98) | t_(a,b,c,d,e){var s,r,q,p,o,n
method rZ (line 108) | rZ(a3,a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j=B.c.R(a5-a4+1,6),i=a4+j,h=a5-...
method rd (line 278) | rd(){throw A.b(A.x("Cannot modify unmodifiable Map"))}
method qo (line 279) | qo(a){var s=v.mangledGlobalNames[a]
method vn (line 282) | vn(a,b){var s
method q (line 285) | q(a){var s
method dZ (line 292) | dZ(a){var s,r=$.oR
method nE (line 297) | nE(a,b){var s,r,q,p,o,n=null,m=/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+...
method kb (line 308) | kb(a){return A.rH(a)}
method rH (line 309) | rH(a){var s,r,q,p
method rJ (line 317) | rJ(){if(!!self.location)return self.location.href
method oQ (line 319) | oQ(a){var s,r,q,p,o=a.length
method rS (line 324) | rS(a){var s,r,q,p=A.t([],t.t)
method rR (line 330) | rR(a){var s,r,q
method rT (line 335) | rT(a,b,c){var s,r,q,p
method bx (line 340) | bx(a){var s
method aS (line 344) | aS(a){if(a.date===void 0)a.date=new Date(a.a)
method rQ (line 346) | rQ(a){return a.b?A.aS(a).getUTCFullYear()+0:A.aS(a).getFullYear()+0}
method rO (line 347) | rO(a){return a.b?A.aS(a).getUTCMonth()+1:A.aS(a).getMonth()+1}
method rK (line 348) | rK(a){return a.b?A.aS(a).getUTCDate()+0:A.aS(a).getDate()+0}
method rL (line 349) | rL(a){return a.b?A.aS(a).getUTCHours()+0:A.aS(a).getHours()+0}
method rN (line 350) | rN(a){return a.b?A.aS(a).getUTCMinutes()+0:A.aS(a).getMinutes()+0}
method rP (line 351) | rP(a){return a.b?A.aS(a).getUTCSeconds()+0:A.aS(a).getSeconds()+0}
method rM (line 352) | rM(a){return a.b?A.aS(a).getUTCMilliseconds()+0:A.aS(a).getMilliseconds(...
method bY (line 353) | bY(a,b,c){var s,r,q={}
method rI (line 362) | rI(a,b,c){var s,r,q
method rG (line 369) | rG(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g=Array.isArray(b)?b:A.fM(b,!0,t.z...
method vf (line 394) | vf(a){throw A.b(A.cA(a))}
method d (line 395) | d(a,b){if(a==null)J.Y(a)
method dp (line 397) | dp(a,b){var s,r="index"
method va (line 402) | va(a,b,c){if(a<0||a>c)return A.a1(a,0,c,"start",null)
method cA (line 405) | cA(a){return new A.bh(!0,a,null,null)}
method b (line 406) | b(a){var s,r
method vx (line 414) | vx(){return J.bp(this.dartException)}
method J (line 415) | J(a){throw A.b(a)}
method aM (line 416) | aM(a){throw A.b(A.ap(a))}
method bC (line 417) | bC(a){var s,r,q,p,o,n
method le (line 427) | le(a){return function($expr$){var $argumentsExpr$="$arguments$"
method p7 (line 429) | p7(a){return function($expr$){try{$expr$.$method$}catch(s){return s.mess...
method nA (line 430) | nA(a,b){var s=b==null,r=s?null:b.method
method M (line 432) | M(a){var s
method c9 (line 438) | c9(a,b){if(t.W.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a
method uY (line 440) | uY(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null
method a_ (line 475) | a_(a){var s
method j7 (line 481) | j7(a){if(a==null||typeof a!="object")return J.ax(a)
method vb (line 483) | vb(a,b){var s,r,q,p=a.length
method vl (line 487) | vl(a,b,c,d,e,f){t.Y.a(a)
method c8 (line 493) | c8(a,b){var s
method rb (line 500) | rb(a2){var s,r,q,p,o,n,m,l,k,j,i=a2.co,h=a2.iS,g=a2.iI,f=a2.nDA,e=a2.aI,...
method r7 (line 525) | r7(a,b,c){if(typeof a=="number")return a
method r8 (line 528) | r8(a,b,c,d){var s=A.oB
method oD (line 536) | oD(a,b,c,d){var s,r
method r9 (line 541) | r9(a,b,c,d){var s=A.oB,r=A.r6
method ra (line 552) | ra(a,b,c){var s,r
method od (line 558) | od(a){return A.rb(a)}
method r5 (line 559) | r5(a,b){return A.mF(v.typeUniverse,A.a0(a.a),b)}
method oB (line 560) | oB(a){return a.a}
method r6 (line 561) | r6(a){return a.b}
method oy (line 562) | oy(a){var s,r,q,p=new A.cD("receiver","interceptor"),o=J.jP(Object.getOw...
method aK (line 565) | aK(a){if(a==null)A.v_("boolean expression must not be null")
method v_ (line 567) | v_(a){throw A.b(new A.hO(a))}
method vw (line 568) | vw(a){throw A.b(new A.fp(a))}
method vd (line 569) | vd(a){return v.getIsolateTag(a)}
method v5 (line 570) | v5(a){var s,r=A.t([],t.s)
method vy (line 575) | vy(a,b){var s=$.D
method wM (line 578) | wM(a,b,c){Object.defineProperty(a,b,{value:c,enumerable:false,writable:t...
method vp (line 579) | vp(a){var s,r,q,p,o,n=A.S($.qe.$1(a)),m=$.n6[n]
method qi (line 604) | qi(a,b){var s=Object.getPrototypeOf(a)
method nh (line 607) | nh(a){return J.oj(a,!1,null,!!a.$iF)}
method vs (line 608) | vs(a,b,c){var s=b.prototype
method vj (line 611) | vj(){if(!0===$.oi)return
method vk (line 614) | vk(){var s,r,q,p,o,n,m,l
method vi (line 633) | vi(){var s,r,q,p,o,n,m=B.L()
method dn (line 644) | dn(a,b){return a(b)||b}
method oM (line 645) | oM(a,b,c,d,e,f){var s=b?"m":"",r=c?"":"i",q=d?"u":"",p=e?"s":"",o=f?"g":...
method vu (line 648) | vu(a,b,c){var s
method vt (line 653) | vt(a){if(/[[\]{}()*+?.\\^$|]/.test(a))return a.replace(/[[\]{}()*+?.\\^$...
method vv (line 655) | vv(a,b,c,d){return a.substring(0,b)+d+a.substring(c)}
method aZ (line 748) | aZ(a){return A.J(A.oN(a))}
method nm (line 749) | nm(a){return A.J(A.rv(a))}
method el (line 750) | el(a){var s=new A.lI(a)
method up (line 754) | up(a){return a}
method pJ (line 755) | pJ(a,b,c){}
method uv (line 756) | uv(a){return a}
method rB (line 757) | rB(a){return new Int8Array(a)}
method dS (line 758) | dS(a,b,c){A.pJ(a,b,c)
method b_ (line 761) | b_(a,b,c){A.pJ(a,b,c)
method bK (line 763) | bK(a,b,c){if(a>>>0!==a||a>=c)throw A.b(A.dp(b,a))}
method uq (line 764) | uq(a,b,c){var s
method oY (line 788) | oY(a,b){var s=b.c
method oX (line 790) | oX(a,b){var s=b.c
method oZ (line 792) | oZ(a){var s=a.x
method rY (line 795) | rY(a){return a.at}
method aL (line 796) | aL(a){return A.iS(v.typeUniverse,a,!1)}
method c6 (line 797) | c6(a,b,a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=b.x
method f_ (line 840) | f_(a,b,c,d){var s,r,q,p,o=b.length,n=A.mJ(o)
method uW (line 845) | uW(a,b,c,d){var s,r,q,p,o,n,m=b.length,l=A.mJ(m)
method uV (line 852) | uV(a,b,c,d){var s,r=b.a,q=A.f_(a,r,c,d),p=b.b,o=A.f_(a,p,c,d),n=b.c,m=A....
method t (line 859) | t(a,b){a[v.arrayRti]=b
method q8 (line 861) | q8(a){var s,r=a.$S
method qf (line 865) | qf(a,b){var s
method a0 (line 868) | a0(a){var s
method av (line 872) | av(a){var s=a[v.arrayRti],r=t.b
method v (line 876) | v(a){var s=a.$ti
method o9 (line 878) | o9(a){var s=a.constructor,r=s.$ccache
method uD (line 881) | uD(a,b){var s=a instanceof A.bS?a.__proto__.__proto__.constructor:b,r=A....
method ve (line 884) | ve(a){var s,r=v.types,q=r[a]
method oh (line 888) | oh(a){var s=a instanceof A.bS?A.q8(a):null
method qb (line 890) | qb(a){var s,r,q,p=a.w
method ai (line 898) | ai(a){return A.qb(A.iS(v.typeUniverse,a,!1))}
method uC (line 899) | uC(a){var s,r,q,p,o=this
method dk (line 917) | dk(a,b,c){a.b=c
method uB (line 919) | uB(a){var s,r=this,q=A.uw
method j5 (line 928) | j5(a){var s,r=a.x
method ux (line 936) | ux(a){var s=this
method uz (line 939) | uz(a){if(a==null)return!0
method uL (line 941) | uL(a){var s,r=this
method uG (line 946) | uG(a){var s,r=this
method uw (line 953) | uw(a){var s,r=this
method uy (line 957) | uy(a){var s=this
method pO (line 961) | pO(a,b){throw A.b(A.tS(A.pj(a,A.qf(a,b),A.aJ(b,null))))}
method pj (line 962) | pj(a,b,c){var s=A.cg(a)
method tS (line 964) | tS(a){return new A.eN("TypeError: "+a)}
method au (line 965) | au(a,b){return new A.eN("TypeError: "+A.pj(a,null,b))}
method uI (line 966) | uI(a){return a!=null}
method uj (line 967) | uj(a){if(a!=null)return a
method uM (line 969) | uM(a){return!0}
method uk (line 970) | uk(a){return a}
method cz (line 971) | cz(a){return!0===a||!1===a}
method wx (line 972) | wx(a){if(!0===a)return!0
method wy (line 975) | wy(a){if(!0===a)return!0
method eW (line 979) | eW(a){if(!0===a)return!0
method pI (line 983) | pI(a){if(typeof a=="number")return a
method wA (line 985) | wA(a){if(typeof a=="number")return a
method wz (line 988) | wz(a){if(typeof a=="number")return a
method dl (line 991) | dl(a){return typeof a=="number"&&Math.floor(a)===a}
method j (line 992) | j(a){if(typeof a=="number"&&Math.floor(a)===a)return a
method wB (line 994) | wB(a){if(typeof a=="number"&&Math.floor(a)===a)return a
method dj (line 997) | dj(a){if(typeof a=="number"&&Math.floor(a)===a)return a
method uH (line 1000) | uH(a){return typeof a=="number"}
method uh (line 1001) | uh(a){if(typeof a=="number")return a
method wC (line 1003) | wC(a){if(typeof a=="number")return a
method ui (line 1006) | ui(a){if(typeof a=="number")return a
method uK (line 1009) | uK(a){return typeof a=="string"}
method S (line 1010) | S(a){if(typeof a=="string")return a
method wD (line 1012) | wD(a){if(typeof a=="string")return a
method o6 (line 1015) | o6(a){if(typeof a=="string")return a
method pY (line 1018) | pY(a,b){var s,r,q
method uR (line 1021) | uR(a,b){var s,r,q,p,o,n,m=a.y,l=a.z
method pP (line 1030) | pP(a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=", "
method aJ (line 1063) | aJ(a,b){var s,r,q,p,o,n,m,l=a.x
method uX (line 1084) | uX(a){var s=v.mangledGlobalNames[a]
method u3 (line 1087) | u3(a,b){var s=a.tR[b]
method u2 (line 1090) | u2(a,b){var s,r,q,p,o,n=a.eT,m=n[b]
method u0 (line 1099) | u0(a,b){return A.pG(a.tR,b)}
method u_ (line 1100) | u_(a,b){return A.pG(a.eT,b)}
method iS (line 1101) | iS(a,b,c){var s,r=a.eC,q=r.get(b)
method mF (line 1106) | mF(a,b,c){var s,r,q=b.Q
method u1 (line 1113) | u1(a,b,c){var s,r,q,p=b.as
method bI (line 1121) | bI(a,b){b.a=A.uB
method eQ (line 1124) | eQ(a,b,c){var s,r,q=a.eC.get(c)
method ps (line 1132) | ps(a,b,c){var s,r=b.at+"*",q=a.eC.get(r)
method tX (line 1137) | tX(a,b,c,d){var s,r,q
method o1 (line 1146) | o1(a,b,c){var s,r=b.at+"?",q=a.eC.get(r)
method tW (line 1151) | tW(a,b,c,d){var s,r,q,p
method pr (line 1166) | pr(a,b,c){var s,r=b.at+"/",q=a.eC.get(r)
method tU (line 1171) | tU(a,b,c,d){var s,r,q
method tY (line 1183) | tY(a,b){var s,r,q=""+b+"^",p=a.eC.get(q)
method eO (line 1192) | eO(a){var s,r,q,p=a.length
method tT (line 1195) | tT(a){var s,r,q,p,o,n=a.length
method eP (line 1199) | eP(a,b,c){var s,r,q,p=b
method o_ (line 1212) | o_(a,b,c){var s,r,q,p,o,n
method tZ (line 1226) | tZ(a,b,c){var s,r,q="+"+(b+"("+A.eO(c)+")"),p=a.eC.get(q)
method pq (line 1236) | pq(a,b,c){var s,r,q,p,o,n=b.at,m=c.a,l=m.length,k=c.b,j=k.length,i=c.c,h...
method o0 (line 1250) | o0(a,b,c,d){var s,r=b.at+("<"+A.eO(c)+">"),q=a.eC.get(r)
method tV (line 1255) | tV(a,b,c,d,e){var s,r,q,p,o,n,m,l
method pl (line 1267) | pl(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}
method pn (line 1268) | pn(a){var s,r,q,p,o,n,m,l,k,j=a.r,i=a.s
method tN (line 1347) | tN(a,b,c,d){var s,r,q=b-48
method pm (line 1352) | pm(a,b,c,d,e){var s,r,q,p,o,n,m=b+1
method tM (line 1365) | tM(a,b){var s,r,q,p,o,n=null,m=a.u,l=b.pop()
method tO (line 1392) | tO(a,b){var s=b.pop()
method tL (line 1396) | tL(a,b){var s=b.splice(a.p)
method c4 (line 1400) | c4(a,b,c){if(typeof c=="string")return A.eP(a,c,a.sEA)
method nZ (line 1403) | nZ(a,b,c){var s,r=c.length
method tQ (line 1405) | tQ(a,b,c){var s,r=c.length
method tP (line 1407) | tP(a,b,c){var s,r,q=b.x
method Z (line 1419) | Z(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j
method pR (line 1464) | pR(a3,a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2
method uF (line 1499) | uF(a,b,c,d,e){var s,r,q,p,o,n,m,l=b.y,k=d.y
method pH (line 1511) | pH(a,b,c,d,e,f){var s,r,q,p=b.length
method uJ (line 1515) | uJ(a,b,c,d,e){var s,r=b.z,q=d.z,p=r.length
method f0 (line 1520) | f0(a){var s,r=a.x
method vo (line 1527) | vo(a){var s
method bM (line 1532) | bM(a){var s=a.x
method pG (line 1534) | pG(a,b){var s,r,q=Object.keys(b),p=q.length
method mJ (line 1537) | mJ(a){return a>0?new Array(a):v.typeUniverse.sEA}
method tv (line 1548) | tv(){var s,r,q={}
method tw (line 1556) | tw(a){self.scheduleImmediate(A.c8(new A.lA(t.M.a(a)),0))}
method tx (line 1557) | tx(a){self.setImmediate(A.c8(new A.lB(t.M.a(a)),0))}
method ty (line 1558) | ty(a){A.p6(B.u,t.M.a(a))}
method p6 (line 1559) | p6(a,b){return A.tR(0,b)}
method tR (line 1560) | tR(a,b){var s=new A.mD(!0)
method B (line 1563) | B(a){return new A.eh(new A.E($.D,a.h("E<0>")),a.h("eh<0>"))}
method A (line 1564) | A(a,b){a.$2(0,null)
method p (line 1567) | p(a,b){A.ul(a,b)}
method z (line 1568) | z(a,b){b.a0(0,a)}
method y (line 1569) | y(a,b){b.bA(A.M(a),A.a_(a))}
method ul (line 1570) | ul(a,b){var s,r,q=new A.mM(b),p=new A.mN(b)
method C (line 1578) | C(a){var s=function(b,c){return function(d,e){while(true)try{b(d,e)
method wt (line 1582) | wt(a){return new A.db(a,1)}
method tI (line 1583) | tI(){return B.am}
method tJ (line 1584) | tJ(a){return new A.db(a,3)}
method uO (line 1585) | uO(a,b){return new A.eK(a,b.h("eK<0>"))}
method jh (line 1586) | jh(a,b){var s=A.c7(a,"error",t.K)
method f8 (line 1588) | f8(a){var s
method rl (line 1591) | rl(a,b){var s=new A.E($.D,b.h("E<0>"))
method oG (line 1594) | oG(a,b){var s,r,q,p,o,n,m,l
method oH (line 1609) | oH(a,b){var s,r
method dE (line 1615) | dE(a,b,c){var s,r
method nv (line 1624) | nv(a,b){var s,r,q,p,o,n,m,l,k,j,i={},h=null,g=!1,f=new A.E($.D,b.h("E<m<...
method pK (line 1640) | pK(a,b,c){var s=$.D.b7(b,c)
method lU (line 1644) | lU(a,b){var s,r,q
method da (line 1652) | da(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c={},b=c.a=a
method uS (line 1706) | uS(a,b){if(t.Q.b(a))return b.cN(a,t.z,t.K,t.l)
method uP (line 1709) | uP(){var s,r
method uU (line 1715) | uU(){$.oa=!0
method q_ (line 1719) | q_(a){var s=new A.hP(a),r=$.eX
method uT (line 1722) | uT(a){var s,r,q,p=$.dm
method qm (line 1732) | qm(a){var s,r=null,q=$.D
method w3 (line 1739) | w3(a,b){return new A.iD(A.c7(a,"stream",t.K),b.h("iD<0>"))}
method oc (line 1740) | oc(a){return}
method pi (line 1741) | pi(a,b,c){var s=b==null?A.v3():b
method tG (line 1743) | tG(a,b){if(t.b9.b(b))return a.cN(b,t.z,t.K,t.l)
method uQ (line 1746) | uQ(a){}
method un (line 1747) | un(a,b,c){var s=a.Y(0),r=$.f2()
method tn (line 1750) | tn(a,b){var s=$.D
method mZ (line 1753) | mZ(a,b){A.uT(new A.n_(a,b))}
method pV (line 1754) | pV(a,b,c,d,e){var s,r
method pX (line 1765) | pX(a,b,c,d,e,f,g){var s,r
method pW (line 1777) | pW(a,b,c,d,e,f,g,h,i){var s,r
method n0 (line 1790) | n0(a,b,c,d){var s,r
method rw (line 1960) | rw(a,b,c,d,e){if(c==null)if(b==null){if(a==null)return new A.as(d.h("@<0...
method aO (line 1964) | aO(a,b,c){return b.h("@<0>").q(c).h("jU<1,2>").a(A.vb(a,new A.as(b.h("@<...
method X (line 1965) | X(a,b){return new A.as(a.h("@<0>").q(b).h("as<1,2>"))}
method tK (line 1966) | tK(a,b,c,d,e){var s=c!=null?c:new A.mq(d)
method rx (line 1968) | rx(a){return new A.es(a.h("es<0>"))}
method nY (line 1969) | nY(){var s=Object.create(null)
method pk (line 1973) | pk(a,b,c){var s=new A.cw(a,b,c.h("cw<0>"))
method ut (line 1976) | ut(a,b){return J.a7(a,b)}
method uu (line 1977) | uu(a){return J.ax(a)}
method rp (line 1978) | rp(a,b,c){var s,r
method nw (line 1985) | nw(a,b,c){var s,r
method ob (line 1994) | ob(a){var s,r
method uN (line 1997) | uN(a,b){var s,r,q,p,o,n,m,l=a.gE(a),k=0,j=0
method nB (line 2027) | nB(a,b,c){var s=A.rw(null,null,null,b,c)
method jZ (line 2030) | jZ(a){var s,r={}
method tt (line 2105) | tt(a,b,c,d){var s,r
method tu (line 2112) | tu(a,b,c,d){var s=a?$.qD():$.qC()
method pa (line 2116) | pa(a,b){var s,r
method ow (line 2119) | ow(a,b,c,d,e,f){if(B.c.ab(f,4)!==0)throw A.b(A.ad("Invalid base64 paddin...
method uf (line 2122) | uf(a){switch(a){case 65:return"Missing extension byte"
method ue (line 2130) | ue(a,b,c){var s,r,q,p=c-b,o=new Uint8Array(p)
method vh (line 2150) | vh(a){return A.j7(a)}
method nd (line 2151) | nd(a,b){var s=A.nE(a,b)
method ox (line 2154) | ox(a){var s=A.nX(a,null)
method rg (line 2157) | rg(a){if(a instanceof A.bS)return a.l(0)
method rh (line 2159) | rh(a,b){a=A.b(a)
method jX (line 2164) | jX(a,b,c,d){var s,r=c?J.rq(a,d):J.nx(a,d)
method jY (line 2167) | jY(a,b,c){var s,r=A.t([],c.h("O<0>"))
method fM (line 2171) | fM(a,b,c){var s
method oO (line 2175) | oO(a,b){var s,r
method fN (line 2180) | fN(a,b){return J.oK(A.jY(a,!1,b))}
method p5 (line 2181) | p5(a,b,c){if(t.hD.b(a))return A.rT(a,b,A.by(b,c,a.length))
method tk (line 2183) | tk(a){return A.bx(a)}
method tl (line 2184) | tl(a,b,c){var s,r,q,p,o,n=null
method b1 (line 2196) | b1(a,b){return new A.dL(a,A.oM(a,!1,b,!1,!1,!1))}
method vg (line 2197) | vg(a,b){return a==null?b==null:a===b}
method lb (line 2198) | lb(a,b,c){var s=J.an(b)
method rC (line 2203) | rC(a,b,c,d,e){return new A.dU(a,b,c,d,e)}
method nQ (line 2204) | nQ(){var s=A.rJ()
method tF (line 2207) | tF(a,b){var s=A.nX(a,b)
method tC (line 2210) | tC(a,b){var s,r,q=$.bN(),p=a.length,o=4-p%4
method pb (line 2217) | pb(a){if(48<=a&&a<=57)return a-48
method tD (line 2219) | tD(a,b,c){var s,r,q,p,o,n,m,l=a.length,k=l-b,j=B.X.fF(k/4),i=new Uint16A...
method nX (line 2236) | nX(a,b){var s,r,q,p,o,n
method b3 (line 2251) | b3(a,b){var s,r=b.length
method nV (line 2256) | nV(a,b,c,d){var s,r,q,p=new Uint16Array(d),o=c-b
method lC (line 2262) | lC(a){var s,r,q,p,o=a<0
method nW (line 2280) | nW(a,b,c,d){var s,r,q,p,o
method tB (line 2289) | tB(a,b,c,d){var s,r,q,p,o,n,m,l=B.c.R(c,16),k=B.c.ab(c,16),j=16-k,i=B.c....
method pc (line 2298) | pc(a,b,c,d){var s,r,q,p,o=B.c.R(c,16)
method tE (line 2307) | tE(a,b,c,d){var s,r,q,p,o,n,m=B.c.R(c,16),l=B.c.ab(c,16),k=16-l,j=B.c.aU...
method lD (line 2319) | lD(a,b,c,d){var s,r,q,p,o=b-d
method tz (line 2325) | tz(a,b,c,d,e){var s,r,q,p,o,n
method hR (line 2338) | hR(a,b,c,d,e){var s,r,q,p,o,n
method ph (line 2350) | ph(a,b,c,d,e,f){var s,r,q,p,o,n,m,l
method tA (line 2364) | tA(a,b,c){var s,r,q,p=b.length
method re (line 2373) | re(a){var s=Math.abs(a),r=a<0?"-":""
method rf (line 2378) | rf(a){if(a>=100)return""+a
method fs (line 2381) | fs(a){if(a>=10)return""+a
method cg (line 2383) | cg(a){if(typeof a=="number"||A.cz(a)||a==null)return J.bp(a)
method f7 (line 2386) | f7(a){return new A.ds(a)}
method ao (line 2387) | ao(a,b){return new A.bh(!1,null,b,a)}
method bq (line 2388) | bq(a,b,c){return new A.bh(!0,a,b,c)}
method jg (line 2389) | jg(a,b,c){return a}
method rV (line 2390) | rV(a){var s=null
method oS (line 2392) | oS(a,b){return new A.cX(null,null,!0,a,b,"Value not in range")}
method a1 (line 2393) | a1(a,b,c,d,e){return new A.cX(b,c,!0,a,d,"Invalid value")}
method by (line 2394) | by(a,b,c){if(0>a||a>c)throw A.b(A.a1(a,0,c,"start",null))
method aT (line 2397) | aT(a,b){if(a<0)throw A.b(A.a1(a,0,null,b,null))
method V (line 2399) | V(a,b,c,d,e){return new A.fE(b,!0,a,e,"Index out of range")}
method x (line 2400) | x(a){return new A.hz(a)}
method hw (line 2401) | hw(a){return new A.hv(a)}
method K (line 2402) | K(a){return new A.bB(a)}
method ap (line 2403) | ap(a){return new A.fj(a)}
method oF (line 2404) | oF(a){return new A.i0(a)}
method ad (line 2405) | ad(a,b,c){return new A.fC(a,b,c)}
method rA (line 2406) | rA(a,b,c,d,e){return new A.dv(a,b.h("@<0>").q(c).q(d).q(e).h("dv<1,2,3,4...
method oP (line 2407) | oP(a,b,c,d){var s,r
method b9 (line 2419) | b9(a){var s=$.qk
method li (line 2422) | li(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=null,a4=a5....
method ts (line 2501) | ts(a){A.S(a)
method tr (line 2503) | tr(a,b,c){var s,r,q,p,o,n,m="IPv4 address should contain exactly 4 parts...
method p9 (line 2518) | p9(a,a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=null,c=new A.lj(a),b=new...
method mG (line 2549) | mG(a,b,c,d,e,f,g){return new A.eR(a,b,c,d,e,f,g)}
method pu (line 2550) | pu(a){if(a==="http")return 80
method di (line 2553) | di(a,b,c){throw A.b(A.ad(c,a,b))}
method u5 (line 2554) | u5(a,b){var s,r,q
method pt (line 2558) | pt(a,b,c){var s,r,q
method u6 (line 2563) | u6(a,b){var s
method o3 (line 2569) | o3(a,b){if(a!=null&&a===A.pu(b))return null
method py (line 2571) | py(a,b,c,d){var s,r,q,p,o,n
method u7 (line 2587) | u7(a,b,c){var s=B.a.aq(a,"%",b)
method pE (line 2589) | pE(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i=d!==""?new A.ah(d):null
method ub (line 2619) | ub(a,b,c){var s,r,q,p,o,n,m,l,k,j,i
method u9 (line 2656) | u9(a,b,c){var s,r,q,p
method u4 (line 2666) | u4(a){if(a==="http")return"http"
method pB (line 2671) | pB(a,b,c){if(a==null)return""
method pz (line 2673) | pz(a,b,c,d,e,f){var s=e==="file",r=s||f,q=A.eS(a,b,c,B.B,!0,!0)
method ua (line 2676) | ua(a,b,c){var s=b.length===0
method pA (line 2679) | pA(a,b,c,d){if(a!=null)return A.eS(a,b,c,B.k,!0,!1)
method px (line 2681) | px(a,b,c){if(a==null)return null
method o4 (line 2683) | o4(a,b,c){var s,r,q,p,o,n=b+2
method o2 (line 2697) | o2(a){var s,r,q,p,o,n,m,l,k="0123456789ABCDEF"
method eS (line 2718) | eS(a,b,c,d,e,f){var s=A.pD(a,b,c,d,e,f)
method pD (line 2720) | pD(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k,j,i=null
method pC (line 2750) | pC(a){if(B.a.J(a,"."))return!0
method bJ (line 2752) | bJ(a){var s,r,q,p,o,n,m
method o5 (line 2763) | o5(a,b){var s,r,q,p,o,n
method pv (line 2780) | pv(a){var s,r,q,p=a.length
method uc (line 2787) | uc(a,b){if(a.h6("package")&&a.c==null)return A.q0(b,0,b.length)
method pF (line 2789) | pF(a){var s,r,q,p=a.gcJ(),o=p.length
method u8 (line 2799) | u8(a,b){var s,r,q
method ud (line 2805) | ud(a,b,c,d,e){var s,r,q,p,o=b
method pw (line 2821) | pw(a){var s=a|32
method p8 (line 2823) | p8(a,b,c){var s,r,q,p,o,n,m,l,k="Invalid MIME type",j=A.t([b-1],t.t)
method us (line 2838) | us(){var s,r,q,p,o,n,m="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl...
method pZ (line 2976) | pZ(a,b,c,d,e){var s,r,q,p,o=$.qK()
method po (line 2983) | po(a){if(a.b===7&&B.a.J(a.a,"package")&&a.c<=0)return A.q0(a.a,a.e,a.f)
method q0 (line 2985) | q0(a,b,c){var s,r,q
method uo (line 2990) | uo(a,b,c){var s,r,q,p,o,n,m
method r4 (line 3097) | r4(a){var s=new self.Blob(a)
method bf (line 3099) | bf(a,b,c,d,e){var s=c==null?null:A.q4(new A.lN(c),t.A)
method q4 (line 3103) | q4(a,b){var s=$.D
method pM (line 3247) | pM(a){var s,r,q
method b7 (line 3259) | b7(a){var s,r,q,p,o,n
method pL (line 3267) | pL(a){var s
method oe (line 3274) | oe(a){var s={}
method qh (line 3277) | qh(a){var s=Object.getPrototypeOf(a),r=s===Object.prototype
method j3 (line 3297) | j3(a,b){var s,r=new A.E($.D,b.h("E<0>")),q=new A.aa(r,b.h("aa<0>")),p=t....
method rE (line 3303) | rE(a,b,c){var s,r=null,q=c.h("df<0>"),p=new A.df(r,r,r,r,q),o=t.a,n=o.a(...
method n4 (line 3326) | n4(a,b,c,d){return d.a(a[b].apply(a,c))}
method j8 (line 3327) | j8(a,b){var s=new A.E($.D,b.h("E<0>")),r=new A.cr(s,b.h("cr<0>"))
method tq (line 3359) | tq(){throw A.b(A.x("Cannot modify an unmodifiable Map"))}
method q3 (line 3362) | q3(a,b){var s,r,q,p,o,n,m,l
method rF (line 3381) | rF(a,b){var s,r,q,p,o,n=b.eg(a)
method tm (line 3400) | tm(){var s,r,q,p,o,n,m,l,k=null
method ug (line 3433) | ug(a){var s
method uZ (line 3438) | uZ(a){if(t.p.b(a))return"Blob("+a.length+")"
method q6 (line 3440) | q6(a){var s=a.$ti
method ri (line 3448) | ri(a){var s=J.T(a),r=s.i(a,"method"),q=s.i(a,"arguments")
method hh (line 3455) | hh(a,b,c,d){var s=new A.bl(a,b,b,c)
method mX (line 3465) | mX(a,b,c,d){var s,r,q,p
method kX (line 3481) | kX(a){return A.tf(a)}
method tf (line 3482) | tf(a){var s=0,r=A.B(t.z),q,p=2,o,n,m,l,k,j,i
method e5 (line 3507) | e5(a,b){var s=A.kH(a)
method e4 (line 3509) | e4(a,b){return $.qJ().a7(new A.kF(b),t.z)}
method at (line 3510) | at(a){var s=0,r=A.B(t.z),q,p
method t9 (line 3609) | t9(a){return new A.kQ(a)}
method kY (line 3610) | kY(a){return A.tg(a)}
method tg (line 3611) | tg(a){var s=0,r=A.B(t.f),q,p=2,o,n,m,l,k,j,i,h,g,f,e,d,c
method t3 (line 3660) | t3(a){return new A.kK(a)}
method nG (line 3661) | nG(a){var s=0,r=A.B(t.z),q
method kH (line 3668) | kH(a){var s=A.p1(a)
method p1 (line 3671) | p1(a){var s=A.p2(a)
method p2 (line 3674) | p2(a){var s=a.b
method cm (line 3677) | cm(a,b,c){var s=a.b
method th (line 3680) | th(a){var s,r="transactionId",q=a.b
method p3 (line 3683) | p3(a){var s=null,r=A.cm(a,"path",t.N)
method hi (line 3686) | hi(a){var s,r,q,p,o=A.cm(a,"arguments",t.j)
method t1 (line 3689) | t1(a){var s=A.t([],t.bw),r=t.f
method tb (line 3693) | tb(a){return new A.kT(a)}
method nL (line 3694) | nL(a,b){var s=0,r=A.B(t.z),q,p,o
method tc (line 3704) | tc(a){return new A.kS(a)}
method nM (line 3705) | nM(a,b){var s=0,r=A.B(t.z),q,p,o,n
method kE (line 3716) | kE(a,b){var s=0,r=A.B(t.X),q,p
method t6 (line 3728) | t6(a){return new A.kN(a)}
method kW (line 3729) | kW(a,b){return A.te(a,b)}
method te (line 3730) | te(a,b){var s=0,r=A.B(t.X),q,p=2,o,n,m,l,k
method ta (line 3758) | ta(a){return new A.kR(a)}
method l_ (line 3759) | l_(a){var s=0,r=A.B(t.z),q,p,o
method nI (line 3774) | nI(a){var s=0,r=A.B(t.z),q
method t8 (line 3782) | t8(a){return new A.kP(a)}
method nK (line 3783) | nK(a,b){var s=0,r=A.B(t.I),q,p
method td (line 3792) | td(a){return new A.kU(a)}
method nN (line 3793) | nN(a,b){var s=0,r=A.B(t.S),q,p
method t2 (line 3802) | t2(a){return new A.kJ(a)}
method t7 (line 3803) | t7(a){return new A.kO(a)}
method nJ (line 3804) | nJ(a){var s=0,r=A.B(t.z),q
method t5 (line 3812) | t5(a){return new A.kM(a)}
method kV (line 3813) | kV(a){var s=0,r=A.B(t.H),q=1,p,o,n,m,l,k,j
method t4 (line 3837) | t4(a){return new A.kL(a)}
method nH (line 3838) | nH(a){var s=0,r=A.B(t.y),q,p,o
method j4 (line 3928) | j4(a){return A.uA(t.A.a(a))}
method uA (line 3929) | uA(a8){var s=0,r=A.B(t.H),q=1,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a...
method vr (line 4027) | vr(a){var s,r,q
method pQ (line 4038) | pQ(a){if(a==null)return!0
method pU (line 4041) | pU(a){var s,r=J.T(a)
method o8 (line 4045) | o8(a){var s,r,q,p,o,n,m,l,k={}
method o7 (line 4061) | o7(a){var s,r,q,p,o,n,m,l,k,j,i,h={}
method nl (line 4092) | nl(a){var s=0,r=A.B(t.cE),q,p
method dq (line 4102) | dq(a,b){var s=0,r=A.B(t.cE),q,p,o,n,m,l,k,j,i,h,g,f
method p4 (line 4137) | p4(a,b,c){return new A.e8(a,c)}
method ti (line 4218) | ti(a){var s=$.qp()
method bd (line 4223) | bd(a,b){return new A.bc(a,b)}
method fF (line 4226) | fF(a){var s=0,r=A.B(t.cF),q,p,o,n
method rD (line 4313) | rD(a,b){return A.n4(a,"put",[b],t.B)}
method nF (line 4314) | nF(a,b,c){var s,r,q,p,o={},n=new A.E($.D,c.h("E<0>")),m=new A.aa(n,c.h("...
method lq (line 4346) | lq(a,b){var s=0,r=A.B(t.ax),q,p,o,n,m
method lt (line 4371) | lt(a,b){var s=0,r=A.B(t.es),q,p,o
method lp (line 4383) | lp(b9,c0){var s=0,r=A.B(t.n0),q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2...
method oV (line 4484) | oV(a,b){var s,r=A.b_(J.bO(a),0,null),q=r.length,p=0
method b0 (line 4488) | b0(a,b){var s=J.bO(a),r=A.oV(a,b)
method oU (line 4490) | oU(a,b,c){var s
method tH (line 4494) | tH(a){var s=t.S
method qj (line 4574) | qj(a){if(typeof dartPrint=="function"){dartPrint(a)
method ur (line 4579) | ur(a){var s,r=a.$dart_jsFunction
method um (line 4585) | um(a,b){t.j.a(b)
method a6 (line 4588) | a6(a,b){if(typeof a=="function")return a
method v9 (line 4590) | v9(){var s,r,q,p,o=null
method qg (line 4600) | qg(a){var s
method vm (line 4604) | vm(a,b){var s=a.length,r=b+2
method f1 (line 4610) | f1(){return A.J(A.x("sqfliteFfiHandlerIo Web not supported"))}
method of (line 4611) | of(a,b,c,d,e,f){var s=b.a,r=b.b,q=A.j(s.at.$1(r)),p=a.a
method j9 (line 4613) | j9(a,b,c,d,e){throw A.b(A.of(a.a,a.b,b,c,d,e))}
method ke (line 4614) | ke(a){var s=0,r=A.B(t.p),q,p
method nC (line 4624) | nC(){return new A.fd()}
method vq (line 4625) | vq(a){A.vr(a)}
method oj (line 4626) | oj(a,b,c,d){return{i:a,p:b,e:c,x:d}}
method n8 (line 4627) | n8(a){var s,r,q,p,o,n=a[v.dispatchPropertyName]
method nx (line 4649) | nx(a,b){if(a<0||a>4294967295)throw A.b(A.a1(a,0,4294967295,"length",null))
method rq (line 4651) | rq(a,b){if(a<0)throw A.b(A.ao("Length must be a non-negative integer: "+...
method rr (line 4653) | rr(a,b){return J.jP(A.t(a,b.h("O<0>")),b)}
method jP (line 4654) | jP(a,b){a.fixed$length=Array
method oK (line 4656) | oK(a){a.fixed$length=Array
method rs (line 4659) | rs(a,b){var s=t.bP
method oL (line 4661) | oL(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:...
method rt (line 4664) | rt(a,b){var s,r
method ru (line 4667) | ru(a,b){var s,r
method bL (line 4671) | bL(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.dJ.prototype
method T (line 4679) | T(a){if(typeof a=="string")return J.bW.prototype
method b8 (line 4685) | b8(a){if(a==null)return a
method vc (line 4690) | vc(a){if(typeof a=="number")return J.cO.prototype
method og (line 4695) | og(a){if(typeof a=="string")return J.bW.prototype
method a2 (line 4699) | a2(a){if(a==null)return a
method qd (line 4703) | qd(a){if(a==null)return a
method a7 (line 4706) | a7(a,b){if(a==null)return b==null
method ab (line 4709) | ab(a,b){if(typeof b==="number")if(a.constructor==Array||typeof a=="strin...
method nq (line 4711) | nq(a,b,c){return J.b8(a).k(a,b,c)}
method qN (line 4712) | qN(a,b,c,d){return J.a2(a).ff(a,b,c,d)}
method qO (line 4713) | qO(a,b){return J.b8(a).m(a,b)}
method qP (line 4714) | qP(a,b,c){return J.a2(a).fB(a,b,c)}
method qQ (line 4715) | qQ(a,b,c,d){return J.a2(a).co(a,b,c,d)}
method qR (line 4716) | qR(a,b){return J.og(a).dL(a,b)}
method jd (line 4717) | jd(a,b){return J.b8(a).bz(a,b)}
method os (line 4718) | os(a,b){return J.og(a).B(a,b)}
method qS (line 4719) | qS(a,b){return J.vc(a).a8(a,b)}
method nr (line 4720) | nr(a,b){return J.T(a).S(a,b)}
method qT (line 4721) | qT(a,b){return J.a2(a).F(a,b)}
method qU (line 4722) | qU(a,b){return J.qd(a).b5(a,b)}
method je (line 4723) | je(a,b){return J.b8(a).v(a,b)}
method qV (line 4724) | qV(a){return J.qd(a).fT(a)}
method bo (line 4725) | bo(a,b){return J.b8(a).D(a,b)}
method bO (line 4726) | bO(a){return J.a2(a).gaE(a)}
method ot (line 4727) | ot(a){return J.a2(a).gaH(a)}
method bP (line 4728) | bP(a){return J.b8(a).gA(a)}
method ax (line 4729) | ax(a){return J.bL(a).gI(a)}
method qW (line 4730) | qW(a){return J.a2(a).gh5(a)}
method dr (line 4731) | dr(a){return J.T(a).gC(a)}
method f3 (line 4732) | f3(a){return J.T(a).gP(a)}
method an (line 4733) | an(a){return J.b8(a).gE(a)}
method ou (line 4734) | ou(a){return J.a2(a).gK(a)}
method Y (line 4735) | Y(a){return J.T(a).gj(a)}
method jf (line 4736) | jf(a){return J.bL(a).gN(a)}
method qX (line 4737) | qX(a){return J.a2(a).gU(a)}
method qY (line 4738) | qY(a,b){return J.T(a).cB(a,b)}
method ov (line 4739) | ov(a,b,c){return J.b8(a).aj(a,b,c)}
method qZ (line 4740) | qZ(a){return J.a2(a).hc(a)}
method r_ (line 4741) | r_(a,b){return J.bL(a).e2(a,b)}
method cB (line 4742) | cB(a,b){return J.a2(a).e6(a,b)}
method r0 (line 4743) | r0(a,b){return J.b8(a).G(a,b)}
method r1 (line 4744) | r1(a,b,c,d,e){return J.b8(a).T(a,b,c,d,e)}
method ns (line 4745) | ns(a,b){return J.b8(a).a2(a,b)}
method r2 (line 4746) | r2(a,b,c){return J.og(a).n(a,b,c)}
method bp (line 4747) | bp(a){return J.bL(a).l(a)}
method W (line 4772) | W(a,b){return a===b}
method gI (line 4773) | gI(a){return A.dZ(a)}
method l (line 4774) | l(a){return"Instance of '"+A.kb(a)+"'"}
method e2 (line 4775) | e2(a,b){t.bg.a(b)
method gN (line 4777) | gN(a){return A.oh(a)}
method l (line 4779) | l(a){return String(a)}
method gI (line 4780) | gI(a){return a?519018:218159}
method gN (line 4781) | gN(a){return B.ai}
method W (line 4784) | W(a,b){return null==b}
method l (line 4785) | l(a){return"null"}
method gI (line 4786) | gI(a){return 0}
method gI (line 4790) | gI(a){return 0}
method gN (line 4791) | gN(a){return B.ab}
method l (line 4792) | l(a){return String(a)}
method gaO (line 4798) | gaO(a){return a.name}
method gj (line 4799) | gj(a){return a.length}
method gdS (line 4800) | gdS(a){return a.exports}
method gh5 (line 4801) | gh5(a){return a.instance}
method gaE (line 4802) | gaE(a){return a.buffer}
method l (line 4806) | l(a){var s=a[$.ol()]
method bz (line 4811) | bz(a,b){return new A.ba(a,A.av(a).h("@<1>").q(b).h("ba<1,2>"))}
method m (line 4812) | m(a,b){A.av(a).c.a(b)
method hi (line 4815) | hi(a,b){var s
method G (line 4820) | G(a,b){var s
method b4 (line 4824) | b4(a,b){var s
method eF (line 4829) | eF(a,b){var s,r
method fG (line 4835) | fG(a){if(!!a.fixed$length)A.J(A.x("clear"))
method D (line 4837) | D(a,b){var s,r
method aj (line 4842) | aj(a,b,c){var s=A.av(a)
method au (line 4844) | au(a,b){var s,r=A.jX(a.length,"",!1,t.N)
method a2 (line 4847) | a2(a,b){return A.eb(a,b,null,A.av(a).c)}
method v (line 4848) | v(a,b){if(!(b>=0&&b<a.length))return A.d(a,b)
method gA (line 4850) | gA(a){if(a.length>0)return a[0]
method gai (line 4852) | gai(a){var s=a.length
method T (line 4855) | T(a,b,c,d,e){var s,r,q,p,o
method ei (line 4868) | ei(a,b){var s,r=A.av(a)
method eh (line 4873) | eh(a){return this.ei(a,null)}
method cG (line 4874) | cG(a,b){var s,r=a.length,q=r-1
method S (line 4879) | S(a,b){var s
method gC (line 4882) | gC(a){return a.length===0}
method gP (line 4883) | gP(a){return a.length!==0}
method l (line 4884) | l(a){return A.nw(a,"[","]")}
method gE (line 4885) | gE(a){return new J.ca(a,a.length,A.av(a).h("ca<1>"))}
method gI (line 4886) | gI(a){return A.dZ(a)}
method gj (line 4887) | gj(a){return a.length}
method i (line 4888) | i(a,b){if(!(b>=0&&b<a.length))throw A.b(A.dp(a,b))
method k (line 4890) | k(a,b,c){A.av(a).c.a(c)
method gu (line 4899) | gu(a){var s=this.d
method p (line 4901) | p(){var s,r=this,q=r.a,p=q.length
method sd_ (line 4907) | sd_(a){this.d=this.$ti.h("1?").a(a)}
method a8 (line 4910) | a8(a,b){var s
method gcF (line 4919) | gcF(a){return a===0?1/a<0:a<0}
method fF (line 4920) | fF(a){var s,r
method l (line 4926) | l(a){if(a===0&&1/a<0)return"-0.0"
method gI (line 4928) | gI(a){var s,r,q,p,o=a|0
method ab (line 4935) | ab(a,b){var s=a%b
method ex (line 4939) | ex(a,b){if((a|0)===a)if(b>=1||b<-1)return a/b|0
method R (line 4941) | R(a,b){return(a|0)===a?a/b|0:this.dC(a,b)}
method dC (line 4942) | dC(a,b){var s=a/b
method aU (line 4946) | aU(a,b){if(b<0)throw A.b(A.cA(b))
method aV (line 4948) | aV(a,b){var s
method M (line 4953) | M(a,b){var s
method fn (line 4957) | fn(a,b){if(0>b)throw A.b(A.cA(b))
method ck (line 4959) | ck(a,b){return b>31?0:a>>>b}
method gN (line 4960) | gN(a){return B.al}
method gdN (line 4965) | gdN(a){var s,r=a<0?-a-1:a,q=r
method gN (line 4968) | gN(a){return B.ak}
method gN (line 4971) | gN(a){return B.aj}
method B (line 4973) | B(a,b){if(b<0)throw A.b(A.dp(a,b))
method t (line 4976) | t(a,b){if(b>=a.length)throw A.b(A.dp(a,b))
method cp (line 4978) | cp(a,b,c){var s=b.length
method dL (line 4981) | dL(a,b){return this.cp(a,b,0)}
method bf (line 4982) | bf(a,b){return a+b}
method dR (line 4983) | dR(a,b){var s=b.length,r=a.length
method az (line 4986) | az(a,b,c,d){var s=A.by(b,c,a.length)
method H (line 4988) | H(a,b,c){var s
method J (line 4993) | J(a,b){return this.H(a,b,0)}
method n (line 4994) | n(a,b,c){return a.substring(b,A.by(b,c,a.length))}
method O (line 4995) | O(a,b){return this.n(a,b,null)}
method hn (line 4996) | hn(a){var s,r,q,p=a.trim(),o=p.length
method bg (line 5004) | bg(a,b){var s,r
method hg (line 5012) | hg(a,b,c){var s=b-a.length
method aq (line 5015) | aq(a,b,c){var s
method cB (line 5019) | cB(a,b){return this.aq(a,b,0)}
method e_ (line 5020) | e_(a,b,c){var s,r
method cG (line 5027) | cG(a,b){return this.e_(a,b,null)}
method S (line 5028) | S(a,b){return A.vu(a,b,0)}
method a8 (line 5029) | a8(a,b){var s
method l (line 5034) | l(a){return a}
method gI (line 5035) | gI(a){var s,r,q
method gN (line 5041) | gN(a){return B.ad}
method gj (line 5042) | gj(a){return a.length}
method gE (line 5047) | gE(a){var s=A.v(this)
method gj (line 5049) | gj(a){return J.Y(this.ga3())}
method gC (line 5050) | gC(a){return J.dr(this.ga3())}
method gP (line 5051) | gP(a){return J.f3(this.ga3())}
method a2 (line 5052) | a2(a,b){var s=A.v(this)
method v (line 5054) | v(a,b){return A.v(this).z[1].a(J.je(this.ga3(),b))}
method gA (line 5055) | gA(a){return A.v(this).z[1].a(J.bP(this.ga3()))}
method S (line 5056) | S(a,b){return J.nr(this.ga3(),b)}
method l (line 5057) | l(a){return J.bp(this.ga3())}
method p (line 5059) | p(){return this.a.p()}
method gu (line 5060) | gu(a){var s=this.a
method ga3 (line 5064) | ga3(){return this.a}
method i (line 5067) | i(a,b){return this.$ti.z[1].a(J.ab(this.a,b))}
method k (line 5068) | k(a,b,c){var s=this.$ti
method T (line 5070) | T(a,b,c,d,e){var s=this.$ti
method a6 (line 5072) | a6(a,b,c,d){return this.T(a,b,c,d,0)}
method bz (line 5076) | bz(a,b){return new A.ba(this.a,this.$ti.h("@<1>").q(b).h("ba<1,2>"))}
method ga3 (line 5077) | ga3(){return this.a}
method F (line 5079) | F(a,b){return J.qT(this.a,b)}
method i (line 5080) | i(a,b){return this.$ti.h("4?").a(J.ab(this.a,b))}
method G (line 5081) | G(a,b){return this.$ti.h("4?").a(J.r0(this.a,b))}
method D (line 5082) | D(a,b){J.bo(this.a,new A.ju(this,this.$ti.h("~(3,4)").a(b)))}
method gK (line 5083) | gK(a){var s=this.$ti
method gU (line 5085) | gU(a){var s=this.$ti
method gj (line 5087) | gj(a){return J.Y(this.a)}
method gC (line 5088) | gC(a){return J.dr(this.a)}
method gP (line 5089) | gP(a){return J.f3(this.a)}
method gaH (line 5090) | gaH(a){return J.ot(this.a).aj(0,new A.jt(this),this.$ti.h("a4<3,4>"))}
method $2 (line 5092) | $2(a,b){var s=this.a.$ti
method $S (line 5096) | $S(){return this.a.$ti.h("~(1,2)")}
method $1 (line 5098) | $1(a){var s,r=this.a.$ti
method $S (line 5102) | $S(){return this.a.$ti.h("a4<3,4>(a4<1,2>)")}
method l (line 5104) | l(a){return"LateInitializationError: "+this.a}
method gj (line 5106) | gj(a){return this.a.length}
method i (line 5107) | i(a,b){return B.a.B(this.a,b)}
method $0 (line 5109) | $0(){return A.oH(null,t.P)}
method gE (line 5114) | gE(a){var s=this
method gC (line 5116) | gC(a){return this.gj(this)===0}
method gA (line 5117) | gA(a){if(this.gj(this)===0)throw A.b(A.bt())
method S (line 5119) | S(a,b){var s,r=this,q=r.gj(r)
method au (line 5122) | au(a,b){var s,r,q,p=this,o=p.gj(p)
method h7 (line 5129) | h7(a){return this.au(a,"")}
method aj (line 5130) | aj(a,b,c){var s=A.v(this)
method a2 (line 5132) | a2(a,b){return A.eb(this,b,null,A.v(this).h("a3.E"))}
method ey (line 5134) | ey(a,b,c,d){var s,r=this.b
method geW (line 5139) | geW(){var s=J.Y(this.a),r=this.c
method gfq (line 5142) | gfq(){var s=J.Y(this.a),r=this.b
method gj (line 5145) | gj(a){var s,r=J.Y(this.a),q=this.b
method v (line 5151) | v(a,b){var s=this,r=s.gfq()+b
method a2 (line 5154) | a2(a,b){var s,r,q=this
method bQ (line 5160) | bQ(a,b){var s,r,q,p=this,o=p.b,n=p.a,m=J.T(n),l=m.gj(n),k=p.c
method gu (line 5168) | gu(a){var s=this.d
method p (line 5170) | p(){var s,r=this,q=r.a,p=J.T(q),o=p.gj(q)
method saZ (line 5176) | saZ(a){this.d=this.$ti.h("1?").a(a)}
method gE (line 5179) | gE(a){var s=A.v(this)
method gj (line 5181) | gj(a){return J.Y(this.a)}
method gC (line 5182) | gC(a){return J.dr(this.a)}
method gA (line 5183) | gA(a){return this.b.$1(J.bP(this.a))}
method v (line 5184) | v(a,b){return this.b.$1(J.je(this.a,b))}
method p (line 5187) | p(){var s=this,r=s.b
method gu (line 5191) | gu(a){var s=this.a
method saZ (line 5193) | saZ(a){this.a=this.$ti.h("2?").a(a)}
method gj (line 5195) | gj(a){return J.Y(this.a)}
method v (line 5196) | v(a,b){return this.b.$1(J.je(this.a,b))}
method gE (line 5198) | gE(a){return new A.cq(J.an(this.a),this.b,this.$ti.h("cq<1>"))}
method aj (line 5199) | aj(a,b,c){var s=this.$ti
method p (line 5202) | p(){var s,r
method gu (line 5205) | gu(a){var s=this.a
method a2 (line 5208) | a2(a,b){A.jg(b,"count",t.S)
method gE (line 5211) | gE(a){return new A.e2(J.an(this.a),this.b,A.v(this).h("e2<1>"))}
method gj (line 5213) | gj(a){var s=J.Y(this.a)-this.b
method a2 (line 5216) | a2(a,b){A.jg(b,"count",t.S)
method p (line 5221) | p(){var s,r
method gu (line 5225) | gu(a){var s=this.a
method gE (line 5228) | gE(a){return B.J}
method gC (line 5229) | gC(a){return!0}
method gj (line 5230) | gj(a){return 0}
method gA (line 5231) | gA(a){throw A.b(A.bt())}
method v (line 5232) | v(a,b){throw A.b(A.a1(b,0,0,"index",null))}
method S (line 5233) | S(a,b){return!1}
method aj (line 5234) | aj(a,b,c){this.$ti.q(c).h("1(2)").a(b)
method a2 (line 5236) | a2(a,b){A.aT(b,"count")
method bQ (line 5238) | bQ(a,b){var s=J.nx(0,this.$ti.c)
method p (line 5241) | p(){return!1}
method gu (line 5242) | gu(a){throw A.b(A.bt())}
method gE (line 5245) | gE(a){return new A.eg(J.an(this.a),this.$ti.h("eg<1>"))}
method p (line 5247) | p(){var s,r
method gu (line 5250) | gu(a){var s=this.a
method k (line 5255) | k(a,b,c){A.v(this).h("c0.E").a(c)
method T (line 5257) | T(a,b,c,d,e){A.v(this).h("e<c0.E>").a(d)
method a6 (line 5259) | a6(a,b,c,d){return this.T(a,b,c,d,0)}
method gj (line 5262) | gj(a){return J.Y(this.a)}
method v (line 5263) | v(a,b){var s=J.Y(this.a)
method i (line 5267) | i(a,b){return this.F(0,b)?J.ab(this.a,A.j(b)):null}
method gj (line 5268) | gj(a){return J.Y(this.a)}
method gU (line 5269) | gU(a){return A.eb(this.a,0,null,this.$ti.c)}
method gK (line 5270) | gK(a){return new A.ic(this.a)}
method gC (line 5271) | gC(a){return J.dr(this.a)}
method gP (line 5272) | gP(a){return J.f3(this.a)}
method F (line 5273) | F(a,b){return A.dl(b)&&b>=0&&b<J.Y(this.a)}
method D (line 5274) | D(a,b){var s,r,q,p
method gj (line 5282) | gj(a){return J.Y(this.a)}
method v (line 5283) | v(a,b){var s=this.a,r=J.T(s)
method gI (line 5286) | gI(a){var s=this._hashCode
method l (line 5291) | l(a){return'Symbol("'+A.q(this.a)+'")'}
method W (line 5292) | W(a,b){if(b==null)return!1
method gC (line 5298) | gC(a){return this.gj(this)===0}
method gP (line 5299) | gP(a){return this.gj(this)!==0}
method l (line 5300) | l(a){r
Condensed preview — 400 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,589K chars).
[
{
"path": ".github/workflows/build_windows_app.yml",
"chars": 840,
"preview": "name: Build Windows app\n\non:\n push:\n branches:\n - main\n - develop\n - main-pc\n\njobs:\n build:\n runs"
},
{
"path": ".gitignore",
"chars": 716,
"preview": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\nmigrate_working_dir/\n\n# IntelliJ re"
},
{
"path": ".metadata",
"chars": 1668,
"preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
},
{
"path": "AppRun",
"chars": 47,
"preview": "#!/bin/sh\n\ncd \"$(dirname \"$0\")\"\nexec ./askaide\n"
},
{
"path": "Dockerfile",
"chars": 93,
"preview": "FROM nginx:1.25\n\nCOPY build/web/ /data/webroot\nCOPY nginx.conf /etc/nginx/conf.d/default.conf"
},
{
"path": "LICENSE",
"chars": 1060,
"preview": "MIT License\n\nCopyright (c) 2023 管宜尧\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof thi"
},
{
"path": "Makefile",
"chars": 2578,
"preview": "\nipa:\n\tflutter build ipa --no-tree-shake-icons --release \n\topen build/ios/ipa\n\nrun:\n\tflutter run --release \n\nbuild-all: "
},
{
"path": "README.md",
"chars": 3727,
"preview": "# AIdea - AI Chat, Collaboration & Image Generation\n\nEnglish | [中文](./README.zh-CN.md)\n\n[ | 中文\n\n[\n mavenCentral()\n }\n\n subprojects {\n afterEvaluate "
},
{
"path": "android/gradle/wrapper/gradle-wrapper.properties",
"chars": 251,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "android/gradle.properties",
"chars": 177,
"preview": "org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError\nandroid.useAndroidX=true\nandroid.enabl"
},
{
"path": "android/settings.gradle",
"chars": 727,
"preview": "pluginManagement {\n def flutterSdkPath = {\n def properties = new Properties()\n file(\"local.properties\")"
},
{
"path": "askaide.desktop",
"chars": 176,
"preview": "[Desktop Entry]\nVersion=1.0\nName=Ask aide\nComment=Ask aide!\nIcon=app\nExec=askaide %U\nTerminal=false\nType=Application\nCat"
},
{
"path": "assets/lottie/empty_status.json",
"chars": 16424,
"preview": "{\"v\":\"4.5.9\",\"fr\":25,\"ip\":0,\"op\":100,\"w\":248,\"h\":187,\"ddd\":0,\"assets\":[],\"layers\":[{\"ddd\":0,\"ind\":0,\"ty\":4,\"nm\":\"\\rtail\""
},
{
"path": "build-win-msix.bat",
"chars": 88,
"preview": "dart run msix:create --release -v --output-path build/windows/runner --output-name AIdea"
},
{
"path": "build-win.bat",
"chars": 31,
"preview": "flutter build windows --release"
},
{
"path": "devtools_options.yaml",
"chars": 184,
"preview": "description: This file stores settings for Dart & Flutter DevTools.\ndocumentation: https://docs.flutter.dev/tools/devtoo"
},
{
"path": "docker-build.sh",
"chars": 233,
"preview": "#!/usr/bin/env bash\n\nVERSION=1.0.14\n\nrm -fr build/web\n\nflutter build web --web-renderer canvaskit --release --dart-defin"
},
{
"path": "flutter_launcher_icons.yaml",
"chars": 987,
"preview": "# flutter pub run flutter_launcher_icons\nflutter_launcher_icons:\n image_path: \"assets/app.png\"\n\n android: \"launcher_ic"
},
{
"path": "install.iss",
"chars": 13034,
"preview": "; Script generated by the Inno Setup Script Wizard.\n; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FI"
},
{
"path": "ios/.gitignore",
"chars": 569,
"preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
},
{
"path": "ios/Flutter/AppFrameworkInfo.plist",
"chars": 774,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Flutter/Debug.xcconfig",
"chars": 107,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Flutter/Release.xcconfig",
"chars": 109,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Podfile",
"chars": 1353,
"preview": "# Uncomment this line to define a global platform for your project\nplatform :ios, '13.0'\n\n# CocoaPods analytics sends ne"
},
{
"path": "ios/Runner/AppDelegate.swift",
"chars": 391,
"preview": "import UIKit\nimport Flutter\n\n@main\n@objc class AppDelegate: FlutterAppDelegate {\n override func application(\n _ appl"
},
{
"path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2097,
"preview": "{\"images\":[{\"size\":\"20x20\",\"idiom\":\"iphone\",\"filename\":\"Icon-App-20x20@2x.png\",\"scale\":\"2x\"},{\"size\":\"20x20\",\"idiom\":\"ip"
},
{
"path": "ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json",
"chars": 308,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"background.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 391,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"LaunchImage.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 3487,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Base.lproj/Main.storyboard",
"chars": 1605,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Info.plist",
"chars": 2834,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/Runner-Bridging-Header.h",
"chars": 38,
"preview": "#import \"GeneratedPluginRegistrant.h\"\n"
},
{
"path": "ios/Runner/Runner.entitlements",
"chars": 447,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/project.pbxproj",
"chars": 30328,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3185,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1510\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 224,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "lib/bloc/account_bloc.dart",
"chars": 1804,
"preview": "import 'package:askaide/helper/constant.dart';\nimport 'package:askaide/helper/http.dart';\nimport 'package:askaide/repo/a"
},
{
"path": "lib/bloc/account_event.dart",
"chars": 394,
"preview": "part of 'account_bloc.dart';\n\n@immutable\nabstract class AccountEvent {}\n\nclass AccountLoadEvent extends AccountEvent {\n "
},
{
"path": "lib/bloc/account_state.dart",
"chars": 348,
"preview": "part of 'account_bloc.dart';\n\n@immutable\nabstract class AccountState {}\n\nclass AccountInitial extends AccountState {}\n\nc"
},
{
"path": "lib/bloc/admin_payment_bloc.dart",
"chars": 701,
"preview": "import 'package:askaide/repo/api/admin/payment.dart';\nimport 'package:askaide/repo/api/page.dart';\nimport 'package:askai"
},
{
"path": "lib/bloc/admin_payment_event.dart",
"chars": 315,
"preview": "part of 'admin_payment_bloc.dart';\n\n@immutable\nsealed class AdminPaymentEvent {}\n\nclass AdminPaymentHistoriesLoadEvent e"
},
{
"path": "lib/bloc/admin_payment_state.dart",
"chars": 477,
"preview": "part of 'admin_payment_bloc.dart';\n\n@immutable\nsealed class AdminPaymentState {}\n\nfinal class AdminPaymentInitial extend"
},
{
"path": "lib/bloc/admin_room_bloc.dart",
"chars": 3518,
"preview": "import 'package:askaide/repo/api/page.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:askaide/repo"
},
{
"path": "lib/bloc/admin_room_event.dart",
"chars": 856,
"preview": "part of 'admin_room_bloc.dart';\n\n@immutable\nsealed class AdminRoomEvent {}\n\nclass AdminRoomsLoadEvent extends AdminRoomE"
},
{
"path": "lib/bloc/admin_room_state.dart",
"chars": 865,
"preview": "part of 'admin_room_bloc.dart';\n\n@immutable\nsealed class AdminRoomState {}\n\nfinal class AdminRoomInitial extends AdminRo"
},
{
"path": "lib/bloc/background_image_bloc.dart",
"chars": 549,
"preview": "import 'package:askaide/repo/api_server.dart';\nimport 'package:askaide/repo/model/misc.dart';\nimport 'package:bloc/bloc."
},
{
"path": "lib/bloc/background_image_event.dart",
"chars": 153,
"preview": "part of 'background_image_bloc.dart';\n\n@immutable\nabstract class BackgroundImageEvent {}\n\nclass BackgroundImageLoadEvent"
},
{
"path": "lib/bloc/background_image_state.dart",
"chars": 290,
"preview": "part of 'background_image_bloc.dart';\n\n@immutable\nabstract class BackgroundImageState {}\n\nclass BackgroundImageInitial e"
},
{
"path": "lib/bloc/bloc_manager.dart",
"chars": 1229,
"preview": "// ignore_for_file: must_call_super\n\nimport 'package:askaide/bloc/chat_message_bloc.dart';\nimport 'package:askaide/helpe"
},
{
"path": "lib/bloc/channel_bloc.dart",
"chars": 1588,
"preview": "import 'package:askaide/repo/api/admin/channels.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:bl"
},
{
"path": "lib/bloc/channel_event.dart",
"chars": 615,
"preview": "part of 'channel_bloc.dart';\n\n@immutable\nsealed class ChannelEvent {}\n\nclass ChannelsLoadEvent extends ChannelEvent {}\n\n"
},
{
"path": "lib/bloc/channel_state.dart",
"chars": 504,
"preview": "part of 'channel_bloc.dart';\n\n@immutable\nsealed class ChannelState {}\n\nfinal class ChannelInitial extends ChannelState {"
},
{
"path": "lib/bloc/chat_chat_bloc.dart",
"chars": 1099,
"preview": "import 'package:askaide/helper/constant.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:askaide/re"
},
{
"path": "lib/bloc/chat_chat_event.dart",
"chars": 440,
"preview": "part of 'chat_chat_bloc.dart';\n\n@immutable\nabstract class ChatChatEvent {}\n\nclass ChatChatLoadRecentHistories extends Ch"
},
{
"path": "lib/bloc/chat_chat_state.dart",
"chars": 338,
"preview": "part of 'chat_chat_bloc.dart';\n\n@immutable\nabstract class ChatChatState {}\n\nclass ChatChatInitial extends ChatChatState "
},
{
"path": "lib/bloc/chat_event.dart",
"chars": 950,
"preview": "part of 'chat_message_bloc.dart';\n\n@immutable\nabstract class ChatMessageEvent {}\n\nclass ChatMessageReceivedEvent extends"
},
{
"path": "lib/bloc/chat_message_bloc.dart",
"chars": 18272,
"preview": "import 'dart:convert';\n\nimport 'package:askaide/bloc/bloc_manager.dart';\nimport 'package:askaide/helper/ability.dart';\ni"
},
{
"path": "lib/bloc/chat_state.dart",
"chars": 917,
"preview": "part of 'chat_message_bloc.dart';\n\n@immutable\nabstract class ChatMessageState {}\n\nclass ChatMessageInitial extends ChatM"
},
{
"path": "lib/bloc/creative_island_bloc.dart",
"chars": 3762,
"preview": "import 'package:askaide/bloc/bloc_manager.dart';\nimport 'package:askaide/repo/api/creative.dart';\nimport 'package:askaid"
},
{
"path": "lib/bloc/creative_island_event.dart",
"chars": 1977,
"preview": "part of 'creative_island_bloc.dart';\n\n@immutable\nabstract class CreativeIslandEvent {}\n\n// class CreativeIslandSaveEvent"
},
{
"path": "lib/bloc/creative_island_state.dart",
"chars": 2233,
"preview": "part of 'creative_island_bloc.dart';\n\n@immutable\nabstract class CreativeIslandState {}\n\nclass CreativeIslandInitial exte"
},
{
"path": "lib/bloc/free_count_bloc.dart",
"chars": 1674,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:askaide/rep"
},
{
"path": "lib/bloc/free_count_event.dart",
"chars": 351,
"preview": "part of 'free_count_bloc.dart';\n\n@immutable\nsealed class FreeCountEvent {}\n\nclass FreeCountReloadEvent extends FreeCount"
},
{
"path": "lib/bloc/free_count_state.dart",
"chars": 544,
"preview": "part of 'free_count_bloc.dart';\n\n@immutable\nsealed class FreeCountState {}\n\nfinal class FreeCountInitial extends FreeCou"
},
{
"path": "lib/bloc/gallery_bloc.dart",
"chars": 968,
"preview": "import 'package:askaide/repo/api/creative.dart';\nimport 'package:askaide/repo/api/page.dart';\nimport 'package:askaide/re"
},
{
"path": "lib/bloc/gallery_event.dart",
"chars": 399,
"preview": "part of 'gallery_bloc.dart';\n\n@immutable\nabstract class GalleryEvent {}\n\nclass GalleryLoadEvent extends GalleryEvent {\n "
},
{
"path": "lib/bloc/gallery_state.dart",
"chars": 427,
"preview": "part of 'gallery_bloc.dart';\n\n@immutable\nabstract class GalleryState {}\n\nclass GalleryInitial extends GalleryState {}\n\nc"
},
{
"path": "lib/bloc/group_chat_bloc.dart",
"chars": 5759,
"preview": "import 'dart:convert';\n\nimport 'package:askaide/helper/cache.dart';\nimport 'package:askaide/helper/logger.dart';\nimport "
},
{
"path": "lib/bloc/group_chat_event.dart",
"chars": 1375,
"preview": "part of 'group_chat_bloc.dart';\n\n@immutable\nsealed class GroupChatEvent {}\n\nclass GroupChatLoadEvent extends GroupChatEv"
},
{
"path": "lib/bloc/group_chat_state.dart",
"chars": 875,
"preview": "part of 'group_chat_bloc.dart';\n\n@immutable\nsealed class GroupChatState {}\n\nfinal class GroupChatInitial extends GroupCh"
},
{
"path": "lib/bloc/model_bloc.dart",
"chars": 1586,
"preview": "import 'package:askaide/repo/api/admin/models.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:bloc"
},
{
"path": "lib/bloc/model_event.dart",
"chars": 576,
"preview": "part of 'model_bloc.dart';\n\n@immutable\nsealed class ModelEvent {}\n\nclass ModelsLoadEvent extends ModelEvent {}\n\nclass Mo"
},
{
"path": "lib/bloc/model_state.dart",
"chars": 466,
"preview": "part of 'model_bloc.dart';\n\n@immutable\nsealed class ModelState {}\n\nfinal class ModelInitial extends ModelState {}\n\nclass"
},
{
"path": "lib/bloc/notify_bloc.dart",
"chars": 442,
"preview": "import 'package:askaide/bloc/bloc_manager.dart';\nimport 'package:flutter/material.dart';\n\npart 'notify_event.dart';\npart"
},
{
"path": "lib/bloc/notify_event.dart",
"chars": 284,
"preview": "part of 'notify_bloc.dart';\n\n@immutable\nabstract class NotifyEvent {}\n\nclass NotifyFiredEvent extends NotifyEvent {\n fi"
},
{
"path": "lib/bloc/notify_state.dart",
"chars": 271,
"preview": "part of 'notify_bloc.dart';\n\n@immutable\nabstract class NotifyState {}\n\nclass NotifyInitial extends NotifyState {}\n\nclass"
},
{
"path": "lib/bloc/payment_bloc.dart",
"chars": 3372,
"preview": "import 'package:askaide/helper/platform.dart';\nimport 'package:askaide/repo/api/payment.dart';\nimport 'package:askaide/r"
},
{
"path": "lib/bloc/payment_event.dart",
"chars": 128,
"preview": "part of 'payment_bloc.dart';\n\n@immutable\nabstract class PaymentEvent {}\n\nclass PaymentLoadAppleProducts extends PaymentE"
},
{
"path": "lib/bloc/payment_state.dart",
"chars": 528,
"preview": "part of 'payment_bloc.dart';\n\n@immutable\nabstract class PaymentState {}\n\nclass PaymentInitial extends PaymentState {}\n\nc"
},
{
"path": "lib/bloc/room_bloc.dart",
"chars": 12647,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askaide/pag"
},
{
"path": "lib/bloc/room_event.dart",
"chars": 2032,
"preview": "part of 'room_bloc.dart';\n\n@immutable\nabstract class RoomEvent {}\n\nclass RoomsLoadEvent extends RoomEvent {\n final bool"
},
{
"path": "lib/bloc/room_state.dart",
"chars": 1521,
"preview": "part of 'room_bloc.dart';\n\n@immutable\nabstract class RoomState {}\n\nclass RoomInitial extends RoomState {}\n\nclass RoomsLo"
},
{
"path": "lib/bloc/user_api_keys_bloc.dart",
"chars": 1215,
"preview": "import 'package:askaide/repo/api/keys.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:bloc/bloc.da"
},
{
"path": "lib/bloc/user_api_keys_event.dart",
"chars": 431,
"preview": "part of 'user_api_keys_bloc.dart';\n\n@immutable\nsealed class UserApiKeysEvent {}\n\nclass UserApiKeysLoad extends UserApiKe"
},
{
"path": "lib/bloc/user_api_keys_state.dart",
"chars": 505,
"preview": "part of 'user_api_keys_bloc.dart';\n\n@immutable\nsealed class UserApiKeysState {}\n\nfinal class UserApiKeysInitial extends "
},
{
"path": "lib/bloc/user_bloc.dart",
"chars": 1002,
"preview": "import 'package:askaide/repo/api/admin/users.dart';\nimport 'package:askaide/repo/api/page.dart';\nimport 'package:askaide"
},
{
"path": "lib/bloc/user_event.dart",
"chars": 462,
"preview": "part of 'user_bloc.dart';\n\n@immutable\nsealed class UserEvent {}\n\nclass UserLoadEvent extends UserEvent {\n final int use"
},
{
"path": "lib/bloc/user_state.dart",
"chars": 557,
"preview": "part of 'user_bloc.dart';\n\n@immutable\nsealed class UserState {}\n\nfinal class UserInitial extends UserState {}\n\nclass Use"
},
{
"path": "lib/bloc/version_bloc.dart",
"chars": 511,
"preview": "import 'package:askaide/repo/api_server.dart';\nimport 'package:askaide/repo/model/misc.dart';\nimport 'package:bloc/bloc."
},
{
"path": "lib/bloc/version_event.dart",
"chars": 121,
"preview": "part of 'version_bloc.dart';\n\n@immutable\nabstract class VersionEvent {}\n\nclass VersionCheckEvent extends VersionEvent {}"
},
{
"path": "lib/bloc/version_state.dart",
"chars": 240,
"preview": "part of 'version_bloc.dart';\n\n@immutable\nabstract class VersionState {}\n\nclass VersionInitial extends VersionState {}\n\nc"
},
{
"path": "lib/data/migrate.dart",
"chars": 10911,
"preview": "import 'package:askaide/helper/constant.dart';\nimport 'package:sqflite/sqflite.dart';\n\n/// 执行数据库迁移\nFuture<void> migrate("
},
{
"path": "lib/helper/ability.dart",
"chars": 4452,
"preview": "import 'package:askaide/helper/constant.dart';\nimport 'package:askaide/helper/platform.dart';\nimport 'package:askaide/re"
},
{
"path": "lib/helper/cache.dart",
"chars": 1722,
"preview": "import 'package:askaide/repo/cache_repo.dart';\nimport 'package:askaide/repo/settings_repo.dart';\n\nclass Cache {\n late f"
},
{
"path": "lib/helper/chat_token.dart",
"chars": 323,
"preview": "import 'package:askaide/helper/logger.dart';\nimport 'package:tiktoken/tiktoken.dart';\n\n/// 计算 message 包含的 token 数量\nint t"
},
{
"path": "lib/helper/color.dart",
"chars": 523,
"preview": "import 'package:flutter/material.dart';\n\n/// 将颜色转换为字符串\nString colorToString(Color color, {String defaultColor = 'FF00000"
},
{
"path": "lib/helper/constant.dart",
"chars": 3197,
"preview": "import 'package:flutter/material.dart';\n\n// 客户端应用版本号\nconst clientVersion = '2.0.0';\n// 本地数据库版本号\nconst databaseVersion = "
},
{
"path": "lib/helper/env.dart",
"chars": 351,
"preview": "/// 默认 API 服务器地址\n/// 注意:当你使用自己的服务器时,请修改该地址为你自己的服务器地址\nconst defaultAPIServerURL = 'https://ai-api.aicode.cc';\n\n/// API 服务"
},
{
"path": "lib/helper/error.dart",
"chars": 1673,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:dart_openai/opena"
},
{
"path": "lib/helper/event.dart",
"chars": 708,
"preview": "class GlobalEvent {\n /// 单例\n static final GlobalEvent _instance = GlobalEvent._internal();\n GlobalEvent._internal();\n"
},
{
"path": "lib/helper/global_store.dart",
"chars": 270,
"preview": "import 'package:askaide/page/component/chat/file_upload.dart';\n\nclass GlobalStore {\n static final GlobalStore _instance"
},
{
"path": "lib/helper/haptic_feedback.dart",
"chars": 343,
"preview": "import 'package:flutter/services.dart';\n\nclass HapticFeedbackHelper {\n static Future<void> lightImpact() async {\n re"
},
{
"path": "lib/helper/helper.dart",
"chars": 4153,
"preview": "import 'dart:convert';\nimport 'dart:io';\nimport 'dart:typed_data';\n\nimport 'package:askaide/helper/logger.dart';\nimport "
},
{
"path": "lib/helper/http.dart",
"chars": 4432,
"preview": "import 'package:askaide/helper/logger.dart';\nimport 'package:dio/dio.dart';\nimport 'package:dio_cache_interceptor/dio_ca"
},
{
"path": "lib/helper/image.dart",
"chars": 460,
"preview": "String imageURL(String url, String filter) {\n if (!url.startsWith('https://ssl.aicode.cc/')) {\n return url;\n }\n\n i"
},
{
"path": "lib/helper/logger.dart",
"chars": 628,
"preview": "import 'dart:io';\n\nimport 'package:askaide/helper/path.dart';\nimport 'package:askaide/helper/platform.dart';\nimport 'pac"
},
{
"path": "lib/helper/lru.dart",
"chars": 1047,
"preview": "import 'dart:collection';\n\nabstract class Disposable {\n void dispose();\n}\n\nclass LRUCache<K, V extends Disposable> {\n "
},
{
"path": "lib/helper/model.dart",
"chars": 1647,
"preview": "import 'package:askaide/helper/constant.dart';\nimport 'package:askaide/repo/api_server.dart';\nimport 'package:askaide/re"
},
{
"path": "lib/helper/model_resolver.dart",
"chars": 6880,
"preview": "import 'dart:io';\n\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askaide/helper/error.dart';\nimport 'pa"
},
{
"path": "lib/helper/path.dart",
"chars": 2042,
"preview": "import 'dart:io' show Directory, Platform;\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askaide/helper"
},
{
"path": "lib/helper/platform.dart",
"chars": 1361,
"preview": "import 'dart:io';\n\nimport 'package:flutter/foundation.dart';\n\nclass PlatformTool {\n static bool isDesktop() {\n retur"
},
{
"path": "lib/helper/queue.dart",
"chars": 1080,
"preview": "import 'dart:async';\nimport 'dart:collection';\n\nclass QueueFinishedException implements Exception {\n final String messa"
},
{
"path": "lib/helper/tips.dart",
"chars": 59,
"preview": "final inputTips = [\n '有问题尽管问我...',\n '开启新对话?往右侧滑动我试试',\n];\n"
},
{
"path": "lib/helper/upload.dart",
"chars": 8867,
"preview": "import 'dart:convert';\nimport 'dart:io';\nimport 'dart:typed_data';\nimport 'package:askaide/helper/constant.dart';\nimport"
},
{
"path": "lib/lang/lang.dart",
"chars": 41807,
"preview": "mixin AppLocale {\n static const String required = 'required';\n static const String wechat = 'wechat';\n static const S"
},
{
"path": "lib/main.dart",
"chars": 53686,
"preview": "import 'package:askaide/bloc/admin_payment_bloc.dart';\nimport 'package:askaide/bloc/admin_room_bloc.dart';\nimport 'packa"
},
{
"path": "lib/page/admin/channels.dart",
"chars": 7893,
"preview": "import 'package:askaide/bloc/channel_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/c"
},
{
"path": "lib/page/admin/channels_add.dart",
"chars": 11498,
"preview": "import 'package:askaide/bloc/channel_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/c"
},
{
"path": "lib/page/admin/channels_edit.dart",
"chars": 12641,
"preview": "import 'package:askaide/bloc/channel_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/c"
},
{
"path": "lib/page/admin/dashboard.dart",
"chars": 7170,
"preview": "import 'package:askaide/page/component/background_container.dart';\nimport 'package:askaide/page/component/dialog.dart';\n"
},
{
"path": "lib/page/admin/messages.dart",
"chars": 8148,
"preview": "import 'package:askaide/bloc/admin_room_bloc.dart';\nimport 'package:askaide/helper/model.dart';\nimport 'package:askaide/"
},
{
"path": "lib/page/admin/models.dart",
"chars": 14284,
"preview": "import 'package:askaide/bloc/model_bloc.dart';\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askaide/he"
},
{
"path": "lib/page/admin/models_add.dart",
"chars": 53498,
"preview": "import 'dart:io';\nimport 'dart:ui';\n\nimport 'package:animated_list_plus/animated_list_plus.dart';\nimport 'package:animat"
},
{
"path": "lib/page/admin/models_edit.dart",
"chars": 57134,
"preview": "import 'dart:io';\nimport 'dart:ui';\n\nimport 'package:animated_list_plus/animated_list_plus.dart';\nimport 'package:animat"
},
{
"path": "lib/page/admin/payments.dart",
"chars": 13516,
"preview": "import 'package:askaide/bloc/admin_payment_bloc.dart';\nimport 'package:askaide/bloc/user_bloc.dart';\nimport 'package:ask"
},
{
"path": "lib/page/admin/recently_messages.dart",
"chars": 15767,
"preview": "import 'package:askaide/bloc/admin_room_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/pag"
},
{
"path": "lib/page/admin/rooms.dart",
"chars": 9293,
"preview": "import 'package:askaide/bloc/admin_room_bloc.dart';\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askai"
},
{
"path": "lib/page/admin/user.dart",
"chars": 19559,
"preview": "import 'package:askaide/bloc/user_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/admi"
},
{
"path": "lib/page/admin/users.dart",
"chars": 14554,
"preview": "import 'package:askaide/bloc/user_bloc.dart';\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askaide/hel"
},
{
"path": "lib/page/app_scaffold.dart",
"chars": 6796,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/event.dart';\nimport 'package:askaide/helper"
},
{
"path": "lib/page/auth/signin_or_signup.dart",
"chars": 13708,
"preview": "import 'dart:convert';\n\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/constant.dart';\nimp"
},
{
"path": "lib/page/auth/signin_screen.dart",
"chars": 21107,
"preview": "import 'dart:async';\nimport 'dart:convert';\n\nimport 'package:animated_text_kit/animated_text_kit.dart';\nimport 'package:"
},
{
"path": "lib/page/auth/signup_screen.dart",
"chars": 21771,
"preview": "import 'dart:async';\nimport 'dart:convert';\n\nimport 'package:animated_text_kit/animated_text_kit.dart';\nimport 'package:"
},
{
"path": "lib/page/balance/free_statistics.dart",
"chars": 9406,
"preview": "import 'package:askaide/bloc/free_count_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/pag"
},
{
"path": "lib/page/balance/payment.dart",
"chars": 34726,
"preview": "import 'dart:async';\n\nimport 'package:askaide/bloc/payment_bloc.dart';\nimport 'package:askaide/helper/ability.dart';\nimp"
},
{
"path": "lib/page/balance/payment_history.dart",
"chars": 7194,
"preview": "import 'package:askaide/helper/helper.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/compo"
},
{
"path": "lib/page/balance/price_block.dart",
"chars": 3832,
"preview": "import 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/component/credit.dart';\nimport 'package:askaide/pa"
},
{
"path": "lib/page/balance/quota_usage_details.dart",
"chars": 3720,
"preview": "import 'package:askaide/page/component/background_container.dart';\nimport 'package:askaide/page/component/loading.dart';"
},
{
"path": "lib/page/balance/quota_usage_statistics.dart",
"chars": 4686,
"preview": "import 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/component/background_container.dart';\nimport 'pack"
},
{
"path": "lib/page/balance/web/payment_element.dart",
"chars": 482,
"preview": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_stripe/flutter_stripe.dart';\n\nFuture<PaymentIntent> pay(S"
},
{
"path": "lib/page/balance/web/payment_element_web.dart",
"chars": 1307,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:flutter_stripe_web/"
},
{
"path": "lib/page/balance/web_payment_proxy.dart",
"chars": 4998,
"preview": "import 'package:askaide/helper/logger.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/compo"
},
{
"path": "lib/page/balance/web_payment_result.dart",
"chars": 3088,
"preview": "import 'package:askaide/page/component/theme/custom_theme.dart';\nimport 'package:askaide/page/component/windows.dart';\ni"
},
{
"path": "lib/page/chat/character_chat.dart",
"chars": 25881,
"preview": "import 'dart:convert';\n\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/haptic_feedback.dar"
},
{
"path": "lib/page/chat/character_create.dart",
"chars": 19002,
"preview": "import 'dart:io';\nimport 'dart:math';\n\nimport 'package:askaide/bloc/room_bloc.dart';\nimport 'package:askaide/helper/abil"
},
{
"path": "lib/page/chat/character_edit.dart",
"chars": 20992,
"preview": "import 'dart:io';\nimport 'dart:math';\n\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/mode"
},
{
"path": "lib/page/chat/characters.dart",
"chars": 9420,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/event.dart';\nimport 'package:askaide/helper"
},
{
"path": "lib/page/chat/component/character_box.dart",
"chars": 6955,
"preview": "import 'package:askaide/bloc/room_bloc.dart';\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/help"
},
{
"path": "lib/page/chat/component/group_avatar.dart",
"chars": 4471,
"preview": "import 'package:askaide/helper/image.dart';\nimport 'package:cached_network_image/cached_network_image.dart';\nimport 'pac"
},
{
"path": "lib/page/chat/component/group_empty.dart",
"chars": 3305,
"preview": "import 'package:askaide/page/component/theme/custom_size.dart';\nimport 'package:askaide/page/component/theme/custom_them"
},
{
"path": "lib/page/chat/component/model_switcher.dart",
"chars": 2226,
"preview": "import 'package:askaide/helper/haptic_feedback.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/p"
},
{
"path": "lib/page/chat/component/stop_button.dart",
"chars": 948,
"preview": "import 'package:askaide/page/component/theme/custom_theme.dart';\nimport 'package:flutter/material.dart';\n\nclass StopButt"
},
{
"path": "lib/page/chat/group/chat.dart",
"chars": 24194,
"preview": "import 'dart:async';\n\nimport 'package:askaide/bloc/group_chat_bloc.dart';\nimport 'package:askaide/helper/ability.dart';\n"
},
{
"path": "lib/page/chat/group/create.dart",
"chars": 7495,
"preview": "import 'package:askaide/bloc/room_bloc.dart';\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/help"
},
{
"path": "lib/page/chat/group/edit.dart",
"chars": 19200,
"preview": "import 'package:askaide/bloc/group_chat_bloc.dart';\nimport 'package:askaide/repo/model/group.dart';\nimport 'package:aska"
},
{
"path": "lib/page/chat/home.dart",
"chars": 32899,
"preview": "import 'dart:io';\nimport 'dart:math';\n\nimport 'package:askaide/bloc/chat_chat_bloc.dart';\nimport 'package:askaide/helper"
},
{
"path": "lib/page/chat/home_chat.dart",
"chars": 22770,
"preview": "import 'package:askaide/bloc/chat_message_bloc.dart';\nimport 'package:askaide/bloc/notify_bloc.dart';\nimport 'package:as"
},
{
"path": "lib/page/chat/home_chat_history.dart",
"chars": 10465,
"preview": "import 'package:askaide/bloc/chat_chat_bloc.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page"
},
{
"path": "lib/page/component/account_quota_card.dart",
"chars": 5234,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/comp"
},
{
"path": "lib/page/component/advanced_button.dart",
"chars": 1197,
"preview": "import 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/component/enhanced_button.dart';\nimport 'package:a"
},
{
"path": "lib/page/component/animated_cursor.dart",
"chars": 1421,
"preview": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\n\nclass Cursor extends CustomPainter {\n final Color? color"
},
{
"path": "lib/page/component/attached_button_panel.dart",
"chars": 1293,
"preview": "import 'package:askaide/page/component/theme/custom_size.dart';\nimport 'package:flutter/material.dart';\n\nclass AttachedB"
},
{
"path": "lib/page/component/audio_player.dart",
"chars": 5018,
"preview": "import 'package:askaide/helper/logger.dart';\nimport 'package:askaide/helper/platform.dart';\nimport 'package:askaide/page"
},
{
"path": "lib/page/component/avatar_selector.dart",
"chars": 7415,
"preview": "import 'dart:io';\n\nimport 'package:askaide/helper/haptic_feedback.dart';\nimport 'package:askaide/lang/lang.dart';\nimport"
},
{
"path": "lib/page/component/background_container.dart",
"chars": 5078,
"preview": "import 'dart:ui';\n\nimport 'package:askaide/helper/constant.dart';\nimport 'package:askaide/helper/platform.dart';\nimport "
},
{
"path": "lib/page/component/bottom_sheet_box.dart",
"chars": 1269,
"preview": "import 'package:askaide/helper/platform.dart';\nimport 'package:askaide/page/component/theme/custom_size.dart';\nimport 'p"
},
{
"path": "lib/page/component/button.dart",
"chars": 1184,
"preview": "import 'package:askaide/page/component/enhanced_button.dart';\nimport 'package:flutter/material.dart';\n\nclass Button exte"
},
{
"path": "lib/page/component/chat/chat_bubble.dart",
"chars": 17229,
"preview": "import 'package:askaide/page/component/theme/custom_size.dart';\nimport 'package:flutter/material.dart';\n\n/// 来源于 https:/"
},
{
"path": "lib/page/component/chat/chat_input.dart",
"chars": 20621,
"preview": "import 'dart:io';\n\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/haptic_feedback.dart';\ni"
},
{
"path": "lib/page/component/chat/chat_input_button.dart",
"chars": 3224,
"preview": "import 'package:askaide/page/component/theme/custom_size.dart';\nimport 'package:askaide/page/component/theme/custom_them"
},
{
"path": "lib/page/component/chat/chat_preview.dart",
"chars": 44562,
"preview": "import 'dart:async';\nimport 'dart:convert';\n\nimport 'package:askaide/bloc/chat_message_bloc.dart';\nimport 'package:askai"
},
{
"path": "lib/page/component/chat/chat_share.dart",
"chars": 18245,
"preview": "import 'dart:io';\n\nimport 'package:askaide/helper/ability.dart';\nimport 'package:askaide/helper/constant.dart';\nimport '"
},
{
"path": "lib/page/component/chat/empty.dart",
"chars": 10247,
"preview": "import 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/component/theme/custom_size.dart';\nimport 'package"
},
{
"path": "lib/page/component/chat/enhanced_selectable_text.dart",
"chars": 728,
"preview": "import 'package:flutter/material.dart';\n\nclass EnhancedSelectableText extends StatefulWidget {\n final String text;\n co"
},
{
"path": "lib/page/component/chat/file_upload.dart",
"chars": 2085,
"preview": "import 'dart:convert';\n\nimport 'package:askaide/page/component/image_preview.dart';\nimport 'package:askaide/page/compone"
},
{
"path": "lib/page/component/chat/help_tips.dart",
"chars": 2666,
"preview": "import 'dart:math';\n\nimport 'package:askaide/lang/lang.dart';\nimport 'package:askaide/page/component/theme/custom_theme."
},
{
"path": "lib/page/component/chat/markdown/citation.dart",
"chars": 2458,
"preview": "import 'package:askaide/page/component/theme/custom_size.dart';\nimport 'package:askaide/page/component/theme/custom_them"
},
{
"path": "lib/page/component/chat/markdown/code.dart",
"chars": 4419,
"preview": "import 'package:askaide/helper/ability.dart';\nimport 'package:askaide/page/component/dialog.dart';\nimport 'package:askai"
}
]
// ... and 200 more files (download for full content)
About this extraction
This page contains the full source code of the mylxsw/aidea GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 400 files (2.4 MB), approximately 636.7k tokens, and a symbol index with 3668 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.