├── .clineignore
├── .editorconfig
├── .github
└── workflows
│ ├── flutter-build.yml
│ └── flutter-pre-build.yml
├── .gitignore
├── .metadata
├── .roo
└── mcp.json
├── .vscode
├── launch.json
├── settings.json
└── tasks.json
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── README.zh_CN.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-playstore.png
│ │ ├── kotlin
│ │ │ └── love
│ │ │ │ └── moegirl
│ │ │ │ └── moekey
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_background.xml
│ │ │ ├── drawable
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── android_icon
│ ├── ic_launcher_background.svg
│ └── ic_launcher_foreground.svg
├── emoji_list.json
├── favicon.icns
├── favicon.ico
├── favicon.png
├── locales
│ ├── en-US.2023.11.0.json
│ ├── ja-JP.2023.11.0.json
│ ├── zh-CN.2023.11.0.json
│ └── zh-TW.2023.11.0.json
├── misskey.png
└── misskey.svg
├── crowdin.yml
├── devtools_options.yaml
├── docs
├── Moekey.png
├── Screenshot.png
└── banner.png
├── ios
├── .gitignore
├── ExportOptions.plist
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── 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
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-50x50@1x.png
│ │ │ ├── Icon-App-50x50@2x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
└── RunnerTests
│ └── RunnerTests.swift
├── lib
├── apis
│ ├── dio.dart
│ ├── index.dart
│ ├── models
│ │ ├── announcement.dart
│ │ ├── app.dart
│ │ ├── auth.dart
│ │ ├── clips.dart
│ │ ├── drive.dart
│ │ ├── emojis.dart
│ │ ├── following.dart
│ │ ├── login_user.dart
│ │ ├── me_detailed.dart
│ │ ├── meta.dart
│ │ ├── note.dart
│ │ ├── notification.dart
│ │ ├── translate.dart
│ │ ├── user_full.dart
│ │ └── user_lite.dart
│ └── services
│ │ ├── account_service.dart
│ │ ├── app_service.dart
│ │ ├── auth_service.dart
│ │ ├── clips_service.dart
│ │ ├── drive_service.dart
│ │ ├── following_service.dart
│ │ ├── hashtags_service.dart
│ │ ├── meta_service.dart
│ │ ├── notes_service.dart
│ │ ├── services.dart
│ │ └── user_service.dart
├── constants
│ └── languages.dart
├── database
│ ├── init_database.dart
│ ├── instance.dart
│ ├── link_preview.dart
│ ├── notes.dart
│ ├── timeline.dart
│ └── users.dart
├── generated
│ ├── intl
│ │ ├── messages_af_ZA.dart
│ │ ├── messages_all.dart
│ │ ├── messages_ar_SA.dart
│ │ ├── messages_ca_ES.dart
│ │ ├── messages_cs_CZ.dart
│ │ ├── messages_da_DK.dart
│ │ ├── messages_de_DE.dart
│ │ ├── messages_el_GR.dart
│ │ ├── messages_en_US.dart
│ │ ├── messages_es_ES.dart
│ │ ├── messages_fi_FI.dart
│ │ ├── messages_fr_FR.dart
│ │ ├── messages_he_IL.dart
│ │ ├── messages_hu_HU.dart
│ │ ├── messages_it_IT.dart
│ │ ├── messages_ja_JP.dart
│ │ ├── messages_ko_KR.dart
│ │ ├── messages_nl_NL.dart
│ │ ├── messages_no_NO.dart
│ │ ├── messages_pl_PL.dart
│ │ ├── messages_pt_BR.dart
│ │ ├── messages_pt_PT.dart
│ │ ├── messages_ro_RO.dart
│ │ ├── messages_ru_RU.dart
│ │ ├── messages_sr_SP.dart
│ │ ├── messages_sv_SE.dart
│ │ ├── messages_tr_TR.dart
│ │ ├── messages_uk_UA.dart
│ │ ├── messages_vi_VN.dart
│ │ ├── messages_zh_CN.dart
│ │ └── messages_zh_TW.dart
│ └── l10n.dart
├── hook
│ ├── useExtendedPageController.dart
│ ├── useTimelineScrollController.dart
│ └── use_mk_refresh_load_list_controller.dart
├── l10n
│ ├── intl_af_ZA.arb
│ ├── intl_ar_SA.arb
│ ├── intl_ca_ES.arb
│ ├── intl_cs_CZ.arb
│ ├── intl_da_DK.arb
│ ├── intl_de_DE.arb
│ ├── intl_el_GR.arb
│ ├── intl_en_US.arb
│ ├── intl_es_ES.arb
│ ├── intl_fi_FI.arb
│ ├── intl_fr_FR.arb
│ ├── intl_he_IL.arb
│ ├── intl_hu_HU.arb
│ ├── intl_it_IT.arb
│ ├── intl_ja_JP.arb
│ ├── intl_ko_KR.arb
│ ├── intl_nl_NL.arb
│ ├── intl_no_NO.arb
│ ├── intl_pl_PL.arb
│ ├── intl_pt_BR.arb
│ ├── intl_pt_PT.arb
│ ├── intl_ro_RO.arb
│ ├── intl_ru_RU.arb
│ ├── intl_sr_SP.arb
│ ├── intl_sv_SE.arb
│ ├── intl_tr_TR.arb
│ ├── intl_uk_UA.arb
│ ├── intl_vi_VN.arb
│ ├── intl_zh_CN.arb
│ └── intl_zh_TW.arb
├── logger.dart
├── main.dart
├── pages
│ ├── announcements
│ │ └── announcements.dart
│ ├── clips
│ │ ├── clips.dart
│ │ ├── clips_collection.dart
│ │ ├── clips_my.dart
│ │ ├── clips_notes.dart
│ │ └── clips_page.dart
│ ├── drive
│ │ ├── drive_info.dart
│ │ └── drive_page.dart
│ ├── explore
│ │ ├── explore.dart
│ │ ├── hot.dart
│ │ └── users.dart
│ ├── hashtag
│ │ └── hashtag_page.dart
│ ├── home
│ │ ├── home_page.dart
│ │ └── home_page_state.dart
│ ├── image_preview
│ │ └── image_preview.dart
│ ├── login
│ │ └── login_page.dart
│ ├── notes
│ │ └── note_page.dart
│ ├── notifications
│ │ ├── notifications_group_list.dart
│ │ ├── notifications_mentions_list.dart
│ │ └── notifications_page.dart
│ ├── search
│ │ ├── notes_search.dart
│ │ ├── search_page.dart
│ │ └── user_search.dart
│ ├── settings
│ │ ├── account_manager
│ │ │ └── account_manager_page.dart
│ │ ├── member_info_state.dart
│ │ ├── profile
│ │ │ └── profile.dart
│ │ ├── router.dart
│ │ ├── settings_page.dart
│ │ ├── test
│ │ │ └── test_page.dart
│ │ └── two_panel_layout.dart
│ ├── splash_page
│ │ └── splash_page.dart
│ ├── timeline
│ │ ├── timeline_list.dart
│ │ └── timeline_page.dart
│ ├── user_widgets
│ │ └── widgets_list
│ │ │ ├── state.dart
│ │ │ └── view.dart
│ └── users
│ │ ├── user_clip_list.dart
│ │ ├── user_follow.dart
│ │ ├── user_notes_list.dart
│ │ ├── user_overview.dart
│ │ ├── user_page.dart
│ │ └── user_reactions_list.dart
├── router
│ └── router.dart
├── status
│ ├── apis.dart
│ ├── dio.dart
│ ├── global_snackbar.dart
│ ├── me_detailed.dart
│ ├── misskey_api.dart
│ ├── mk_tabbar_refresh_scroll_state.dart
│ ├── notes.dart
│ ├── notes_listener.dart
│ ├── notifications.dart
│ ├── server.dart
│ ├── themes.dart
│ ├── timeline.dart
│ ├── user.dart
│ ├── user_login.dart
│ └── websocket.dart
├── utils
│ ├── custom_rect_tween.dart
│ ├── format_duration.dart
│ ├── get_padding_note.dart
│ ├── get_random_string.dart
│ ├── get_token.dart
│ ├── image_compression.dart
│ ├── parse_color.dart
│ ├── save_image.dart
│ ├── time_ago_since_date.dart
│ ├── time_to_desired_format.dart
│ └── update_themes.dart
└── widgets
│ ├── blur_widget.dart
│ ├── clips
│ ├── clips_create_dialog.dart
│ ├── clips_create_dialog_state.dart
│ └── clips_folder.dart
│ ├── context_menu.dart
│ ├── driver
│ ├── create_from_url_dialog.dart
│ ├── drive.dart
│ ├── drive_thumbnail.dart
│ ├── driver_list.dart
│ ├── driver_select_dialog
│ │ ├── driver_select_dialog.dart
│ │ └── driver_select_dialog_state.dart
│ ├── driver_upload_bar.dart
│ └── upload_file_dialog.dart
│ ├── emoji_list.dart
│ ├── hashtag
│ ├── hashtag_select_dialog.dart
│ └── hashtag_select_dialog_state.dart
│ ├── hover_builder.dart
│ ├── keep_alive_wrapper.dart
│ ├── loading_weight.dart
│ ├── login
│ ├── login_dialog.dart
│ ├── servers_select.dart
│ └── servers_select_state.dart
│ ├── mfm_text
│ ├── animate
│ │ ├── jelly.dart
│ │ └── spin.dart
│ └── mfm_text.dart
│ ├── mk_button.dart
│ ├── mk_card.dart
│ ├── mk_date_picker.dart
│ ├── mk_dialog.dart
│ ├── mk_header.dart
│ ├── mk_image.dart
│ ├── mk_info_dialog.dart
│ ├── mk_input.dart
│ ├── mk_load_more.dart
│ ├── mk_modal.dart
│ ├── mk_nav_button.dart
│ ├── mk_overflow_show.dart
│ ├── mk_parallax.dart
│ ├── mk_refresh_indicator.dart
│ ├── mk_refresh_load.dart
│ ├── mk_refresh_loading_empty_wrapper.dart
│ ├── mk_scaffold.dart
│ ├── mk_select.dart
│ ├── mk_sliver_pinned.dart
│ ├── mk_switch.dart
│ ├── mk_tabbar_list.dart
│ ├── mk_text_input_dialog.dart
│ ├── mk_user_card.dart
│ ├── note_create_dialog
│ ├── note_create_dialog.dart
│ └── note_create_dialog_state.dart
│ ├── notes
│ ├── note_card.dart
│ ├── note_children.dart
│ ├── note_image.dart
│ └── note_pagination_list.dart
│ ├── notifications
│ └── notifications_user_card.dart
│ ├── reactions.dart
│ ├── settings
│ ├── editable_fields_list.dart
│ ├── fields.dart
│ └── folder.dart
│ ├── sliver_load_more.dart
│ ├── sliver_presistent_header.dart
│ ├── timeline_listview.dart
│ ├── user_select_dialog
│ ├── user_select_dialog.dart
│ └── user_select_dialog_state.dart
│ └── video_player.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.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
└── RunnerTests
│ └── RunnerTests.swift
├── pubspec.lock
├── pubspec.yaml
├── test
└── widget_test.dart
└── 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
├── resources
└── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/.clineignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 | *.g.dart
19 | *.freezed.dart
20 | # The .vscode folder contains launch configuration and tasks you configure in
21 | # VS Code which you may wish to be included in version control, so this line
22 | # is commented out by default.
23 | #.vscode/
24 |
25 | # Flutter/Dart/Pub related
26 | **/doc/api/
27 | **/ios/Flutter/.last_build_id
28 | .dart_tool/
29 | .flutter-plugins
30 | .flutter-plugins-dependencies
31 | .packages
32 | .pub-cache/
33 | .pub/
34 | /build/
35 |
36 | # Symbolication related
37 | app.*.symbols
38 |
39 | # Obfuscation related
40 | app.*.map.json
41 |
42 | # Android Studio will place build artifacts here
43 | /android/app/debug
44 | /android/app/profile
45 | /android/app/release
46 | /android/app/.cxx/
47 | .git
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*.dart]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 | *.g.dart
19 | *.freezed.dart
20 | # The .vscode folder contains launch configuration and tasks you configure in
21 | # VS Code which you may wish to be included in version control, so this line
22 | # is commented out by default.
23 | #.vscode/
24 |
25 | # Flutter/Dart/Pub related
26 | **/doc/api/
27 | **/ios/Flutter/.last_build_id
28 | .dart_tool/
29 | .flutter-plugins
30 | .flutter-plugins-dependencies
31 | .packages
32 | .pub-cache/
33 | .pub/
34 | /build/
35 |
36 | # Symbolication related
37 | app.*.symbols
38 |
39 | # Obfuscation related
40 | app.*.map.json
41 |
42 | # Android Studio will place build artifacts here
43 | /android/app/debug
44 | /android/app/profile
45 | /android/app/release
46 | /android/app/.cxx/
47 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: "9e1c857886f07d342cf106f2cd588bcd5e031bb2"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
17 | base_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
18 | - platform: android
19 | create_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
20 | base_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
21 | - platform: ios
22 | create_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
23 | base_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
24 | - platform: macos
25 | create_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
26 | base_revision: 9e1c857886f07d342cf106f2cd588bcd5e031bb2
27 |
28 | # User provided section
29 |
30 | # List of Local paths (relative to this file) that should be
31 | # ignored by the migrate tool.
32 | #
33 | # Files that are not part of the templates will be ignored by default.
34 | unmanaged_files:
35 | - 'lib/main.dart'
36 | - 'ios/Runner.xcodeproj/project.pbxproj'
37 |
--------------------------------------------------------------------------------
/.roo/mcp.json:
--------------------------------------------------------------------------------
1 | {
2 | "mcpServers": {}
3 | }
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // 使用 IntelliSense 了解相关属性。
3 | // 悬停以查看现有属性的描述。
4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "MoeKey",
9 | "request": "launch",
10 | "type": "dart"
11 | },
12 | {
13 | "name": "MoeKey (profile mode)",
14 | "request": "launch",
15 | "type": "dart",
16 | "flutterMode": "profile"
17 | },
18 | {
19 | "name": "MoeKey (release mode)",
20 | "request": "launch",
21 | "type": "dart",
22 | "flutterMode": "release"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude": {
3 | "**/*.freezed.dart": true,
4 | "**/*.g.dart": true
5 | },
6 | "emeraldwalk.runonsave": {
7 | "commands": [
8 | {
9 | "match": "\\.arb$",
10 | "isAsync": true,
11 | "cmd": "flutter pub global run intl_utils:generate"
12 | }
13 | ]
14 | }
15 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Generate Intl",
6 | "type": "shell",
7 | "command": "flutter pub global run intl_utils:generate",
8 | "problemMatcher": [],
9 | "presentation": {
10 | "reveal": "always",
11 | "panel": "new"
12 | },
13 | "group": "build"
14 | }
15 | ]
16 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | English | [简体中文](./README.zh_CN.md)
2 |
3 | 
4 |
5 | [](https://crowdin.com/project/moekey)
6 |
7 | # MoeKey
8 |
9 | MoeKey is a cross-platform misskey client made by Flutter.
10 |
11 | ## Features
12 |
13 | MoeKey wants to be a UI style consistent with the original Misskey. A fully functional Misskey client.
14 |
15 | > This project is currently under development and has many functional deficiencies
16 |
17 | Currently implemented features:
18 |
19 | - Multi-user login
20 | - Timeline view, search
21 | - Notes related functions
22 | - Notification view
23 | - Clip
24 | - Misskey Announcements
25 | - Explore
26 | - HashTag Page
27 |
28 | Temporarily unimplemented features
29 |
30 | - User Profile Edit
31 | - Misskey Settings
32 | - Antennas, Channels, Lists
33 | - User widgets
34 | - User Achievements
35 |
36 | ## Download
37 |
38 | - [GitHub Releases](https://github.com/MoeKeyDev/MoeKey/releases/latest)
39 |
40 | ## Screenshot
41 |
42 | 
43 |
44 | ## Developers
45 |
46 | ### Localize
47 |
48 | Help us translate MoeKey into your language on [Crowdin](https://crowdin.com/project/moekey)
49 |
50 | riverpod code gen
51 |
52 | ```shell
53 | dart run build_runner watch --use-polling-watcher
54 | ```
55 |
--------------------------------------------------------------------------------
/README.zh_CN.md:
--------------------------------------------------------------------------------
1 | [English](./README.md) | 简体中文
2 |
3 | 
4 |
5 | [](https://crowdin.com/project/moekey)
6 |
7 | # MoeKey
8 |
9 | MoeKey 是由 Flutter 制作的跨平台 misskey 客户端。
10 |
11 | ## 特性
12 |
13 | MoeKey希望成为一个UI风格与原版Misskey保持一致。功能完善的Misskey客户端。
14 |
15 | > 该项目目前正在开发中,存在许多功能缺陷
16 |
17 | 目前已经实现的功能:
18 |
19 | - 多用户登录
20 | - 时间线查看、搜索
21 | - 帖子的发布相关功能
22 | - 通知查看
23 | - 便签
24 | - 系统公告
25 | - 发现
26 | - HashTag 浏览
27 |
28 | 暂时未实现的功能
29 |
30 | - 个人资料编辑
31 | - Misskey设置
32 | - 天线,频道,列表
33 | - 用户小组件
34 | - 用户成就
35 |
36 | ## 下载
37 |
38 | - [GitHub Releases](https://github.com/MoeKeyDev/MoeKey/releases/latest)
39 |
40 | ## 截图
41 |
42 | 
43 |
44 | ## 开发人员
45 |
46 | ### 本地化
47 |
48 | 帮助我们将 MoeKey 翻译成您的语言,请登录 [Crowdin](https://crowdin.com/project/moekey)
49 |
50 | ### 代码生成
51 |
52 | Riverpod 代码生成
53 |
54 | ```shell
55 | dart run build_runner watch --use-polling-watcher
56 | ```
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at https://dart.dev/lints.
17 | #
18 | # Instead of disabling a lint rule for the entire project in the
19 | # section below, it can also be suppressed for a single line of code
20 | # or a specific dart file by using the `// ignore: name_of_lint` and
21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
22 | # producing the lint.
23 | rules:
24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
26 |
27 | # Additional information about this file can be found at
28 | # https://dart.dev/guides/language/analysis-options
29 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | id "dev.flutter.flutter-gradle-plugin"
5 | }
6 |
7 | def localProperties = new Properties()
8 | def localPropertiesFile = rootProject.file('local.properties')
9 | if (localPropertiesFile.exists()) {
10 | localPropertiesFile.withReader('UTF-8') { reader ->
11 | localProperties.load(reader)
12 | }
13 | }
14 |
15 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
16 | if (flutterVersionCode == null) {
17 | flutterVersionCode = '1'
18 | }
19 |
20 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
21 | if (flutterVersionName == null) {
22 | flutterVersionName = '1.0'
23 | }
24 | def keystoreProperties = new Properties()
25 | def keystorePropertiesFile = rootProject.file('key.properties')
26 | if (keystorePropertiesFile.exists()) {
27 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
28 | }
29 |
30 |
31 | android {
32 | namespace "love.moegirl.moekey"
33 | compileSdkVersion flutter.compileSdkVersion
34 | ndkVersion "27.0.12077973"
35 |
36 | compileOptions {
37 | sourceCompatibility JavaVersion.VERSION_1_8
38 | targetCompatibility JavaVersion.VERSION_1_8
39 | }
40 |
41 | kotlinOptions {
42 | jvmTarget = '1.8'
43 | }
44 |
45 | sourceSets {
46 | main.java.srcDirs += 'src/main/kotlin'
47 | }
48 |
49 | defaultConfig {
50 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
51 | applicationId "love.moegirl.moekey"
52 | // You can update the following values to match your application needs.
53 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
54 | minSdkVersion flutter.minSdkVersion
55 | targetSdkVersion flutter.targetSdkVersion
56 | versionCode flutterVersionCode.toInteger()
57 | versionName flutterVersionName
58 | archivesBaseName = "MoeKey-$versionName+$versionCode-Android"
59 | }
60 |
61 | signingConfigs {
62 | release {
63 | keyAlias keystoreProperties['keyAlias']
64 | keyPassword keystoreProperties['keyPassword']
65 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
66 | storePassword keystoreProperties['storePassword']
67 | }
68 | }
69 | buildTypes {
70 | release {
71 | signingConfig signingConfigs.release
72 | }
73 | }
74 | }
75 |
76 | flutter {
77 | source '../..'
78 | }
79 |
80 | dependencies {}
81 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
15 |
23 |
27 |
31 |
32 |
33 |
34 |
35 |
36 |
38 |
41 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/android/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/love/moegirl/moekey/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package love.moegirl.moekey
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v24/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
15 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #E9AFC6
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.9.22'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | google()
16 | mavenCentral()
17 | }
18 | }
19 |
20 | rootProject.buildDir = '../build'
21 | subprojects {
22 | project.buildDir = "${rootProject.buildDir}/${project.name}"
23 | }
24 | subprojects {
25 | project.evaluationDependsOn(':app')
26 | }
27 |
28 | tasks.register("clean", Delete) {
29 | delete rootProject.buildDir
30 | }
31 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip
6 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }
9 | settings.ext.flutterSdkPath = flutterSdkPath()
10 |
11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
12 |
13 | repositories {
14 | google()
15 | mavenCentral()
16 | gradlePluginPortal()
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
21 | }
22 | }
23 |
24 | plugins {
25 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
26 | id "com.android.application" version "8.7.0" apply false
27 | }
28 |
29 | include ":app"
30 |
--------------------------------------------------------------------------------
/assets/android_icon/ic_launcher_background.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
46 |
--------------------------------------------------------------------------------
/assets/favicon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/assets/favicon.icns
--------------------------------------------------------------------------------
/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/assets/favicon.ico
--------------------------------------------------------------------------------
/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/assets/favicon.png
--------------------------------------------------------------------------------
/assets/misskey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/assets/misskey.png
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | project_id_env: CROWDIN_PROJECT_ID
2 | api_token_env: CROWDIN_KEY
3 | base_path: .
4 | base_url: 'https://api.crowdin.com'
5 | preserve_hierarchy: 1
6 | files:
7 | - source: /lib/l10n/intl_zh_CN.arb
8 | translation: /%original_path%/intl_%locale_with_underscore%.arb
9 | type: arb
10 | update_option: update_as_unapproved
11 |
--------------------------------------------------------------------------------
/devtools_options.yaml:
--------------------------------------------------------------------------------
1 | description: This file stores settings for Dart & Flutter DevTools.
2 | documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
3 | extensions:
4 |
--------------------------------------------------------------------------------
/docs/Moekey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/docs/Moekey.png
--------------------------------------------------------------------------------
/docs/Screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/docs/Screenshot.png
--------------------------------------------------------------------------------
/docs/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/docs/banner.png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/ios/ExportOptions.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | method
6 | ad-hoc
7 | compileBitcode
8 |
9 |
10 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '11.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | target 'RunnerTests' do
36 | inherit! :search_paths
37 | end
38 | end
39 |
40 | post_install do |installer|
41 | installer.pods_project.targets.each do |target|
42 | flutter_additional_ios_build_settings(target)
43 | end
44 | end
45 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {"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"}}
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoeKeyDev/MoeKey/9c13243552caef3ac04fadee244f6521f23cbf9c/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | 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.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | MoeKey
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | MoeKey
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | CADisableMinimumFrameDurationOnPhone
45 |
46 | UIApplicationSupportsIndirectInputEvents
47 |
48 | NSAppTransportSecurity
49 |
50 | NSAllowsArbitraryLoads
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/apis/dio.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 | import 'package:dio_smart_retry/dio_smart_retry.dart';
3 |
4 | class MisskeyApisHttpClient {
5 | MisskeyApisHttpClient({
6 | required this.host,
7 | required this.accessToken,
8 | required this.onUnauthorized,
9 | }) {
10 | client = Dio(BaseOptions(
11 | baseUrl: "$host/api",
12 | ));
13 | client.interceptors.add(
14 | RetryInterceptor(
15 | dio: client,
16 | logPrint: print,
17 | ),
18 | );
19 | }
20 |
21 | String host;
22 | String accessToken;
23 | Function? onUnauthorized;
24 | late Dio client;
25 |
26 | Future post(
27 | String path, {
28 | Map? data,
29 | auth = true,
30 | Options? options,
31 | }) async {
32 | try {
33 | return (await client.post(path,
34 | data: {
35 | if (auth) "i": accessToken,
36 | ...?data,
37 | },
38 | options: options))
39 | .data;
40 | } on DioException catch (e) {
41 | // 401
42 | if (e.response?.statusCode == 401) {
43 | onUnauthorized?.call();
44 | }
45 | rethrow;
46 | }
47 | }
48 |
49 | Future