From b5f2ecd56fe0daf74ba05e20244f3ccc6ecb548b Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Wed, 1 Jan 2020 19:10:13 +0100 Subject: [PATCH] Initial commit --- .gitignore | 38 ++ .metadata | 10 + README.md | 16 + android/.gitignore | 7 + android/app/build.gradle | 67 ++ android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 31 + .../chat/fluffy/fluffychat/MainActivity.kt | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../main/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 3619 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../main/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 2356 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 4852 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 7353 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../main/res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 13147 bytes android/app/src/main/res/values/styles.xml | 8 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 31 + android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + android/settings.gradle | 15 + assets/fluffychat-banner.png | Bin 0 -> 61004 bytes assets/logo.png | Bin 0 -> 6461 bytes ios/.gitignore | 32 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 2 + ios/Flutter/Release.xcconfig | 2 + ios/Podfile | 90 +++ ios/Podfile.lock | 67 ++ ios/Runner.xcodeproj/project.pbxproj | 584 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 146486 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 918 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1951 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 2928 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1380 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 2928 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 4396 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1951 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 4046 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 6037 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 2439 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 5078 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 2842 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 5659 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 6037 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 9193 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 3619 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 7353 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 3805 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 7792 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 8554 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 49 ++ ios/Runner/Runner-Bridging-Header.h | 1 + lib/components/adaptive_page_layout.dart | 50 ++ lib/components/avatar.dart | 39 ++ lib/components/chat_settings_popup_menu.dart | 70 +++ lib/components/content_banner.dart | 55 ++ lib/components/dialogs/new_group_dialog.dart | 59 ++ .../dialogs/new_private_chat_dialog.dart | 72 +++ .../dialogs/redact_message_dialog.dart | 32 + lib/components/list_items/chat_list_item.dart | 67 ++ lib/components/list_items/message.dart | 128 ++++ .../list_items/participant_list_item.dart | 119 ++++ lib/components/list_items/state_message.dart | 23 + lib/components/matrix.dart | 167 +++++ lib/components/message_content.dart | 78 +++ lib/main.dart | 59 ++ lib/utils/app_route.dart | 34 + lib/utils/sqflite_store.dart | 588 ++++++++++++++++++ lib/views/chat.dart | 237 +++++++ lib/views/chat_details.dart | 164 +++++ lib/views/chat_list.dart | 135 ++++ lib/views/invitation_selection.dart | 74 +++ lib/views/login.dart | 144 +++++ lib/views/settings.dart | 141 +++++ pubspec.lock | 385 ++++++++++++ pubspec.yaml | 96 +++ test/widget_test.dart | 30 + web/index.html | 10 + 96 files changed, 4522 insertions(+) create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 README.md create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/chat/fluffy/fluffychat/MainActivity.kt create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 assets/fluffychat-banner.png create mode 100644 assets/logo.png create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Podfile create mode 100644 ios/Podfile.lock create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 lib/components/adaptive_page_layout.dart create mode 100644 lib/components/avatar.dart create mode 100644 lib/components/chat_settings_popup_menu.dart create mode 100644 lib/components/content_banner.dart create mode 100644 lib/components/dialogs/new_group_dialog.dart create mode 100644 lib/components/dialogs/new_private_chat_dialog.dart create mode 100644 lib/components/dialogs/redact_message_dialog.dart create mode 100644 lib/components/list_items/chat_list_item.dart create mode 100644 lib/components/list_items/message.dart create mode 100644 lib/components/list_items/participant_list_item.dart create mode 100644 lib/components/list_items/state_message.dart create mode 100644 lib/components/matrix.dart create mode 100644 lib/components/message_content.dart create mode 100644 lib/main.dart create mode 100644 lib/utils/app_route.dart create mode 100644 lib/utils/sqflite_store.dart create mode 100644 lib/views/chat.dart create mode 100644 lib/views/chat_details.dart create mode 100644 lib/views/chat_list.dart create mode 100644 lib/views/invitation_selection.dart create mode 100644 lib/views/login.dart create mode 100644 lib/views/settings.dart create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/widget_test.dart create mode 100644 web/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29b579d --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +lib/generated_plugin_registrant.dart + +# 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/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Exceptions to above rules. +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..361e1e4 --- /dev/null +++ b/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e + channel: beta + +project_type: app diff --git a/README.md b/README.md new file mode 100644 index 0000000..183809f --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# fluffychat + +Chat with your friends. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..bc2100d --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,7 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..a7e3441 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,67 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "chat.fluffy.fluffychat" + minSdkVersion 16 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test:runner:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..fc480dc --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d5fc4f2 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/chat/fluffy/fluffychat/MainActivity.kt b/android/app/src/main/kotlin/chat/fluffy/fluffychat/MainActivity.kt new file mode 100644 index 0000000..97f1298 --- /dev/null +++ b/android/app/src/main/kotlin/chat/fluffy/fluffychat/MainActivity.kt @@ -0,0 +1,12 @@ +package chat.fluffy.fluffychat + +import androidx.annotation.NonNull; +import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugins.GeneratedPluginRegistrant + +class MainActivity: FlutterActivity() { + override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { + GeneratedPluginRegistrant.registerWith(flutterEngine); + } +} diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..635d0f0d36488eb7628806c9ec6379b7a1d8b63d GIT binary patch literal 3619 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c13d615d304dbea05bb3c926851956588930f1 GIT binary patch literal 4852 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..241c889f99676639f972d8c94be8b3830d178642 GIT binary patch literal 7353 zcmV;q97f}bP)nyNvSSfhMn(Yv8AOn6#&MYuQDz1lls}@PgXqYhqx=4mxhk-81%S&=!n!x*hJ|Q%DNpA9f@7#0m zJ@*_5@W@Lu7mAnuenGm(Xi5YT^aPVAjoin8NF)W5$q&FJ0}x60Y{PAYiQJmWt&RLg zN$zXBL{J7sQK433$_bg0*~G_(QayPu&08dXZr&4FMuTyb2t*@5WExGrRwNP3^#gvn zBjSOM4+zkt!_O=-fj7BR?#izscjw8Y-x$4Ni)_NcS{k24ML^0Or(;1PnGQzyv&m>o zy{;FNt(OV7mYC}|(XYL9@J`#V{37!A4oOPXI-j(tN=M(+Apt!6rQxs3%c82kL(CjsU@S!NQMo(P;g@H;Lq<}9Fw-4}y= z4Q;!Lct$$hQ~^&QUStyOQS8b;0tV63fzt-$vmMMyK#E;wCWwq}8;CQUK&OoY?hf%r zMuXUNLVGB8iqE*g-&;G5RX}@R{b1x>nRl!wZ#R&B69qf~A6={XtG1nI*01_}!w0K3 zufN>+0ILF0?#vrPEY4o?Um34W6mV}uATxp2v(L|a@|hKL7d+!Xb>Q3WpSCEV)?Io1 z$t%%p3E~kjBQ}Xd|6D%z$rGzTU!QG$u#14?d-D2v8AJ!je|xyJc>*2*8L6!x0=m!q zcLxEzFmFM+*dRJY{u|-yh6#8K6Wey?uUoZg{j$|xtXFmr(6TuTp9eua0_>1cK0LjA z{=#q~pgA`LWZHevx6P=U)SWF8@Ek;7n!S9^g5@^^q%x}iNbW+ru}uP=hDdZbBOuKO zHOYFYdAYmWBj8yOhk6DhAbo7jUqG-v0`@cRdKV^wF+%jktwpO!2Q|%VP;2$f-~PT5 z2oI7%kiR$0kMWb}zCIPEH9>z`?^xTcf`jL(prl#>RgG<+(CBYGC-oLXXrM0ylP?h# z^ofvImLBgFmmrc%IlTz_pi>v%DICfEiTyUc1XNLrT`PA?(0HDi&gQkq17AV zr-B+dQ_=|2vl3uj|7Zx13Zc@LD63P#``;D8mFiZf-sjun<&ZX=f`FWUhjx_KDx7*f zitj%MFTvKIuE0~1(_utvIHi_(K4@i*7S@vA=OXcM^tNAM1H4$VM{xE+r79pat2EH) zjPTDL=b#TUv6+dX>ZFYMNfNSBDWtv_9bX?MiKoH0q% z-k*)qIt9G)#Tn)bwZxyMro)|Sk-WA6Pw@7i%V0-N8F7e>ynM!qOZDz0peCi3=G%1u ze@OI|W{*w+UvK+-eza&u3v0-*Rs~@)DI^hVmJ(w*Ql*wyp4D6Pt%?WPa-;-C_KmP= z5wUwXKrBX+QiDz=Wc7`Ndk4n>R|DEie#ck0<}nU0pOh1S3jJS44ZDfFn3{mlf6?jr zxl+vRA*LKp&eN0ANS795^LYG%-<~Xo?K$OLocsGn#52R$&V01LnCUjyKp`GDTMgqg zV>&#Je#+O!N{Qtt?JzPbBvup!{FiAN&?C^-Mwx zDjK+dVgCRh@FG{HMxzIv*1nw`IJdOov(qqjcsv>QCxS$5*&3CRZs@HY=b5;JP4AUuuB=9J*xn^NO#@Vadkh z@X+YqFmXuFE>}JJH;2zv!w>n_m^mF+Atx7$pAUDR&S*4(zD)y0l@>(AQc@F8ZL`|u zF(bz$!_$Ag8)QM(=Xy{)MFrJRaP}IU$S#3mass)`h~rg?0>~rQ=-C+qNVnAWs{Sgw z)auDJbGEdJ5#zHD41ko_AYy$k+5YffXd~j^bE=Z@%W(2^&GvJQ#bX1n_J1F^1pO02 znF&2J4RSR+_vtBzra(rGOM%gM_kp;cArM9`1g%yN=kqFI$F?(2OspQ4@4*!V5s$XE z1;k_&C}yqz5j_EEICNh#=MTFf9>klN&H;nsnA=0Y9S)~*uEK`5e}w95+(vWg?7lz* z@Z5s~AmJA)V&($J5h40jII$KQ=wtT@L=j(WXk&a9TjFUC4mR2g=nLXg+4I@qk%92* zN$GI+gfxhb?L3#`%Lr=3ok{S_f-O*XmEEFpnS{jerqyUb->3v{jj@C8M@>Ll9eY<4 z5ha796!uuPp?4(0hR+fphghTc)*giBrZ$_O+o;gM%FSnB?W4nQ_!o8Lif*>Up+{c; zoo9PN&EQDJUfTOur!F@z^E+IbFf{`fF8&pWyx2WoU#SGB@Ce%DsNv;Bk7OjqDUz3`Eyli}_K||y1dcTlRf2PaB8}{k1{NGMc zwOKdwIA64Kb1u9%dl2kCRc_a3xthc0(OIryCM#_b8WsR={QrXx6=QqU*%`cGV@Mar zCZNs<4N%OQrdA>xHF(1>qG36=)C459VO<>g0nB6!jAQ!zonPg#9*0BUh3k(oU6MOv z&nRogoFPvAb^$h~4ccpi@pT$WcO};lgTQUB%_RatGb;6SE)L~lk?j!$;_l+Hmk-}P z0z*b5K+kx`;{DnWS}bAiIkY+*=$n)vR_bi_ChegnAb(%$0tvG5C2Wy@x*RT$;r{Ii zx<_YDmN_gSn-{KL2kPo35UKSbVP>W6o0g^~ARGo;Lo9J@rqj&cUFU&T$cZOXS>EjM zYsFS3TFppX)gWdvyoel17)Q?nv4jP18GW%KcVLKpD`9YAiO7~k@%C~qmXMl&B7&?t zYi&+0vL+^lL7tnBtoQ^c4jsi{!zc9jcCL4z*oFBr>r$3N59(@Lom%z9Q5a6m->w8Y z;X}45yM_>(@g_Zk+Xx83RozxqR{^03#xG)PNQqZV(fMjZh(KRpV{U4nku=~*CvHIAKOh;K!Gen`O+(0SFJA>*9zjH zL~&s?oIO*?gvOX@s8@iNC15Wq!1~-BSEvd|#644cG5>FDP{M03>;@If-nR6J0Fe38IrY?2 zV2ngCoW;sjhvjLa93C}&sWO+c8ocT~S9CNY$N zd+_-1IPj&MPMOzKsC_A{sFZG>(ZE%I)v7vFc z4|D)t1%%z$b2BpG-ERwBlCn*pD?VZoEE*XPaTH>IEWvv=@5IPJ_}ly;@Y1GSCLxr7 zYZ;Xg0)wn16s3Vn(!t}>#xv9V!_tqBGZ|9_T*tWH{Fc6TSv>))fibp!43peiz%^jE zmDGdZr06a!NYOVgNDz<2H1W9M|c&` zHz#i2j2iCB!7GiPAt20s%xAV#+$Noo8Ovm@z`bU;MX2ObJ(OIocRHPnD~RnG0=*J? zKxDLx*`0!0mvNJ2MOh=1m2k_J?+B-^$)SmSRw$*IAYKH72^Mzbl=AV`ASRCByhrYU z>9dDe%)W&?F?Vduh0i|x*{5@F8oN3b6An}>!#MR_yq z-(A2<8`^B-^tK0H1SF-fjcWA@Z#%J z;qlp@uqIiu1n!$k=^Mo)Z;}N|At=}n+7ud465k4at+Qt;Sd({K;-1OrFq3p$_OxOA zq<+xUsDw}dbeyD|`Lb z2q*t06Go5k1CdeI*N-sK)4_cgVB4mXoVO*7pV*Jnah>@Uxo~I-C^6KJYD^Gsqp(Rs zdNKv#XiXkQI+(3JleB}2fN)pmn)hac4~GqRzEW?Pcz=HwcTZnfyJ{cg9KFJNJUae; z)1x`JxjkXwflRV+T8Suz#yXz$-V(eC2#cO9n3%>?0HhHQ6v&diiVd#a-joM2If2f|;rzopm~B!*1`I|UsdTj(=bT`TgWnyQKPU#qQ(nGk5ASPX zIQkfr)PuRL-j)aX4vL6zT6^37I$H(T%y6kqW{IW-rOgwp*65h_2RjhZj#+A3TO2Qe z8O2gTfCesIjmN5jjtZ!vyovE=>?P+XcK^hTquJ7qAG>P%AQL$*yM!5u*~_{7O4c-W zwy18^LjNd-Uv3kZ2negMBAmwSS8C2{os`s7wv^X^ROWg~ev zayGXDUR=6^a~%ux#g;Gr8eUm54F(LhZAr^X*SqwoZBDQ2sY&~OBo{8;G9m-v*)a)r zm2%<6HNnitzadr|m&tpYAJv_YS64_J*y&XB8!b`13K zqb2av!<%6Fs>zVjH?qTXIOTtMe=%(O@Mk8)ts|hNc;T#}0(Yrd;ajO$^N|tcxFkYbh zp^+Q9J-qKs6>u+tS;|p30__ zfuV68vKo)1#>n8#v`EMT8+^rdLs&b*i-6GL=yf{K6N@7;hv$eyOiB^lqf{xB zKX3_?`$jO6xqL!hKn9}`G))QsVtFLs)n&icgBelq_A#OS0pBEq_`$d&elxTpR0X8h zYC&7w0%8O1kGI@i;iw=pS_b*mLa9r>=s_&~Q&~O1iOsN_aaur3ccsySQKRuQb-Fgh_5M#hIgc4;$QZB~Px{0gCd63DMoz$KpJf^P+Ip>*-61l~#* zaK&K(>B$I7N5tc!GdaGmoCs-5?@$=i?y-rf;qdIF$jHhlSA&<{2;L$uR$s?a z>WEKNTqks4wm4BChuRD+MDmax7CKu51_>{7z|)&Bg1miT}gCC zq8rz3&q)rYUzYJ!1m}9vDQ28^lnw&Ilql+kR`612Kx`I`3#?9i2F1#lz1zh?g+r_0 zDS2#o90b{!l8+B=v;duCO@kaH3Y|+WjwK%K9|^A=Dghy4+A{a2MM7p&V0Slzff0~S zrvoi$&`52iGvnA*(kA+;i6a0QF$0vhat%r+bl!cKC zDl#e!AwEwu8F3Aak-6HdU_~O*oBX}pOgspNe$39aoLl+Lqx=+daR)L;*MtcW@D}Z0 zYGYT@{a%=zv}p8@Uwvy@A4H|~tfIsoC!p-B&A0T1L_Z(T%4p(I0%}m|;G3el?rsKe z_=>$?Oak{TvF?CJ325878c;ZqGr7CK8Dl*MtNGZlIOxrDnQq#6jDR$HBOI@2>F#FO zMSzbOmfV%V1h&6&@Cs=4){JFz>-rNp*|#YXw?mC0769XeDPo_46CGct=6eEMfCG6>C@Pv1+Zak5Q z=t4dFwj{J#v-&$$V9wL<2mu|q!mVTzc2#I4#wLX_Lt-}2X+3ha$?Dc$6xpLgV!K$c zVWb-zOvIO4WxY!sofyI_N!$)dv<6+hk4fV4unn$M$knj#qICg91YGwavd9P~Gdhs- z?vQxm3%z+?UpP&=q|z2OT$5{nb5^6MIEmrh!Csb)GBnKBK`~} zFu=B;uR}W%syid8)XI0H1Vos`I+I%}=t8{;G!`lX_6qieKag&!w*y7o%!Cn(bx*4G zq9@kC9E7+n32(PMk~^2oQZ;VNIcunvXNs-tChblJ#{|M=a>C5RZXbyV#wPY)LK<+M zMWB0Od>|h`zjfLO)4z;$N~*P_Xn>)cuan_#L9GHJ{Cyy)2i>yO0?xq*C~!*VM&+*j z#cHKCopk8k-KH*}b38`qF5C``pT98*6PaMWm%qT|EYs2TX*G6l?M7BR;zS9Kq+L& z5V#InpEve=x(?vxmOYDWVX`R$&#jpIWXf}Mp7@v6OECjlHQ;3ex7)cP;2M}LbYLtm ztgc$U@#r_7w13X(V(O~T*EflE^)sLS-HMm=!Tu{WH7#Oqtx*usZH57i+D2X5Z&R1t z|0Vge%bF7FYW&OFwwcInrDE5aW4Z{@a@RNz0lUHZomP!%$2$kNY&>*&|DID-RW<|1?FuN%K7U3{ zZXd7t=HDNaKmSy=_S+W%ynSC5dkI5*Pld?`MgBDy40)~Uw&f|yrhf;(Ju!+i5s9Yw zXD0uxaMkAh;j+-T#9rPbgs#nVz;4Q9GRhS?)mu3i3f`La!7>c7w0o& literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd24a1f775e6a9c5d7e89cf3b4be4c14e3af481 GIT binary patch literal 13147 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 BEEoU) literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..00fa441 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..fc480dc --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..3100ad2 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..38c8d45 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..296b146 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..5a2f14f --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/assets/fluffychat-banner.png b/assets/fluffychat-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..d85c8972811d81e79ee1cdd12028fa237b8245b0 GIT binary patch literal 61004 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

)%Jc&aw8kB@ntoLOMnJ(Gh7M-p6 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 literal 0 HcmV?d00001 diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe3ccb881c74bfd723c730b2e49d274ba3a3d8c GIT binary patch literal 6461 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 + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..e8efba1 --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..399e934 --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..b30a428 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,90 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.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 parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + generated_key_values = {} + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values +end + +target 'Runner' do + use_frameworks! + use_modular_headers! + + # Flutter Pod + + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end + +# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. +install! 'cocoapods', :disable_input_output_paths => true + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..2ba109a --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,67 @@ +PODS: + - file_picker (0.0.1): + - Flutter + - Flutter (1.0.0) + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) + - image_picker (0.0.1): + - Flutter + - path_provider (0.0.1): + - Flutter + - sqflite (0.0.1): + - Flutter + - FMDB (~> 2.7.2) + - url_launcher (0.0.1): + - Flutter + - url_launcher_macos (0.0.1): + - Flutter + - url_launcher_web (0.0.1): + - Flutter + +DEPENDENCIES: + - file_picker (from `.symlinks/plugins/file_picker/ios`) + - Flutter (from `Flutter`) + - image_picker (from `.symlinks/plugins/image_picker/ios`) + - path_provider (from `.symlinks/plugins/path_provider/ios`) + - sqflite (from `.symlinks/plugins/sqflite/ios`) + - url_launcher (from `.symlinks/plugins/url_launcher/ios`) + - url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`) + - url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`) + +SPEC REPOS: + trunk: + - FMDB + +EXTERNAL SOURCES: + file_picker: + :path: ".symlinks/plugins/file_picker/ios" + Flutter: + :path: Flutter + image_picker: + :path: ".symlinks/plugins/image_picker/ios" + path_provider: + :path: ".symlinks/plugins/path_provider/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/ios" + url_launcher: + :path: ".symlinks/plugins/url_launcher/ios" + url_launcher_macos: + :path: ".symlinks/plugins/url_launcher_macos/ios" + url_launcher_web: + :path: ".symlinks/plugins/url_launcher_web/ios" + +SPEC CHECKSUMS: + file_picker: 408623be2125b79a4539cf703be3d4b3abe5e245 + Flutter: 0e3d915762c693b495b44d77113d4970485de6ec + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + image_picker: e3eacd46b94694dde7cf2705955cece853aa1a8f + path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d + sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0 + url_launcher: a1c0cc845906122c4784c542523d8cacbded5626 + url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313 + url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c + +PODFILE CHECKSUM: 1b66dae606f75376c5f2135a8290850eeb09ae83 + +COCOAPODS: 1.8.4 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..114d793 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,584 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + 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 */; }; + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 825E8C4DDFD87D133ACCCC1A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14FAF412639B88C5C2721D00 /* Pods_Runner.framework */; }; + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 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 */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0EF69A899CE7F4E07C5F6599 /* 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 = ""; }; + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 14FAF412639B88C5C2721D00 /* 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 = ""; }; + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 6D40C7CF338C6054DF530EE6 /* 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 = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; + 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 = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B7CDE45F1181122C41ED566D /* 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 = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + 825E8C4DDFD87D133ACCCC1A /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 587F23226AD40CECE246E2A7 /* Pods */ = { + isa = PBXGroup; + children = ( + 0EF69A899CE7F4E07C5F6599 /* Pods-Runner.debug.xcconfig */, + 6D40C7CF338C6054DF530EE6 /* Pods-Runner.release.xcconfig */, + B7CDE45F1181122C41ED566D /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B80C3931E831B6300D905FE /* App.framework */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEBA1CF902C7004384FC /* Flutter.framework */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 587F23226AD40CECE246E2A7 /* Pods */, + 9BE4B8D2394D0E419F06E05E /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 9BE4B8D2394D0E419F06E05E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 14FAF412639B88C5C2721D00 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + F4901FBEE4C8B0FA7B998652 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + BAF2985AB306D24B14B17E3F /* [CP] Embed Pods Frameworks */, + ); + 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 = 1020; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + 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 */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + 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"; + }; + BAF2985AB306D24B14B17E3F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F4901FBEE4C8B0FA7B998652 /* [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; + }; +/* 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 = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + 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 = 8.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; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.fluffy.fluffychat; + 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; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + 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 = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + 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 = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + 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; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.fluffy.fluffychat; + 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; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.fluffy.fluffychat; + 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 */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@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) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "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" : "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" : "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" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fe1f854744c3a8520324f8f185de069eb1db72 GIT binary patch literal 146486 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�iAA)e`9_D^RgAEr(AvpK$q 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

j;DIK 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

mjTp(6c$YLRGrnNCE z5&_K@N+sB`?P25>ra;rB z#~bCxaJ@-0CBTy0By8TA4;hWpN4wA9Kl|(K?i<-=oQ;rKejNVqyH295RmX$Eb1yFC$pKSI=|ebr=rTr3 z_C9s)m}_$hkiE2QT_$#uAFQU_&?-^1A5wAL5NBk?AT47wRf>oVKtgip7@!0e%N-aC z3uhCyJdY#=V-wk-%YaOsl=@t}p|h*Ibp9qzR5l`iX$ty!4XF6%IorKM`z~Q|P9o-{ zhU3CnB~G8bZUg$$&MG`#whUe}0snfh7N)Um$*QXBI?N^~{cvKi>wrhTY=_=pA3fLr zzPY0k|M>GM3{qq?Jh&1f*dlx(P(*wLO zT46W6KaqatO%NZoL70Z8~n`GpVV5VN3!v50AjC)k8vC z!FV$GqPbzHrj3%07J)liy(#s-f0i#6kgZ26CZ}1G0GY2c_uPg^3&7edHqB3@h4JI} zpSPe%>pokIBJ=r0&g?1M34A*H4Y2eM@?Dg(A$RxRBwsJrewYcy4xLPD5~lF`M>7wZ#R-MisdB>qR>T~{iU?AcL|V|kf$r-6YArIrx(ZK_3GAd1;-Rcw&pDF zbEawi(PBNXQw`Y4Z2QcN{7TmV2FHT`yhwi@6|8!8Ni38-L+B*iF3yaY790l@Ddf9q zVKvGgepbk&$cqo+p@})z%4^*?)Tlu$Ib8;H@M{gV?L~5koC7b4379sR4X|FTyp$E1 zkm5>Xmh~2AMDXlGCfwQJ6efr8!>YCE;rwuiguhjN^47Z>wiijbEq=3HHEeh3n!5dz zu($fNGf!qeTD~l9-Yb&3ut9QFgC=A5x_7p(=ZmCd*Y@AN^!=YIOBOs z%VK@UwaT)6?`&&Px8LG`2ICOQKK#oEZ|wiD;zv2FH$Gdi_E!Nu{z-Qes;ggDcjD^# l<45aj_aFG`WR3OS{{TlO>iL|z2#Npz002ovPDHLkV1i0?(X{{o literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8f59c6310689168d486fa16ae2c04a2d31b14bbc GIT binary patch literal 2928 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 m_TJ5`^1}SemU@e>)qenK5~WbzJ52)s00003zY zBb_vjPLej03674|YBUt1!idpm6f__xvWT$kF3V$)Wm$G_zjI($7IwpuEZYCfoqNx@ z=id7}=X~e;zHiTmRYZ@+m zy8BSY0acI2XuU63FV^O*$a=AO^N!Tm#7C(pnJJ)&q7V7gDJ(C2VJ003mc@RNA~C`r>mG{7`^TH^0^hdTAZylBY01k{`ueXgTt(8gdHF~h7Ia13aq zo-;l5vurHNPT<$=Z9Ulahe|Zjw7k0a61J{M<8VwZDm`A?S8scMc*H_&>TKoHjcWMO z6n=WXotGbbJRKWX9;#8>CqFhsV!u@S^F>ygy zwla+a8ci1L90xR&*oax-1i=F`bgz!(@|cRlmzn&NM=!t5NHr2#_NnP(D^W3gb^5kqnXTOYW>@hk!wTUbHZP9^Gxk ziy_!ib{OYsZ$K*b_|AY#zy0OE`MF?uDz^Tn5L%6%muLA-TCa`)BZ8Pa(cxN?n)mYT z=^MPB_1>L2eykB2$QBzft9Uskz}q#z*<)%`H=SwTN{mq2BH3RtLD@XZtVz3;70~2yG#d0K(Z@W(Jqocid zM&Ov3$ym*1ew4q%Hck_SALb{ayy7A(;>^H}mmkI99C9^|

mjTp(6c$YLRGrnNCE z5&_K@N+sB`?P25>ra;rB z#~bCxaJ@-0CBTy0By8TA4;hWpN4wA9Kl|(K?i<-=oQ;rKejNVqyH295RmX$Eb1yFC$pKSI=|ebr=rTr3 z_C9s)m}_$hkiE2QT_$#uAFQU_&?-^1A5wAL5NBk?AT47wRf>oVKtgip7@!0e%N-aC z3uhCyJdY#=V-wk-%YaOsl=@t}p|h*Ibp9qzR5l`iX$ty!4XF6%IorKM`z~Q|P9o-{ zhU3CnB~G8bZUg$$&MG`#whUe}0snfh7N)Um$*QXBI?N^~{cvKi>wrhTY=_=pA3fLr zzPY0k|M>GM3{qq?Jh&1f*dlx(P(*wLO zT46W6KaqatO%NZoL70Z8~n`GpVV5VN3!v50AjC)k8vC z!FV$GqPbzHrj3%07J)liy(#s-f0i#6kgZ26CZ}1G0GY2c_uPg^3&7edHqB3@h4JI} zpSPe%>pokIBJ=r0&g?1M34A*H4Y2eM@?Dg(A$RxRBwsJrewYcy4xLPD5~lF`M>7wZ#R-MisdB>qR>T~{iU?AcL|V|kf$r-6YArIrx(ZK_3GAd1;-Rcw&pDF zbEawi(PBNXQw`Y4Z2QcN{7TmV2FHT`yhwi@6|8!8Ni38-L+B*iF3yaY790l@Ddf9q zVKvGgepbk&$cqo+p@})z%4^*?)Tlu$Ib8;H@M{gV?L~5koC7b4379sR4X|FTyp$E1 zkm5>Xmh~2AMDXlGCfwQJ6efr8!>YCE;rwuiguhjN^47Z>wiijbEq=3HHEeh3n!5dz zu($fNGf!qeTD~l9-Yb&3ut9QFgC=A5x_7p(=ZmCd*Y@AN^!=YIOBOs z%VK@UwaT)6?`&&Px8LG`2ICOQKK#oEZ|wiD;zv2FH$Gdi_E!Nu{z-Qes;ggDcjD^# l<45aj_aFG`WR3OS{{TlO>iL|z2#Npz002ovPDHLkV1i0?(X{{o literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6005862d354b627c1eedafbab65fff35cc0b56 GIT binary patch literal 4046 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 AFaQ7m literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c51f406159054ca841e132a31bf63d808276dad GIT binary patch literal 6037 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 P00000NkvXXu0mjfCpOXg literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..0287cf612ced70cd91566a927b4cf71b6399428c GIT binary patch literal 2439 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4466711a682a3ed83c56f91261d6e7bef729115a GIT binary patch literal 2842 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa1102d1b91ef9663f9da6d03c8e117809c273d GIT binary patch literal 5659 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 B*#ZCn literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c51f406159054ca841e132a31bf63d808276dad GIT binary patch literal 6037 zcmV;G7i#E2klyQN`@T6711b0J-rajcHetV?&;2CX?A|+je|Kii%$##Z3Ieix z>U_z<=jTR#pF$S;**5u}4ol&%u#&$>;B zt`On^Qgc7JWctg_AQs21n7JTUt=IG+MU5bW29uwTMAUn4)Z=#$v7X0D19*oTZj~Nn znr`Ja!co&Rz5mi1YNK44VfvOSqDwp#gKkw`RHxN=(I0k)N4anZ5M z@mMl_{$i&|(QDb>%qsBmsk5bn`VC%Wr;{%veX3iV6x9lEL}FM)YV^3ojI-~Kdh4a* zE&tCb@Zwo>9T!cXzn}a%q|Hlcg)d@q#0?1_xVQF?)F+)LM(uC<&sG92o-x-UNbFSyR&&^LGzk1*I;#m;_@v!LFHS+jWxx@IV z&+vt20xz2}Z=FtW6}O|K*XuvoyK2+zCzj6Mc~{`N_|yqHz5XxlSuiVtAs!kN`#$;E zAn-qCywZip{zE$#%8G!Hu~eTW&&?g)An;@Vct#Dy?(JPDE5fpL)+;lqz^Z`aQP!Ep zPKaJViV94`eW<<5@}Q$sYvE3*92BaCxqUAeJMeS2=X=^NQuS{aJXHWbe9m(AdI=m! zDS(1C5Y7v|xH9kDZ4F-mJ!O-5mU@McDSAY%x-Xna-k6$T- z#EfF7s8yMKj!pZn!`kNu&*<4rEr?ViZu9GXcPINkU>_%wKg&ztoRV5TAEzjYaq-cP zG>8gzhw%e~AgY@O?{l`ghDr+uFXzLtv_fLY)X~?R?W7Px9;(R$yHXoLNbmtVM6S2% zTn?00D+M`cZdp4BTu@%m=i_(58PZVy4w?DY;O1xx z1A2ObhjVKq?)S4f@cWtD&0ecfXlQqVpZ(XIhe0H2e!Y5P%^plHpskEXtAjydJ}|mp zAc%|6vTzxojw`6z0Ki3L3Mfpw((YQ&GoH;A&ze8^en< zD`K%2N{Xt1t1*{BZszhWm*CY2y{Qq_lC#%J;0t28w*;H}W5k%j+V|#@educkFBd?q zLSyiHC$1EcRwIPA0@#Xt$#8C@j0|PI-G2=}`|Dt6Y44!5yFD?R+ZQy0ntJX6tJG@H zlKU;y@T|eux3MvJSPz);5Tf1JAmkzL(k8>zX5z&`cYQ@8GpO>ro* z^~6m$l3Hl=8V-&&(Es6Ji0T^%JwkoJ$IlrY9Be>E?oCEo0et$wL8xM>{f6!}f-MiN zwN-Kuk^3s49-1P40;{#m!z276i`{W9zM zadro5MXf>&FO29#Un{9rz>R_$gXO}O;%J)j8{U-oq+EJ%;WQcUGz$Fv;Vjyh8)MAG zNSOb|;~-)f>e$#yVZh*SF!zne;DhA}jGtF)4L5(P+IrBJ)`CQY_gr+>%axbF8kUQO zMff!nmkIo$b6$<3V(<9*A{^eI(clKoz=7m^9I(T*xDd!L;%~Y01s^!MQUgC6xdEq) zh&ya}C`_K#4|)>Yprs+#lEHC3z}4Lzsw!I7Vl6{u!dk0QlI9p|Eon&_#BB~Qf!WII z7r<@S1;21`cTaeI@hBKIE&|?L{0G!C^y@lO+p%`xH0OmIrF@Dk2sQN@SpCao$THB9 z*xAeA-BlAHx_=Po^WyZbKe=~I0=IlP(9l#?)PRU|84_AunZ@8Gu$V<*cTdyZrXynl zp2#oxD?wLX4-%!;Xsf_W zV78ecXJ^yrnJX*gaOT7fgYU5vak)^CR|OkCKMpHDnrzbNT-}&gkg&_s>2;tisRD^y zLz-g|dlT9OUIN>(%pn_ls+icZ^&)MGI}<6FazR1*Mr^LRB4(LywjtuGa?3$NhCZg; zUtR(`+A)9J41LKEs*+DpEE26o2Wm1BFil|QR?&gnR0)ohOuV_g1a`7#{R zxmHW3rbYq9MK#1Gv4vY%rPT8EAVyR`5PKw09n18ub9)Hv>|naUI0RU?YCj|=HOw%% zxjWD=d^I(nPf;uq{H}9n{y@jDO{Zyb==AoAv5d8w?cO=twu8VPEbceOMb(V2A4<3i zU;pb^vt|gbXFNJ98U|;Gl#98rV$n|c$LfjT=FxmeS;n#i>&DVr8iSX>o(xNKND;#r z5u4zRpPyjuV;(dzGm7E;rSb6b*HfFlUR1zbIow%VOJne?!8X*WYq?5PTu=o{BBZVD zz0?2utCJu%amlN*b3MHfvaS_F&#(rcM_h`&!c3Y(AIjw3L#2*C=qpt~AE?cstsFlTAAajKp+zZzV9Y>(^u$J|_I` zz}?PP22~*ZLU>1~ag20pmgo664>F0*3~=(iyEfhRKaX3F&tQe)_roaP(jXRFrjI zi`i7>yfTa~N+3t}WiYY`U7y4kcOVP`5lJ~|9Sd;8Hz^r)C1 zIDYs#-%EB1a6b8o$qjBr2jZ_1n}zwl_>+-}t<-$?Ufu#D-N_TiBrwicz4O{{FnU}B z^a}Tdv=n~+!JP?QtY7;2Z{X?eMEYL#CDN{L{31XE5x8f73&2HY@ib~J>>)K7@UYU1 zj4Q_7ih6kPOGze(z!+3!rETcx!7sv45P^MMN&ni-9a6Ie$)9QEPyC&2Aed(esUQL) z(}s43wA&S&eV?ruXKEim-sccZ;GX_2^uSOMEBrz0IW~xY*C&|3NL+-kRbYV_)Wy7b z;Fbs~@Z(Ybu;a{avtnSa+ymzpM)njY%2H5)Wn@79_A}AcXP8Uel9krr%+-RyUBSgx z7-<9*80qHY1WyeLrXd|xOy`kcH|Xmx-0la03yh4234r3Ndf0a{pZXzL;Rd?pJQcw! zA5JUUL|_}zRR3joFB-Ib>1J75T%uE=Q0rKuMa)HTfeR|+kaDYn{=AxFo%k>XHO}4d z%cRqjgS)!Y=9({p3Y?f;1fT6@4xYBcjaro!E*I9&qlk<~o{r?#WD6!RrY*p5N-M&# z<7zRf&Grz(!{`!B;PrblXaW+Uz{~)%W)Fe^gSycG>DxC;VcX^;IAe{mD%M;Wau{}U%^=bbT3nRxx&`bu6^p5hU$M`3sVZ-Og;bvxuAlECZ;a6z{ z5m+lwR3I*Xule+8)&O#J;ERk7fcHM049gepqHd=56ZFDZ{LgXFCnk{fJrSgQpKO>8 zA1vPkiO2bOS++8M$=U=F7_-y3ILe^9j^FInh%w=uvI96d+rhH66XE$O|E3XqT=2!k zkT4$_5N2m5gNkxFl$X^(YH}`PL_HIu#zz5H4Y`7bm?43u&Kdv{ zpNTPe4yjZ^YxWz9N5T2i*)(9A2}jc3`uK7$AKDTjy}TjWNXjQRyc}e(YhFcKw zzwb9B!h%J^IpxT>ayidvCO;;Q-l_mU((-tj8BN%dHWBy=x%nUee#PX^9oTafru}a$ zwQ>!ChS92b<3VX8RRpF?JbUUU416TS=(YE<1b#K;V8T_JxGg-=xUUpjAek}F-l?Jo zt_eSEX)ZgMPjU0nESi^@EeoC@sw?Z^t-0Ia&84HMfx-kPHNo^mxf~ZVK3uUE-dHjU zhCbel@&8p7a@hRsY1(>l;hRs7(!_0;z>Nv4wZHs$-eA5jE^JE50~cEfgnRSLWi6<{ zXERIS&}DY3mJ2!A<*?*$zrjnd4THxHORo-tiBp&zoR+^Vf3zL%`xCUoV-lWM;@q8skHLTI} zT-f-5*>{!>*SZnFAXURNy>;BL{`f-+@D*^i+N= zOj9r|1()y>K2-Bec_FC4=Ijb$#V{V0G|}PfW-s_&1rIVlPBzeuC3huP1QqzJ!g%BmNLd7Ig^?j>g51FO`Hk%AoxrcHYpgwf(LRvzZ#Zrxo8#H2-Bl|iLksI)pd|NQr%!GfN*%>>r!bda2BwWduWxuAv$Z6n~WsDcZOyMm~ziRE0a z0HrmA)Fjw9$1xv41y(DSpf0Easa`~bsJtA6G4&r5diywnOyE6@1rb=IQiF!nTBuWj z48(UI!$?x#gzMIsEiPa-yJ=DUldiOcm%x~d$?dMF7ltROsNLc|G z)6)||c;>`n!YqLs_RLc??3pLmfRtsz6kmSxk*@GlN+BG+QBK1nA9V0ex!E^V2fQ0W zu67U?>_)vQ+X9mXMsXDtwIHriaN2zfmk?+5^@pi_d|_W^8I%&k%bk3|l!98wDu3`Y z&ra&?4O9BG-V?d4;4Cl-tF9%@F|m#%D&u?RwFLVZ{Bn&<2=j(F_gsTYGxk{O$nf#b zFb7ToYc*O>lvabZp8KA8MlVciwy`~NJ0s|V!zUcnR16BN(`sq0)syB}rZsKPJY$@` zQweoy!@F8{M)Imn_m$=Yqrh5?h75a%u(e8%G{%w%oE)V50i6Wl;~{C*^_u=chdoLq z8TQnI)chbpPGBymt*Q4nzSj~6Yl9UdLr{THSgo4W+DbC)sZ+5IdxQjs2k6wDQS#vU zaN+kIAV9Q&DNuoxI15!)M}{;ZePmy((+rzRJDpS6Aq9@~b)tgeF+PlY zY;s%D<}N$tkW$$3#6>J|TyJp#qnl4M!|tUWf!;hL0owwL6L^1S8BOPBY2fhH&{|1X zGAbA-P?mNfu_%F+8XXxMw{0+&si0N-4zYf1$K5Pyx`r3jncK_+DVu|zCJ;N90sj2c(C)y$mOK++#FPs(8Wp})ok!G?3W zj47({!D#9hGdn&% z(-`4-uz&67Nb^+HJHza}^q^}$jq%1Rwau5W&>)=|<4^lcQ$aDgCKJOZKCYWPJvt-O zA#XlgU;bm_HGM^WxR49_rqG4d%*R7KsP`q-SZs>%5F(Y|gAVP3WiAe<6qWMu_G+ln z+55$Z0@~%;ogFIhnxDSey>QBlvvs5fi7jtB)ry&Db=s1K8muYZX=7`9Md_rB1fD76 ztym6M3-Z@efmi%h4qm+36K z&HcF6+wl`!QJvsBa9O#3;2s(u?)&lY7qZjk%_cfVESmk*o;91iHJKFqi?N? z-@LQ&HO8sRQA=L@;PA>13+3Lh7%9rhb(0!)Je7O8lYH^7izX52^DigQXVej$#Gq_PuIb(WzzIza06^zMZYMcrm!xuzJh- z8!{(dNPoZR7aj?SSSD8MyIPGe%Yf8cy;`hK`u_O#l?%6h9nbbYqpL|PH*CO3;!Swm z{^r2jPHNE_30R=(!UKesh+9}wK09*B)c-g3UXzv!gI^x?!Ght_z8@CecmDA30WXS0 z;y`QP-1cA}OPb=sdX3`Pfwc3NF6Crw|LovaPJ0HJydM1d;jM+_SVn$bzH#Qli4z_g z@rtcXI-H1YF>A{m85ENo3YAuUrlP(kY2)#o=M@^|v9AvPiaDuFHiZ5QKH3QndZ6i_ P00000NkvXXu0mjfCpOXg literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec7d374b2ed4905ab1054e013a8db9fd77c59fd GIT binary patch literal 9193 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..635d0f0d36488eb7628806c9ec6379b7a1d8b63d GIT binary patch literal 3619 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad0e712a6a8826119c28d8daf74593023b6fc30 GIT binary patch literal 3805 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 TYl{#h00000NkvXXu0mjf7IIIY literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db98a7b9864addb7628ef536c931ff48812ffdcc GIT binary patch literal 7792 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..6c475ed --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + fluffychat + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + NSPhotoLibraryUsageDescription + Share photos with your contacts + NSCameraUsageDescription + Share photos with your contacts + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..7335fdf --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/lib/components/adaptive_page_layout.dart b/lib/components/adaptive_page_layout.dart new file mode 100644 index 0000000..70c4064 --- /dev/null +++ b/lib/components/adaptive_page_layout.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; + +enum FocusPage { FIRST, SECOND } + +class AdaptivePageLayout extends StatelessWidget { + final Widget firstScaffold; + final Widget secondScaffold; + final FocusPage primaryPage; + final double minWidth; + + static const double defaultMinWidth = 400; + static bool columnMode(BuildContext context) => + MediaQuery.of(context).size.width > 2 * defaultMinWidth; + + AdaptivePageLayout( + {this.firstScaffold, + this.secondScaffold, + this.primaryPage = FocusPage.FIRST, + this.minWidth = defaultMinWidth, + Key key}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return OrientationBuilder(builder: (context, orientation) { + if (orientation == Orientation.portrait || + columnMode(context)) if (primaryPage == FocusPage.FIRST) + return firstScaffold; + else + return secondScaffold; + return Row( + children: [ + Container( + width: minWidth, + child: firstScaffold, + ), + Container( + width: 1, + color: Color(0xFFE8E8E8), + ), + Expanded( + child: Container( + child: secondScaffold, + ), + ) + ], + ); + }); + } +} diff --git a/lib/components/avatar.dart b/lib/components/avatar.dart new file mode 100644 index 0000000..1ca495b --- /dev/null +++ b/lib/components/avatar.dart @@ -0,0 +1,39 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import 'matrix.dart'; + +class Avatar extends StatelessWidget { + final MxContent mxContent; + final double size; + + const Avatar(this.mxContent, {this.size = 40, Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final String src = mxContent.getThumbnail( + Matrix.of(context).client, + width: size * MediaQuery.of(context).devicePixelRatio, + height: size * MediaQuery.of(context).devicePixelRatio, + method: ThumbnailMethod.scale, + ); + return CircleAvatar( + radius: size / 2, + backgroundImage: mxContent.mxc?.isNotEmpty ?? false + ? kIsWeb + ? NetworkImage( + src, + ) + : CachedNetworkImageProvider( + src, + ) + : null, + backgroundColor: Color(0xFFF8F8F8), + child: mxContent.mxc.isEmpty + ? Text("@", style: TextStyle(color: Colors.blueGrey)) + : null, + ); + } +} diff --git a/lib/components/chat_settings_popup_menu.dart b/lib/components/chat_settings_popup_menu.dart new file mode 100644 index 0000000..6b6cd4d --- /dev/null +++ b/lib/components/chat_settings_popup_menu.dart @@ -0,0 +1,70 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/chat_details.dart'; +import 'package:fluffychat/views/chat_list.dart'; +import 'package:flutter/material.dart'; + +import 'matrix.dart'; + +class ChatSettingsPopupMenu extends StatelessWidget { + final Room room; + final bool displayChatDetails; + const ChatSettingsPopupMenu(this.room, this.displayChatDetails, {Key key}) + : super(key: key); + + @override + Widget build(BuildContext context) { + List> items = >[ + room.pushRuleState == PushRuleState.notify + ? const PopupMenuItem( + value: "mute", + child: Text('Mute chat'), + ) + : const PopupMenuItem( + value: "unmute", + child: Text('Unmute chat'), + ), + const PopupMenuItem( + value: "leave", + child: Text('Leave'), + ), + ]; + if (displayChatDetails) + items.insert( + 0, + const PopupMenuItem( + value: "details", + child: Text('Chat details'), + ), + ); + return PopupMenuButton( + onSelected: (String choice) async { + switch (choice) { + case "leave": + await Matrix.of(context).tryRequestWithLoadingDialog(room.leave()); + Navigator.of(context).pushAndRemoveUntil( + AppRoute.defaultRoute(context, ChatListView()), + (Route r) => false); + break; + case "mute": + await Matrix.of(context).tryRequestWithLoadingDialog( + room.setPushRuleState(PushRuleState.mentions_only)); + break; + case "unmute": + await Matrix.of(context).tryRequestWithLoadingDialog( + room.setPushRuleState(PushRuleState.notify)); + break; + case "details": + Navigator.of(context).push( + AppRoute.defaultRoute( + context, + ChatDetails(room), + ), + ); + break; + } + }, + itemBuilder: (BuildContext context) => items, + ); + } +} diff --git a/lib/components/content_banner.dart b/lib/components/content_banner.dart new file mode 100644 index 0000000..4480489 --- /dev/null +++ b/lib/components/content_banner.dart @@ -0,0 +1,55 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import 'matrix.dart'; + +class ContentBanner extends StatelessWidget { + final MxContent mxContent; + final double height; + final IconData defaultIcon; + final bool loading; + + const ContentBanner(this.mxContent, + {this.height = 400, + this.defaultIcon = Icons.people_outline, + this.loading = false, + Key key}) + : super(key: key); + + @override + Widget build(BuildContext context) { + final mediaQuery = MediaQuery.of(context); + final int bannerSize = + (mediaQuery.size.width * mediaQuery.devicePixelRatio).toInt(); + final String src = mxContent.getThumbnail( + Matrix.of(context).client, + width: bannerSize, + height: bannerSize, + method: ThumbnailMethod.scale, + ); + return Container( + height: 200, + color: Color(0xFFF8F8F8), + child: !loading + ? mxContent.mxc?.isNotEmpty ?? false + ? kIsWeb + ? Image.network( + src, + height: 200, + fit: BoxFit.cover, + ) + : CachedNetworkImage( + imageUrl: src, + height: 200, + fit: BoxFit.cover, + placeholder: (c, s) => + Center(child: CircularProgressIndicator()), + errorWidget: (c, s, o) => Icon(Icons.error, size: 200), + ) + : Icon(defaultIcon, size: 200) + : Icon(defaultIcon, size: 200), + ); + } +} diff --git a/lib/components/dialogs/new_group_dialog.dart b/lib/components/dialogs/new_group_dialog.dart new file mode 100644 index 0000000..87059de --- /dev/null +++ b/lib/components/dialogs/new_group_dialog.dart @@ -0,0 +1,59 @@ +import 'package:fluffychat/views/chat.dart'; +import 'package:flutter/material.dart'; + +import '../matrix.dart'; + +class NewGroupDialog extends StatelessWidget { + final TextEditingController controller = TextEditingController(); + + void submitAction(BuildContext context) async { + final MatrixState matrix = Matrix.of(context); + Map params = {}; + if (controller.text.isNotEmpty) params["name"] = controller.text; + final String roomID = await matrix.tryRequestWithLoadingDialog( + matrix.client.createRoom(params: params), + ); + Navigator.of(context).pop(); + if (roomID != null) + Navigator.push( + context, + MaterialPageRoute(builder: (context) => Chat(roomID)), + ); + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text("Create new group"), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + controller: controller, + autofocus: true, + autocorrect: false, + textInputAction: TextInputAction.go, + onSubmitted: (s) => submitAction(context), + decoration: InputDecoration( + labelText: "Group name", + icon: Icon(Icons.people), + hintText: "Enter a group name"), + ), + ], + ), + actions: [ + FlatButton( + child: Text("Close".toUpperCase(), + style: TextStyle(color: Colors.blueGrey)), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + FlatButton( + child: Text("Create".toUpperCase()), + onPressed: () => submitAction(context), + ), + ], + ); + } +} diff --git a/lib/components/dialogs/new_private_chat_dialog.dart b/lib/components/dialogs/new_private_chat_dialog.dart new file mode 100644 index 0000000..977ffda --- /dev/null +++ b/lib/components/dialogs/new_private_chat_dialog.dart @@ -0,0 +1,72 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/views/chat.dart'; +import 'package:flutter/material.dart'; + +import '../matrix.dart'; + +class NewPrivateChatDialog extends StatelessWidget { + final TextEditingController controller = TextEditingController(); + + void submitAction(BuildContext context) async { + if (controller.text.isEmpty) return; + final MatrixState matrix = Matrix.of(context); + final User user = User( + "@" + controller.text, + room: Room(id: "", client: matrix.client), + ); + final String roomID = + await matrix.tryRequestWithLoadingDialog(user.startDirectChat()); + Navigator.of(context).pop(); + + if (roomID != null) + Navigator.push( + context, + MaterialPageRoute(builder: (context) => Chat(roomID)), + ); + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text("New private chat"), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + controller: controller, + autofocus: true, + autocorrect: false, + textInputAction: TextInputAction.go, + onSubmitted: (s) => submitAction(context), + decoration: InputDecoration( + labelText: "Enter a username", + icon: Icon(Icons.account_circle), + prefixText: "@", + hintText: "username:homeserver"), + ), + SizedBox(height: 16), + Text( + "Your username is ${Matrix.of(context).client.userID}", + style: TextStyle( + color: Colors.blueGrey, + fontSize: 12, + ), + ), + ], + ), + actions: [ + FlatButton( + child: Text("Close".toUpperCase(), + style: TextStyle(color: Colors.blueGrey)), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + FlatButton( + child: Text("Continue".toUpperCase()), + onPressed: () => submitAction(context), + ), + ], + ); + } +} diff --git a/lib/components/dialogs/redact_message_dialog.dart b/lib/components/dialogs/redact_message_dialog.dart new file mode 100644 index 0000000..c1c5ee0 --- /dev/null +++ b/lib/components/dialogs/redact_message_dialog.dart @@ -0,0 +1,32 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:flutter/material.dart'; + +import '../matrix.dart'; + +class RedactMessageDialog extends StatelessWidget { + final Event event; + const RedactMessageDialog(this.event); + + void removeAction(BuildContext context) { + Matrix.of(context).tryRequestWithLoadingDialog(event.redact()); + Navigator.of(context).pop(); + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text("Message will be removed for all participants"), + actions: [ + FlatButton( + child: Text("Close".toUpperCase(), + style: TextStyle(color: Colors.blueGrey)), + onPressed: () => Navigator.of(context).pop(), + ), + FlatButton( + child: Text("Remove".toUpperCase()), + onPressed: () => removeAction(context), + ), + ], + ); + } +} diff --git a/lib/components/list_items/chat_list_item.dart b/lib/components/list_items/chat_list_item.dart new file mode 100644 index 0000000..b1c3fb9 --- /dev/null +++ b/lib/components/list_items/chat_list_item.dart @@ -0,0 +1,67 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/message_content.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/chat.dart'; +import 'package:flutter/material.dart'; + +import '../avatar.dart'; + +class ChatListItem extends StatelessWidget { + final Room room; + final bool activeChat; + + const ChatListItem(this.room, {this.activeChat = false}); + + @override + Widget build(BuildContext context) { + return Material( + color: activeChat ? Color(0xFFE8E8E8) : Colors.white, + child: ListTile( + leading: Avatar(room.avatar), + title: Text(room.displayname), + subtitle: MessageContent(room.lastEvent, textOnly: true), + onTap: () { + if (activeChat) + Navigator.pushReplacement( + context, + AppRoute.defaultRoute(context, Chat(room.id)), + ); + else + Navigator.push( + context, + AppRoute.defaultRoute(context, Chat(room.id)), + ); + }, + onLongPress: () {}, + trailing: Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text(room.timeCreated.toEventTimeString()), + room.notificationCount > 0 + ? Container( + width: 20, + height: 20, + margin: EdgeInsets.only(top: 3), + decoration: BoxDecoration( + color: room.highlightCount > 0 + ? Colors.red + : Color(0xFF5625BA), + borderRadius: BorderRadius.circular(20), + ), + child: Center( + child: Text( + room.notificationCount.toString(), + style: TextStyle(color: Colors.white), + ), + ), + ) + : Text(" "), + ], + ), + ), + ), + ); + } +} diff --git a/lib/components/list_items/message.dart b/lib/components/list_items/message.dart new file mode 100644 index 0000000..f060b07 --- /dev/null +++ b/lib/components/list_items/message.dart @@ -0,0 +1,128 @@ +import 'package:bubble/bubble.dart'; +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/dialogs/redact_message_dialog.dart'; +import 'package:fluffychat/components/message_content.dart'; +import 'package:flutter/material.dart'; + +import '../avatar.dart'; +import '../matrix.dart'; +import 'state_message.dart'; + +class Message extends StatelessWidget { + final Event event; + + const Message(this.event); + + @override + Widget build(BuildContext context) { + if (event.typeKey != "m.room.message") return StateMessage(event); + + Client client = Matrix.of(context).client; + final bool ownMessage = event.senderId == client.userID; + Alignment alignment = ownMessage ? Alignment.topRight : Alignment.topLeft; + Color color = Color(0xFFF8F8F8); + BubbleNip nip = ownMessage ? BubbleNip.rightBottom : BubbleNip.leftBottom; + final Color textColor = ownMessage ? Colors.white : Colors.black; + MainAxisAlignment rowMainAxisAlignment = + ownMessage ? MainAxisAlignment.end : MainAxisAlignment.start; + + if (ownMessage) { + color = event.status == -1 ? Colors.redAccent : Color(0xFF5625BA); + } + List> popupMenuList = []; + if (event.canRedact && !event.redacted && event.status > 1) + popupMenuList.add( + const PopupMenuItem( + value: "remove", + child: Text('Remove message'), + ), + ); + if (ownMessage && event.status == -1) { + popupMenuList.add( + const PopupMenuItem( + value: "resend", + child: Text('Send again'), + ), + ); + popupMenuList.add( + const PopupMenuItem( + value: "delete", + child: Text('Delete message'), + ), + ); + } + + List rowChildren = [ + Expanded( + child: PopupMenuButton( + onSelected: (String choice) async { + switch (choice) { + case "remove": + showDialog( + context: context, + builder: (BuildContext context) => RedactMessageDialog(event), + ); + break; + case "resend": + event.sendAgain(); + break; + case "delete": + event.remove(); + break; + } + }, + itemBuilder: (BuildContext context) => popupMenuList, + child: Opacity( + opacity: event.status == 0 ? 0.5 : 1, + child: Bubble( + elevation: 0, + alignment: alignment, + margin: BubbleEdges.symmetric(horizontal: 4), + color: color, + nip: nip, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + ownMessage ? "You" : event.sender.calcDisplayname(), + style: TextStyle( + color: textColor, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(width: 4), + Text( + event.time.toEventTimeString(), + style: TextStyle(color: textColor, fontSize: 12), + ), + ], + ), + MessageContent( + event, + textColor: textColor, + ), + ], + ), + ), + ), + ), + ), + ]; + if (ownMessage) + rowChildren.add(Avatar(event.sender.avatarUrl)); + else + rowChildren.insert(0, Avatar(event.sender.avatarUrl)); + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: rowMainAxisAlignment, + children: rowChildren, + ), + ); + } +} diff --git a/lib/components/list_items/participant_list_item.dart b/lib/components/list_items/participant_list_item.dart new file mode 100644 index 0000000..692e34d --- /dev/null +++ b/lib/components/list_items/participant_list_item.dart @@ -0,0 +1,119 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/chat.dart'; +import 'package:flutter/material.dart'; + +import '../avatar.dart'; +import '../matrix.dart'; + +class ParticipantListItem extends StatelessWidget { + final User user; + + const ParticipantListItem(this.user); + + participantAction(BuildContext context, String action) async { + final MatrixState matrix = Matrix.of(context); + switch (action) { + case "ban": + matrix.tryRequestWithLoadingDialog(user.ban()); + break; + case "unban": + matrix.tryRequestWithLoadingDialog(user.unban()); + break; + case "kick": + matrix.tryRequestWithLoadingDialog(user.kick()); + break; + case "admin": + matrix.tryRequestWithLoadingDialog(user.setPower(100)); + break; + case "user": + matrix.tryRequestWithLoadingDialog(user.setPower(100)); + break; + case "message": + final String roomId = await user.startDirectChat(); + Navigator.of(context).pushAndRemoveUntil( + AppRoute.defaultRoute( + context, + Chat(roomId), + ), + (Route r) => r.isFirst); + break; + } + } + + @override + Widget build(BuildContext context) { + const Map membershipBatch = { + Membership.join: "", + Membership.ban: "Banned", + Membership.invite: "Invited", + Membership.leave: "Left", + }; + final String permissionBatch = user.powerLevel == 100 + ? "Admin" + : user.powerLevel >= 50 ? "Moderator" : ""; + List> items = >[]; + if (user.canChangePowerLevel && + user.room.ownPowerLevel == 100 && + user.powerLevel != 100) + items.add( + PopupMenuItem(child: Text("Make an admin"), value: "admin"), + ); + if (user.canChangePowerLevel && user.powerLevel != 0) + items.add( + PopupMenuItem(child: Text("Revoke all permissions"), value: "user"), + ); + if (user.canKick) + items.add( + PopupMenuItem(child: Text("Kick from group"), value: "kick"), + ); + if (user.canBan && user.membership != Membership.ban) + items.add( + PopupMenuItem(child: Text("Ban from group"), value: "ban"), + ); + else if (user.canBan && user.membership == Membership.ban) + items.add( + PopupMenuItem(child: Text("Remove exile"), value: "unban"), + ); + if (user.id != Matrix.of(context).client.userID) + items.add( + PopupMenuItem(child: Text("Send a message"), value: "message"), + ); + return PopupMenuButton( + onSelected: (action) => participantAction(context, action), + itemBuilder: (c) => items, + child: ListTile( + title: Row( + children: [ + Text(user.calcDisplayname()), + permissionBatch.isEmpty + ? Container() + : Container( + padding: EdgeInsets.all(4), + margin: EdgeInsets.symmetric(horizontal: 8), + decoration: BoxDecoration( + color: Color(0xFFF8F8F8), + borderRadius: BorderRadius.circular(8), + ), + child: Center(child: Text(permissionBatch)), + ), + membershipBatch[user.membership].isEmpty + ? Container() + : Container( + padding: EdgeInsets.all(4), + margin: EdgeInsets.symmetric(horizontal: 8), + decoration: BoxDecoration( + color: Color(0xFFF8F8F8), + borderRadius: BorderRadius.circular(8), + ), + child: + Center(child: Text(membershipBatch[user.membership])), + ), + ], + ), + subtitle: Text(user.id), + leading: Avatar(user.avatarUrl), + ), + ); + } +} diff --git a/lib/components/list_items/state_message.dart b/lib/components/list_items/state_message.dart new file mode 100644 index 0000000..15c9341 --- /dev/null +++ b/lib/components/list_items/state_message.dart @@ -0,0 +1,23 @@ +import 'package:bubble/bubble.dart'; +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:flutter/material.dart'; + +import '../message_content.dart'; + +class StateMessage extends StatelessWidget { + final Event event; + const StateMessage(this.event); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Bubble( + color: Color(0xFFF8F8F8), + elevation: 0, + alignment: Alignment.center, + child: MessageContent(event), + ), + ); + } +} diff --git a/lib/components/matrix.dart b/lib/components/matrix.dart new file mode 100644 index 0000000..f81c29b --- /dev/null +++ b/lib/components/matrix.dart @@ -0,0 +1,167 @@ +import 'dart:convert'; +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/utils/sqflite_store.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:localstorage/localstorage.dart'; +import 'package:toast/toast.dart'; + +class Matrix extends StatefulWidget { + final Widget child; + + final String clientName; + + final Client client; + + Matrix({this.child, this.clientName, this.client, Key key}) : super(key: key); + + @override + MatrixState createState() => MatrixState(); + + /// Returns the (nearest) Client instance of your application. + static MatrixState of(BuildContext context) { + MatrixState newState = + (context.dependOnInheritedWidgetOfExactType<_InheritedMatrix>()).data; + newState.context = context; + return newState; + } +} + +class MatrixState extends State { + Client client; + BuildContext context; + + /// Used to load the old account if there is no store available. + void loadAccount() async { + final LocalStorage storage = LocalStorage('LocalStorage'); + await storage.ready; + + final credentialsStr = storage.getItem(widget.clientName); + if (credentialsStr == null || credentialsStr.isEmpty) { + client.connection.onLoginStateChanged.add(LoginState.loggedOut); + return; + } + print("[Matrix] Restoring account credentials"); + final Map credentials = json.decode(credentialsStr); + client.connection.connect( + newDeviceID: credentials["deviceID"], + newDeviceName: credentials["deviceName"], + newHomeserver: credentials["homeserver"], + newLazyLoadMembers: credentials["lazyLoadMembers"], + //newMatrixVersions: credentials["matrixVersions"], // FIXME: wrong List type + newToken: credentials["token"], + newUserID: credentials["userID"], + ); + } + + /// Used to save the current account persistently if there is no store available. + Future saveAccount() async { + if (!kIsWeb) return; + print("[Matrix] Save account credentials in crypted preferences"); + final Map credentials = { + "deviceID": client.deviceID, + "deviceName": client.deviceName, + "homeserver": client.homeserver, + "lazyLoadMembers": client.lazyLoadMembers, + "matrixVersions": client.matrixVersions, + "token": client.accessToken, + "userID": client.userID, + }; + + final LocalStorage storage = LocalStorage('LocalStorage'); + await storage.ready; + await storage.setItem(widget.clientName, json.encode(credentials)); + return; + } + + void clean() async { + if (!kIsWeb) return; + print("Clear session..."); + + final LocalStorage storage = LocalStorage('LocalStorage'); + await storage.ready; + storage.deleteItem(widget.clientName); + } + + BuildContext _loadingDialogContext; + + Future tryRequestWithLoadingDialog(Future request) async { + showLoadingDialog(context); + final dynamic = await tryRequestWithErrorToast(request); + hideLoadingDialog(); + return dynamic; + } + + Future tryRequestWithErrorToast(Future request) async { + try { + return await request; + } catch (exception) { + Toast.show( + exception.toString(), + context, + duration: Toast.LENGTH_LONG, + ); + return false; + } + } + + showLoadingDialog(BuildContext context) { + _loadingDialogContext = context; + showDialog( + context: _loadingDialogContext, + barrierDismissible: false, + builder: (BuildContext context) => AlertDialog( + content: Row( + children: [ + CircularProgressIndicator(), + SizedBox(width: 16), + Text("Loading... Please wait"), + ], + ), + ), + ); + } + + hideLoadingDialog() => Navigator.of(_loadingDialogContext)?.pop(); + + @override + void initState() { + if (widget.client == null) { + client = Client(widget.clientName, debug: true); + if (!kIsWeb) + client.store = Store(client); + else + loadAccount(); + } else { + client = widget.client; + } + super.initState(); + } + + @override + Widget build(BuildContext context) { + return _InheritedMatrix( + data: this, + child: widget.child, + ); + } +} + +class _InheritedMatrix extends InheritedWidget { + final MatrixState data; + + _InheritedMatrix({Key key, this.data, Widget child}) + : super(key: key, child: child); + + @override + bool updateShouldNotify(_InheritedMatrix old) { + bool update = old.data.client.accessToken != this.data.client.accessToken || + old.data.client.userID != this.data.client.userID || + old.data.client.matrixVersions != this.data.client.matrixVersions || + old.data.client.lazyLoadMembers != this.data.client.lazyLoadMembers || + old.data.client.deviceID != this.data.client.deviceID || + old.data.client.deviceName != this.data.client.deviceName || + old.data.client.homeserver != this.data.client.homeserver; + return update; + } +} diff --git a/lib/components/message_content.dart b/lib/components/message_content.dart new file mode 100644 index 0000000..2769293 --- /dev/null +++ b/lib/components/message_content.dart @@ -0,0 +1,78 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import 'matrix.dart'; + +class MessageContent extends StatelessWidget { + final Event event; + final Color textColor; + final bool textOnly; + + const MessageContent(this.event, {this.textColor, this.textOnly = false}); + + @override + Widget build(BuildContext context) { + final int maxLines = textOnly ? 1 : null; + if (textOnly) + return Text( + event.getBody(), + style: TextStyle( + color: textColor, + decoration: event.redacted ? TextDecoration.lineThrough : null, + ), + maxLines: maxLines, + ); + switch (event.type) { + case EventTypes.Audio: + case EventTypes.Image: + case EventTypes.File: + case EventTypes.Video: + return Container( + width: 200, + child: RaisedButton( + color: Colors.blueGrey, + child: Text( + "Download ${event.getBody()}", + overflow: TextOverflow.fade, + softWrap: false, + maxLines: 1, + ), + onPressed: () => launch( + MxContent(event.content["url"]) + .getDownloadLink(Matrix.of(context).client), + ), + ), + ); + case EventTypes.Text: + case EventTypes.Reply: + case EventTypes.Notice: + return Text( + event.getBody(), + style: TextStyle( + color: textColor, + decoration: event.redacted ? TextDecoration.lineThrough : null, + ), + ); + case EventTypes.Emote: + return Text( + "* " + event.getBody(), + maxLines: maxLines, + style: TextStyle( + color: textColor, + fontStyle: FontStyle.italic, + decoration: event.redacted ? TextDecoration.lineThrough : null, + ), + ); + default: + return Text( + "${event.sender.calcDisplayname()} sent a ${event.typeKey} event", + maxLines: maxLines, + style: TextStyle( + color: textColor, + decoration: event.redacted ? TextDecoration.lineThrough : null, + ), + ); + } + } +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..a3af3b6 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,59 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:flutter/material.dart'; + +import 'components/matrix.dart'; +import 'views/chat_list.dart'; +import 'views/login.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Matrix( + clientName: "FluffyWeb", + child: MaterialApp( + title: 'FluffyWeb', + theme: ThemeData( + primaryColor: Color(0xFF5625BA), + backgroundColor: Colors.white, + scaffoldBackgroundColor: Colors.white, + dialogTheme: DialogTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8.0), + ), + ), + popupMenuTheme: PopupMenuThemeData( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8.0), + ), + ), + appBarTheme: AppBarTheme( + color: Colors.white, + elevation: 1, + textTheme: TextTheme( + title: TextStyle(color: Colors.black), + ), + iconTheme: IconThemeData(color: Colors.black), + ), + ), + home: Builder( + builder: (BuildContext context) => StreamBuilder( + stream: + Matrix.of(context).client.connection.onLoginStateChanged.stream, + builder: (context, snapshot) { + if (!snapshot.hasData) + return Scaffold( + body: Center( + child: CircularProgressIndicator(), + ), + ); + if (Matrix.of(context).client.isLogged()) return ChatListView(); + return LoginPage(); + }, + ), + ), + ), + ); + } +} diff --git a/lib/utils/app_route.dart b/lib/utils/app_route.dart new file mode 100644 index 0000000..c9f25b8 --- /dev/null +++ b/lib/utils/app_route.dart @@ -0,0 +1,34 @@ +import 'package:fluffychat/components/adaptive_page_layout.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class AppRoute extends PageRouteBuilder { + static Route defaultRoute(BuildContext context, Widget page) { + return context != null && !AdaptivePageLayout.columnMode(context) + ? CupertinoPageRoute( + builder: (BuildContext context) => page, + ) + : AppRoute(page); + } + + final Widget page; + AppRoute(this.page) + : super( + pageBuilder: ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + ) => + page, + transitionsBuilder: ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) => + FadeTransition( + opacity: animation, + child: child, + ), + ); +} diff --git a/lib/utils/sqflite_store.dart b/lib/utils/sqflite_store.dart new file mode 100644 index 0000000..a9ee2a7 --- /dev/null +++ b/lib/utils/sqflite_store.dart @@ -0,0 +1,588 @@ +/* + * Copyright (c) 2019 Zender & Kurtz GbR. + * + * Authors: + * Christian Pauly + * Marcel Radzio + * + * This file is part of famedlysdk_store_sqflite. + * + * famedlysdk_store_sqflite is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * famedlysdk_store_sqflite is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with famedlysdk_store_sqflite. If not, see . + */ + +library famedlysdk_store_sqflite; + +import 'dart:async'; +import 'dart:convert'; +import 'dart:core'; + +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:path/path.dart' as p; +import 'package:sqflite/sqflite.dart'; + +/// Responsible to store all data persistent and to query objects from the +/// database. +class Store extends StoreAPI { + final Client client; + + Store(this.client) { + _init(); + } + + Database _db; + + /// SQLite database for all persistent data. It is recommended to extend this + /// SDK instead of writing direct queries to the database. + //Database get db => _db; + + _init() async { + var databasePath = await getDatabasesPath(); + String path = p.join(databasePath, "FluffyMatrix.db"); + _db = await openDatabase(path, version: 14, + onCreate: (Database db, int version) async { + await createTables(db); + }, onUpgrade: (Database db, int oldVersion, int newVersion) async { + if (client.debug) + print( + "[Store] Migrate databse from version $oldVersion to $newVersion"); + if (oldVersion != newVersion) { + await schemes.forEach((String name, String scheme) async { + if (name != "Clients") await db.execute("DROP TABLE IF EXISTS $name"); + }); + await createTables(db); + await db.rawUpdate("UPDATE Clients SET prev_batch='' WHERE client=?", + [client.clientName]); + } + }); + + await _db.rawUpdate("UPDATE Events SET status=-1 WHERE status=0"); + + List list = await _db + .rawQuery("SELECT * FROM Clients WHERE client=?", [client.clientName]); + if (list.length == 1) { + var clientList = list[0]; + client.connection.connect( + newToken: clientList["token"], + newHomeserver: clientList["homeserver"], + newUserID: clientList["matrix_id"], + newDeviceID: clientList["device_id"], + newDeviceName: clientList["device_name"], + newLazyLoadMembers: clientList["lazy_load_members"] == 1, + newMatrixVersions: clientList["matrix_versions"].toString().split(","), + newPrevBatch: clientList["prev_batch"].toString().isEmpty + ? null + : clientList["prev_batch"], + ); + if (client.debug) + print("[Store] Restore client credentials of ${client.userID}"); + } else + client.connection.onLoginStateChanged.add(LoginState.loggedOut); + } + + Future createTables(Database db) async { + await schemes.forEach((String name, String scheme) async { + await db.execute(scheme); + }); + } + + Future queryPrevBatch() async { + List list = await txn.rawQuery( + "SELECT prev_batch FROM Clients WHERE client=?", [client.clientName]); + return list[0]["prev_batch"]; + } + + /// Will be automatically called when the client is logged in successfully. + Future storeClient() async { + await _db + .rawInsert('INSERT OR IGNORE INTO Clients VALUES(?,?,?,?,?,?,?,?,?)', [ + client.clientName, + client.accessToken, + client.homeserver, + client.userID, + client.deviceID, + client.deviceName, + client.prevBatch, + client.matrixVersions.join(","), + client.lazyLoadMembers, + ]); + return; + } + + /// Clears all tables from the database. + Future clear() async { + await _db + .rawDelete("DELETE FROM Clients WHERE client=?", [client.clientName]); + await schemes.forEach((String name, String scheme) async { + if (name != "Clients") await _db.rawDelete("DELETE FROM $name"); + }); + return; + } + + Future transaction(Future queries()) async { + return _db.transaction((txnObj) async { + txn = txnObj; + await queries(); + }); + } + + /// Will be automatically called on every synchronisation. Must be called inside of + // /// [transaction]. + Future storePrevBatch(dynamic sync) { + txn.rawUpdate("UPDATE Clients SET prev_batch=? WHERE client=?", + [client.prevBatch, client.clientName]); + return null; + } + + Future storeRoomPrevBatch(Room room) async { + await _db.rawUpdate("UPDATE Rooms SET prev_batch=? WHERE room_id=?", + [room.prev_batch, room.id]); + return null; + } + + /// Stores a RoomUpdate object in the database. Must be called inside of + /// [transaction]. + Future storeRoomUpdate(RoomUpdate roomUpdate) { + if (txn == null) return null; + // Insert the chat into the database if not exists + if (roomUpdate.membership != Membership.leave) + txn.rawInsert( + "INSERT OR IGNORE INTO Rooms " + "VALUES(?, ?, 0, 0, '', 0, 0, '') ", + [roomUpdate.id, roomUpdate.membership.toString().split('.').last]); + else { + txn.rawDelete("DELETE FROM Rooms WHERE room_id=? ", [roomUpdate.id]); + return null; + } + + // Update the notification counts and the limited timeline boolean and the summary + String updateQuery = + "UPDATE Rooms SET highlight_count=?, notification_count=?, membership=?"; + List updateArgs = [ + roomUpdate.highlight_count, + roomUpdate.notification_count, + roomUpdate.membership.toString().split('.').last + ]; + if (roomUpdate.summary?.mJoinedMemberCount != null) { + updateQuery += ", joined_member_count=?"; + updateArgs.add(roomUpdate.summary.mJoinedMemberCount); + } + if (roomUpdate.summary?.mInvitedMemberCount != null) { + updateQuery += ", invited_member_count=?"; + updateArgs.add(roomUpdate.summary.mInvitedMemberCount); + } + if (roomUpdate.summary?.mHeroes != null) { + updateQuery += ", heroes=?"; + updateArgs.add(roomUpdate.summary.mHeroes.join(",")); + } + updateQuery += " WHERE room_id=?"; + updateArgs.add(roomUpdate.id); + txn.rawUpdate(updateQuery, updateArgs); + + // Is the timeline limited? Then all previous messages should be + // removed from the database! + if (roomUpdate.limitedTimeline) { + txn.rawDelete("DELETE FROM Events WHERE room_id=?", [roomUpdate.id]); + txn.rawUpdate("UPDATE Rooms SET prev_batch=? WHERE room_id=?", + [roomUpdate.prev_batch, roomUpdate.id]); + } + return null; + } + + /// Stores an UserUpdate object in the database. Must be called inside of + /// [transaction]. + Future storeUserEventUpdate(UserUpdate userUpdate) { + if (txn == null) return null; + if (userUpdate.type == "account_data") + txn.rawInsert("INSERT OR REPLACE INTO AccountData VALUES(?, ?)", [ + userUpdate.eventType, + json.encode(userUpdate.content["content"]), + ]); + else if (userUpdate.type == "presence") + txn.rawInsert("INSERT OR REPLACE INTO Presences VALUES(?, ?, ?)", [ + userUpdate.eventType, + userUpdate.content["sender"], + json.encode(userUpdate.content["content"]), + ]); + return null; + } + + Future redactMessage(EventUpdate eventUpdate) async { + List> res = await _db.rawQuery( + "SELECT * FROM Events WHERE event_id=?", + [eventUpdate.content["redacts"]]); + if (res.length == 1) { + Event event = Event.fromJson(res[0], null); + event.setRedactionEvent(Event.fromJson(eventUpdate.content, null)); + final int changes1 = await _db.rawUpdate( + "UPDATE Events SET unsigned=?, content=?, prev_content=? WHERE event_id=?", + [ + json.encode(event.unsigned ?? ""), + json.encode(event.content ?? ""), + json.encode(event.prevContent ?? ""), + event.eventId, + ], + ); + final int changes2 = await _db.rawUpdate( + "UPDATE RoomStates SET unsigned=?, content=?, prev_content=? WHERE event_id=?", + [ + json.encode(event.unsigned ?? ""), + json.encode(event.content ?? ""), + json.encode(event.prevContent ?? ""), + event.eventId, + ], + ); + if (changes1 == 1 && changes2 == 1) return true; + } + return false; + } + + /// Stores an EventUpdate object in the database. Must be called inside of + /// [transaction]. + Future storeEventUpdate(EventUpdate eventUpdate) { + if (txn == null) return null; + Map eventContent = eventUpdate.content; + String type = eventUpdate.type; + String chat_id = eventUpdate.roomID; + + // Get the state_key for m.room.member events + String state_key = ""; + if (eventContent["state_key"] is String) { + state_key = eventContent["state_key"]; + } + + if (eventUpdate.eventType == "m.room.redaction") { + redactMessage(eventUpdate); + } + + if (type == "timeline" || type == "history") { + // calculate the status + num status = 2; + if (eventContent["status"] is num) status = eventContent["status"]; + + // Save the event in the database + if ((status == 1 || status == -1) && + eventContent["unsigned"] is Map && + eventContent["unsigned"]["transaction_id"] is String) + txn.rawUpdate( + "UPDATE Events SET status=?, event_id=? WHERE event_id=?", [ + status, + eventContent["event_id"], + eventContent["unsigned"]["transaction_id"] + ]); + else + txn.rawInsert( + "INSERT OR REPLACE INTO Events VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + [ + eventContent["event_id"], + chat_id, + eventContent["origin_server_ts"], + eventContent["sender"], + eventContent["type"], + json.encode(eventContent["unsigned"] ?? ""), + json.encode(eventContent["content"]), + json.encode(eventContent["prevContent"]), + eventContent["state_key"], + status + ]); + + // Is there a transaction id? Then delete the event with this id. + if (status != -1 && + eventUpdate.content.containsKey("unsigned") && + eventUpdate.content["unsigned"]["transaction_id"] is String) + txn.rawDelete("DELETE FROM Events WHERE event_id=?", + [eventUpdate.content["unsigned"]["transaction_id"]]); + } + + if (type == "history") return null; + + if (eventUpdate.content["event_id"] != null || + eventUpdate.content["state_key"] != null) { + final String now = DateTime.now().millisecondsSinceEpoch.toString(); + txn.rawInsert( + "INSERT OR REPLACE INTO RoomStates VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", + [ + eventContent["event_id"] ?? now, + chat_id, + eventContent["origin_server_ts"] ?? now, + eventContent["sender"], + state_key, + json.encode(eventContent["unsigned"] ?? ""), + json.encode(eventContent["prev_content"] ?? ""), + eventContent["type"], + json.encode(eventContent["content"]), + ]); + } else + txn.rawInsert("INSERT OR REPLACE INTO RoomAccountData VALUES(?, ?, ?)", [ + eventContent["type"], + chat_id, + json.encode(eventContent["content"]), + ]); + + return null; + } + + /// Returns a User object by a given Matrix ID and a Room. + Future getUser({String matrixID, Room room}) async { + List> res = await _db.rawQuery( + "SELECT * FROM RoomStates WHERE state_key=? AND room_id=?", + [matrixID, room.id]); + if (res.length != 1) return null; + return RoomState.fromJson(res[0], room).asUser; + } + + /// Loads all Users in the database to provide a contact list + /// except users who are in the Room with the ID [exceptRoomID]. + Future> loadContacts({String exceptRoomID = ""}) async { + List> res = await _db.rawQuery( + "SELECT * FROM RoomStates WHERE state_key LIKE '@%:%' AND state_key!=? AND room_id!=? GROUP BY state_key ORDER BY state_key", + [client.userID, exceptRoomID]); + List userList = []; + for (int i = 0; i < res.length; i++) + userList + .add(RoomState.fromJson(res[i], Room(id: "", client: client)).asUser); + return userList; + } + + /// Returns all users of a room by a given [roomID]. + Future> loadParticipants(Room room) async { + List> res = await _db.rawQuery( + "SELECT * " + + " FROM RoomStates " + + " WHERE room_id=? " + + " AND type='m.room.member'", + [room.id]); + + List participants = []; + + for (num i = 0; i < res.length; i++) { + participants.add(RoomState.fromJson(res[i], room).asUser); + } + + return participants; + } + + /// Returns a list of events for the given room and sets all participants. + Future> getEventList(Room room) async { + List> eventRes = await _db.rawQuery( + "SELECT * " + + " FROM Events " + + " WHERE room_id=?" + + " GROUP BY event_id " + + " ORDER BY origin_server_ts DESC", + [room.id]); + + List eventList = []; + + for (num i = 0; i < eventRes.length; i++) + eventList.add(Event.fromJson(eventRes[i], room)); + + return eventList; + } + + /// Returns all rooms, the client is participating. Excludes left rooms. + Future> getRoomList({bool onlyLeft = false}) async { + List> res = await _db.rawQuery("SELECT * " + + " FROM Rooms" + + " WHERE membership" + + (onlyLeft ? "=" : "!=") + + "'leave' " + + " GROUP BY room_id "); + List roomList = []; + for (num i = 0; i < res.length; i++) { + Room room = await Room.getRoomFromTableRow( + res[i], + client, + states: getStatesFromRoomId(res[i]["room_id"]), + ); + roomList.add(room); + } + return roomList; + } + + /// Returns a room without events and participants. + @deprecated + Future getRoomById(String id) async { + List> res = + await _db.rawQuery("SELECT * FROM Rooms WHERE room_id=?", [id]); + if (res.length != 1) return null; + return Room.getRoomFromTableRow(res[0], client, + roomAccountData: getAccountDataFromRoomId(id), + states: getStatesFromRoomId(id)); + } + + Future>> getStatesFromRoomId(String id) async { + return _db.rawQuery("SELECT * FROM RoomStates WHERE room_id=?", [id]); + } + + Future>> getAccountDataFromRoomId(String id) async { + return _db.rawQuery("SELECT * FROM RoomAccountData WHERE room_id=?", [id]); + } + + Future resetNotificationCount(String roomID) async { + await _db.rawDelete( + "UPDATE Rooms SET notification_count=0, highlight_count=0 WHERE room_id=?", + [roomID]); + return; + } + + Future forgetRoom(String roomID) async { + await _db.rawDelete("DELETE FROM Rooms WHERE room_id=?", [roomID]); + return; + } + + /// Searches for the event in the store. + Future getEventById(String eventID, Room room) async { + List> res = await _db.rawQuery( + "SELECT * FROM Events WHERE event_id=? AND room_id=?", + [eventID, room.id]); + if (res.length == 0) return null; + return Event.fromJson(res[0], room); + } + + Future> getAccountData() async { + Map newAccountData = {}; + List> rawAccountData = + await _db.rawQuery("SELECT * FROM AccountData"); + for (int i = 0; i < rawAccountData.length; i++) + newAccountData[rawAccountData[i]["type"]] = + AccountData.fromJson(rawAccountData[i]); + return newAccountData; + } + + Future> getPresences() async { + Map newPresences = {}; + // TODO: Fix the json parsing of presences + /*List> rawPresences = + await _db.rawQuery("SELECT * FROM Presences"); + for (int i = 0; i < rawPresences.length; i++) + newPresences[rawPresences[i]["type"]] = + Presence.fromJson(rawPresences[i]);*/ + return newPresences; + } + + Future removeEvent(String eventId) async { + assert(eventId != ""); + await _db.rawDelete("DELETE FROM Events WHERE event_id=?", [eventId]); + return; + } + + Future forgetNotification(String roomID) async { + assert(roomID != ""); + await _db + .rawDelete("DELETE FROM NotificationsCache WHERE chat_id=?", [roomID]); + return; + } + + Future addNotification(String roomID, String event_id, int uniqueID) async { + assert(roomID != ""); + assert(event_id != ""); + assert(uniqueID != ""); + await _db.rawInsert( + "INSERT OR REPLACE INTO NotificationsCache(id, chat_id, event_id) VALUES (?, ?, ?)", + [uniqueID, roomID, event_id]); + // Make sure we got the same unique ID everywhere + await _db.rawUpdate("UPDATE NotificationsCache SET id=? WHERE chat_id=?", + [uniqueID, roomID]); + return; + } + + Future>> getNotificationByRoom( + String room_id) async { + assert(room_id != ""); + List> res = await _db.rawQuery( + "SELECT * FROM NotificationsCache WHERE chat_id=?", [room_id]); + if (res.length == 0) return null; + return res; + } + + static final Map schemes = { + /// The database scheme for the Client class. + "Clients": 'CREATE TABLE IF NOT EXISTS Clients(' + + 'client TEXT PRIMARY KEY, ' + + 'token TEXT, ' + + 'homeserver TEXT, ' + + 'matrix_id TEXT, ' + + 'device_id TEXT, ' + + 'device_name TEXT, ' + + 'prev_batch TEXT, ' + + 'matrix_versions TEXT, ' + + 'lazy_load_members INTEGER, ' + + 'UNIQUE(client))', + + /// The database scheme for the Room class. + 'Rooms': 'CREATE TABLE IF NOT EXISTS Rooms(' + + 'room_id TEXT PRIMARY KEY, ' + + 'membership TEXT, ' + + 'highlight_count INTEGER, ' + + 'notification_count INTEGER, ' + + 'prev_batch TEXT, ' + + 'joined_member_count INTEGER, ' + + 'invited_member_count INTEGER, ' + + 'heroes TEXT, ' + + 'UNIQUE(room_id))', + + /// The database scheme for the TimelineEvent class. + 'Events': 'CREATE TABLE IF NOT EXISTS Events(' + + 'event_id TEXT PRIMARY KEY, ' + + 'room_id TEXT, ' + + 'origin_server_ts INTEGER, ' + + 'sender TEXT, ' + + 'type TEXT, ' + + 'unsigned TEXT, ' + + 'content TEXT, ' + + 'prev_content TEXT, ' + + 'state_key TEXT, ' + + "status INTEGER, " + + 'UNIQUE(event_id))', + + /// The database scheme for room states. + 'RoomStates': 'CREATE TABLE IF NOT EXISTS RoomStates(' + + 'event_id TEXT PRIMARY KEY, ' + + 'room_id TEXT, ' + + 'origin_server_ts INTEGER, ' + + 'sender TEXT, ' + + 'state_key TEXT, ' + + 'unsigned TEXT, ' + + 'prev_content TEXT, ' + + 'type TEXT, ' + + 'content TEXT, ' + + 'UNIQUE(room_id,state_key,type))', + + /// The database scheme for room states. + 'AccountData': 'CREATE TABLE IF NOT EXISTS AccountData(' + + 'type TEXT PRIMARY KEY, ' + + 'content TEXT, ' + + 'UNIQUE(type))', + + /// The database scheme for room states. + 'RoomAccountData': 'CREATE TABLE IF NOT EXISTS RoomAccountData(' + + 'type TEXT PRIMARY KEY, ' + + 'room_id TEXT, ' + + 'content TEXT, ' + + 'UNIQUE(type,room_id))', + + /// The database scheme for room states. + 'Presences': 'CREATE TABLE IF NOT EXISTS Presences(' + + 'type TEXT PRIMARY KEY, ' + + 'sender TEXT, ' + + 'content TEXT, ' + + 'UNIQUE(sender))', + + /// The database scheme for the NotificationsCache class. + "NotificationsCache": 'CREATE TABLE IF NOT EXISTS NotificationsCache(' + + 'id int, ' + + 'chat_id TEXT, ' + // The chat id + 'event_id TEXT, ' + // The matrix id of the Event + 'UNIQUE(event_id))', + }; +} diff --git a/lib/views/chat.dart b/lib/views/chat.dart new file mode 100644 index 0000000..0261f48 --- /dev/null +++ b/lib/views/chat.dart @@ -0,0 +1,237 @@ +import 'dart:io'; + +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:fluffychat/components/adaptive_page_layout.dart'; +import 'package:fluffychat/components/chat_settings_popup_menu.dart'; +import 'package:fluffychat/components/list_items/message.dart'; +import 'package:fluffychat/components/matrix.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:toast/toast.dart'; + +import 'chat_list.dart'; + +class Chat extends StatefulWidget { + final String id; + + const Chat(this.id, {Key key}) : super(key: key); + @override + _ChatState createState() => _ChatState(); +} + +class _ChatState extends State { + Room room; + + Timeline timeline; + + final ScrollController _scrollController = new ScrollController(); + + @override + void initState() { + _scrollController.addListener(() async { + if (_scrollController.position.pixels == + _scrollController.position.maxScrollExtent) { + if (timeline.events.length > 0 && + timeline.events[timeline.events.length - 1].type != + EventTypes.RoomCreate) { + await timeline.requestHistory(historyCount: 100); + } + } + }); + + super.initState(); + } + + Future getTimeline() async { + timeline ??= await room.getTimeline(onUpdate: () { + setState(() {}); + }); + return true; + } + + @override + void dispose() { + timeline?.sub?.cancel(); + super.dispose(); + } + + final TextEditingController sendController = TextEditingController(); + + void send() { + if (sendController.text.isEmpty) return; + room.sendTextEvent(sendController.text); + sendController.text = ""; + } + + void sendFileAction(BuildContext context) async { + if (kIsWeb) { + return Toast.show("Not supported in web", context); + } + File file = await FilePicker.getFile(); + if (file == null) return; + Matrix.of(context).tryRequestWithLoadingDialog( + room.sendFileEvent( + MatrixFile(bytes: await file.readAsBytes(), path: file.path), + ), + ); + } + + void sendImageAction(BuildContext context) async { + if (kIsWeb) { + return Toast.show("Not supported in web", context); + } + File file = await ImagePicker.pickImage( + source: ImageSource.gallery, + imageQuality: 50, + maxWidth: 1600, + maxHeight: 1600); + if (file == null) return; + Matrix.of(context).tryRequestWithLoadingDialog( + room.sendImageEvent( + MatrixFile(bytes: await file.readAsBytes(), path: file.path), + ), + ); + } + + void openCameraAction(BuildContext context) async { + if (kIsWeb) { + return Toast.show("Not supported in web", context); + } + File file = await ImagePicker.pickImage( + source: ImageSource.camera, + imageQuality: 50, + maxWidth: 1600, + maxHeight: 1600); + if (file == null) return; + Matrix.of(context).tryRequestWithLoadingDialog( + room.sendImageEvent( + MatrixFile(bytes: await file.readAsBytes(), path: file.path), + ), + ); + } + + @override + Widget build(BuildContext context) { + Client client = Matrix.of(context).client; + room ??= client.getRoomById(widget.id); + + if (room.membership == Membership.invite) room.join(); + + return AdaptivePageLayout( + primaryPage: FocusPage.SECOND, + firstScaffold: ChatList( + activeChat: widget.id, + ), + secondScaffold: Scaffold( + appBar: AppBar( + title: Text(room.displayname), + actions: [ChatSettingsPopupMenu(room, !room.isDirectChat)], + ), + body: SafeArea( + child: Column( + children: [ + Expanded( + child: FutureBuilder( + future: getTimeline(), + builder: (BuildContext context, snapshot) { + if (!snapshot.hasData) + return Center( + child: CircularProgressIndicator(), + ); + if (room.notificationCount != null && + room.notificationCount > 0 && + timeline != null && + timeline.events.length > 0) + room.sendReadReceipt(timeline.events[0].eventId); + return ListView.builder( + reverse: true, + itemCount: timeline.events.length, + controller: _scrollController, + itemBuilder: (BuildContext context, int i) => + Message(timeline.events[i]), + ); + }, + ), + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.2), + spreadRadius: 1, + blurRadius: 2, + offset: Offset(0, -1), // changes position of shadow + ), + ], + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + kIsWeb + ? Container() + : PopupMenuButton( + icon: Icon(Icons.add), + onSelected: (String choice) async { + if (choice == "file") + sendFileAction(context); + else if (choice == "image") + sendImageAction(context); + if (choice == "camera") openCameraAction(context); + }, + itemBuilder: (BuildContext context) => + >[ + const PopupMenuItem( + value: "file", + child: ListTile( + leading: Icon(Icons.attach_file), + title: Text('Send file'), + contentPadding: EdgeInsets.all(0), + ), + ), + const PopupMenuItem( + value: "image", + child: ListTile( + leading: Icon(Icons.image), + title: Text('Send image'), + contentPadding: EdgeInsets.all(0), + ), + ), + const PopupMenuItem( + value: "camera", + child: ListTile( + leading: Icon(Icons.camera), + title: Text('Open camera'), + contentPadding: EdgeInsets.all(0), + ), + ), + ], + ), + SizedBox(width: 8), + Expanded( + child: TextField( + onSubmitted: (t) => send(), + controller: sendController, + decoration: InputDecoration( + labelText: "Write a message...", + hintText: "You're message", + border: InputBorder.none, + ), + )), + SizedBox(width: 8), + IconButton( + icon: Icon(Icons.send), + onPressed: () => send(), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/views/chat_details.dart b/lib/views/chat_details.dart new file mode 100644 index 0000000..dc6587e --- /dev/null +++ b/lib/views/chat_details.dart @@ -0,0 +1,164 @@ +import 'dart:io'; + +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/adaptive_page_layout.dart'; +import 'package:fluffychat/components/chat_settings_popup_menu.dart'; +import 'package:fluffychat/components/content_banner.dart'; +import 'package:fluffychat/components/list_items/participant_list_item.dart'; +import 'package:fluffychat/components/matrix.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/chat_list.dart'; +import 'package:fluffychat/views/invitation_selection.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:toast/toast.dart'; + +class ChatDetails extends StatefulWidget { + final Room room; + + const ChatDetails(this.room); + + @override + _ChatDetailsState createState() => _ChatDetailsState(); +} + +class _ChatDetailsState extends State { + List members; + void setDisplaynameAction(BuildContext context, String displayname) async { + final MatrixState matrix = Matrix.of(context); + final Map success = + await matrix.tryRequestWithLoadingDialog( + widget.room.setName(displayname), + ); + if (success != null && success.length == 0) { + Toast.show( + "Displayname has been changed", + context, + duration: Toast.LENGTH_LONG, + ); + } + } + + void setAvatarAction(BuildContext context) async { + final File tempFile = await ImagePicker.pickImage( + source: ImageSource.gallery, + imageQuality: 50, + maxWidth: 1600, + maxHeight: 1600); + if (tempFile == null) return; + final MatrixState matrix = Matrix.of(context); + final Map success = + await matrix.tryRequestWithLoadingDialog( + widget.room.setAvatar( + MatrixFile( + bytes: await tempFile.readAsBytes(), + path: tempFile.path, + ), + ), + ); + if (success != null && success.length == 0) { + Toast.show( + "Avatar has been changed", + context, + duration: Toast.LENGTH_LONG, + ); + } + } + + void requestMoreMembersAction(BuildContext context) async { + final List participants = await Matrix.of(context) + .tryRequestWithLoadingDialog(widget.room.requestParticipants()); + if (participants != null) setState(() => members = participants); + } + + @override + Widget build(BuildContext context) { + members ??= widget.room.getParticipants(); + final int actualMembersCount = + widget.room.mInvitedMemberCount + widget.room.mJoinedMemberCount; + final bool canRequestMoreMembers = members.length < actualMembersCount; + widget.room.onUpdate = () => setState(() => members = null); + return AdaptivePageLayout( + primaryPage: FocusPage.SECOND, + firstScaffold: ChatList( + activeChat: widget.room.id, + ), + secondScaffold: Scaffold( + appBar: AppBar( + title: Text(widget.room.displayname), + actions: [ChatSettingsPopupMenu(widget.room, false)], + ), + body: ListView.builder( + itemCount: members.length + 1 + (canRequestMoreMembers ? 1 : 0), + itemBuilder: (BuildContext context, int i) => i == 0 + ? Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ContentBanner(widget.room.avatar), + widget.room.canSendEvent("m.room.avatar") && !kIsWeb + ? ListTile( + title: Text("Edit group avatar"), + trailing: Icon(Icons.file_upload), + onTap: () => setAvatarAction(context), + ) + : Container(), + widget.room.canSendEvent("m.room.name") + ? ListTile( + trailing: Icon(Icons.edit), + title: TextField( + textInputAction: TextInputAction.done, + onSubmitted: (s) => + setDisplaynameAction(context, s), + decoration: InputDecoration( + border: InputBorder.none, + labelText: "Edit group name", + labelStyle: TextStyle(color: Colors.black), + hintText: (widget.room.displayname), + ), + ), + ) + : Container(), + Row( + children: [ + Expanded( + child: Container(height: 8, color: Color(0xFFF8F8F8)), + ), + SizedBox(width: 8), + Text( + "$actualMembersCount participant(s)", + style: TextStyle( + fontSize: 15, + ), + ), + SizedBox(width: 8), + Expanded( + child: Container(height: 8, color: Color(0xFFF8F8F8)), + ), + ], + ), + ListTile( + title: Text("Invite contact"), + leading: Icon(Icons.add), + onTap: () => Navigator.of(context).push( + AppRoute.defaultRoute( + context, + InvitationSelection(widget.room), + ), + ), + ), + ], + ) + : i < members.length + 1 + ? ParticipantListItem(members[i - 1]) + : ListTile( + title: Text( + "Load more ${actualMembersCount - members.length} participants"), + leading: Icon(Icons.refresh), + onTap: () => requestMoreMembersAction(context), + ), + ), + ), + ); + } +} diff --git a/lib/views/chat_list.dart b/lib/views/chat_list.dart new file mode 100644 index 0000000..6650eea --- /dev/null +++ b/lib/views/chat_list.dart @@ -0,0 +1,135 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/adaptive_page_layout.dart'; +import 'package:fluffychat/components/dialogs/new_group_dialog.dart'; +import 'package:fluffychat/components/dialogs/new_private_chat_dialog.dart'; +import 'package:fluffychat/components/list_items/chat_list_item.dart'; +import 'package:fluffychat/components/matrix.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/settings.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; + +class ChatListView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return AdaptivePageLayout( + primaryPage: FocusPage.FIRST, + firstScaffold: ChatList(), + secondScaffold: Scaffold( + body: Center( + child: Icon(Icons.chat, size: 100, color: Color(0xFF5625BA)), + ), + ), + ); + } +} + +class ChatList extends StatefulWidget { + final String activeChat; + + const ChatList({this.activeChat, Key key}) : super(key: key); + @override + _ChatListState createState() => _ChatListState(); +} + +class _ChatListState extends State { + RoomList roomList; + + Future> getRooms(BuildContext context) async { + Client client = Matrix.of(context).client; + if (roomList != null) return roomList.rooms; + if (client.prevBatch?.isEmpty ?? true) + await client.connection.onFirstSync.stream.first; + roomList = client.getRoomList(onUpdate: () { + setState(() {}); + }); + return roomList.rooms; + } + + @override + void dispose() { + roomList?.eventSub?.cancel(); + roomList?.firstSyncSub?.cancel(); + roomList?.roomSub?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + "Conversations", + ), + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: () {}, + ), + PopupMenuButton( + onSelected: (String choice) { + switch (choice) { + case "settings": + Navigator.of(context).push( + AppRoute.defaultRoute( + context, + SettingsView(), + ), + ); + } + }, + itemBuilder: (BuildContext context) => >[ + const PopupMenuItem( + value: "settings", + child: Text('Settings'), + ), + ], + ), + ], + ), + floatingActionButton: SpeedDial( + child: Icon(Icons.add), + backgroundColor: Color(0xFF5625BA), + children: [ + SpeedDialChild( + child: Icon(Icons.people_outline), + backgroundColor: Colors.blue, + label: 'Create new group', + labelStyle: TextStyle(fontSize: 18.0), + onTap: () => showDialog( + context: context, + builder: (BuildContext innerContext) => NewGroupDialog(), + ), + ), + SpeedDialChild( + child: Icon(Icons.chat_bubble_outline), + backgroundColor: Colors.green, + label: 'New private chat', + labelStyle: TextStyle(fontSize: 18.0), + onTap: () => showDialog( + context: context, + builder: (BuildContext innerContext) => NewPrivateChatDialog()), + ), + ], + ), + body: FutureBuilder>( + future: getRooms(context), + builder: (BuildContext context, snapshot) { + if (snapshot.hasData) { + List rooms = snapshot.data; + return ListView.builder( + itemCount: rooms.length, + itemBuilder: (BuildContext context, int i) => ChatListItem( + rooms[i], + activeChat: widget.activeChat == rooms[i].id, + ), + ); + } else + return Center( + child: CircularProgressIndicator(), + ); + }, + ), + ); + } +} diff --git a/lib/views/invitation_selection.dart b/lib/views/invitation_selection.dart new file mode 100644 index 0000000..545d5a2 --- /dev/null +++ b/lib/views/invitation_selection.dart @@ -0,0 +1,74 @@ +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/adaptive_page_layout.dart'; +import 'package:fluffychat/components/avatar.dart'; +import 'package:fluffychat/components/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:toast/toast.dart'; + +import 'chat_list.dart'; + +class InvitationSelection extends StatelessWidget { + final Room room; + const InvitationSelection(this.room, {Key key}) : super(key: key); + + Future> getContacts(BuildContext context) async { + final Client client = Matrix.of(context).client; + List participants = await room.requestParticipants(); + List contacts = []; + Map userMap = {}; + for (int i = 0; i < client.roomList.rooms.length; i++) { + List roomUsers = client.roomList.rooms[i].getParticipants(); + for (int j = 0; j < roomUsers.length; j++) { + if (userMap[roomUsers[j].id] != true && + participants.indexWhere((u) => u.id == roomUsers[j].id) == -1) + contacts.add(roomUsers[j]); + userMap[roomUsers[j].id] = true; + } + } + return contacts; + } + + void inviteAction(BuildContext context, String id) async { + final success = await Matrix.of(context).tryRequestWithLoadingDialog( + room.invite(id), + ); + if (success != false) + Toast.show( + "Contact has been invited to the group.", + context, + duration: Toast.LENGTH_LONG, + ); + } + + @override + Widget build(BuildContext context) { + final String groupName = room.name?.isEmpty ?? false ? "group" : room.name; + return AdaptivePageLayout( + primaryPage: FocusPage.SECOND, + firstScaffold: ChatList(activeChat: room.id), + secondScaffold: Scaffold( + appBar: AppBar( + title: Text("Invite contact to $groupName"), + ), + body: FutureBuilder>( + future: getContacts(context), + builder: (BuildContext context, snapshot) { + if (!snapshot.hasData) + return Center( + child: CircularProgressIndicator(), + ); + List contacts = snapshot.data; + return ListView.builder( + itemCount: contacts.length, + itemBuilder: (BuildContext context, int i) => ListTile( + leading: Avatar(contacts[i].avatarUrl), + title: Text(contacts[i].calcDisplayname()), + subtitle: Text(contacts[i].id), + onTap: () => inviteAction(context, contacts[i].id), + ), + ); + }, + )), + ); + } +} diff --git a/lib/views/login.dart b/lib/views/login.dart new file mode 100644 index 0000000..bcfc151 --- /dev/null +++ b/lib/views/login.dart @@ -0,0 +1,144 @@ +import 'dart:math'; + +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/matrix.dart'; +import 'package:flutter/material.dart'; + +const String defaultHomeserver = "https://matrix.org"; + +class LoginPage extends StatefulWidget { + @override + _LoginPageState createState() => _LoginPageState(); +} + +class _LoginPageState extends State { + final TextEditingController usernameController = TextEditingController(); + final TextEditingController passwordController = TextEditingController(); + final TextEditingController serverController = + TextEditingController(text: "matrix.org"); + String usernameError; + String passwordError; + String serverError; + + void login(BuildContext context) async { + MatrixState matrix = Matrix.of(context); + if (usernameController.text.isEmpty) { + setState(() => usernameError = "Please enter your username."); + print("Please enter your username."); + } else { + setState(() => usernameError = null); + } + if (passwordController.text.isEmpty) { + setState(() => passwordError = "Please enter your password."); + } else { + setState(() => passwordError = null); + } + serverError = null; + + if (usernameController.text.isEmpty || passwordController.text.isEmpty) + return; + + String homeserver = serverController.text; + if (homeserver.isEmpty) homeserver = defaultHomeserver; + if (!homeserver.startsWith("https://")) + homeserver = "https://" + homeserver; + + try { + matrix.showLoadingDialog(context); + if (!await matrix.client.checkServer(homeserver)) { + setState(() => serverError = "Homeserver is not compatible."); + + return matrix.hideLoadingDialog(); + } + } catch (exception) { + setState(() => serverError = "Connection attempt failed!"); + return matrix.hideLoadingDialog(); + } + try { + await matrix.client + .login(usernameController.text, passwordController.text); + } on MatrixException catch (exception) { + setState(() => passwordError = exception.errorMessage); + return matrix.hideLoadingDialog(); + } catch (exception) { + setState(() => passwordError = exception.toString()); + return matrix.hideLoadingDialog(); + } + Matrix.of(context).saveAccount(); + matrix.hideLoadingDialog(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: TextField( + controller: serverController, + decoration: InputDecoration( + icon: Icon(Icons.domain), + hintText: "matrix.org", + errorText: serverError, + errorMaxLines: 1, + prefixText: "https://", + labelText: serverError == null ? "Homeserver" : serverError), + ), + ), + body: ListView( + padding: EdgeInsets.symmetric( + vertical: 16, + horizontal: max((MediaQuery.of(context).size.width - 600) / 2, 16)), + children: [ + Image.asset("assets/fluffychat-banner.png"), + TextField( + controller: usernameController, + decoration: InputDecoration( + hintText: "@username:domain", + icon: Icon(Icons.account_box), + errorText: usernameError, + labelText: "Username"), + ), + TextField( + controller: passwordController, + obscureText: true, + onSubmitted: (t) => login(context), + decoration: InputDecoration( + icon: Icon(Icons.vpn_key), + hintText: "****", + errorText: passwordError, + labelText: "Password"), + ), + SizedBox(height: 20), + Card( + elevation: 7, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(50), + ), + child: Container( + width: 120.0, + height: 50.0, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(50), + gradient: LinearGradient( + begin: Alignment.bottomLeft, + end: Alignment.topRight, + colors: [ + Colors.blue, + Color(0xFF5625BA), + ], + ), + ), + child: RawMaterialButton( + onPressed: () => login(context), + splashColor: Colors.grey, + child: Text( + "Login", + style: TextStyle(color: Colors.white, fontSize: 20.0), + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/views/settings.dart b/lib/views/settings.dart new file mode 100644 index 0000000..344ceab --- /dev/null +++ b/lib/views/settings.dart @@ -0,0 +1,141 @@ +import 'dart:io'; + +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/components/adaptive_page_layout.dart'; +import 'package:fluffychat/components/content_banner.dart'; +import 'package:fluffychat/components/matrix.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/chat_list.dart'; +import 'package:fluffychat/views/login.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:toast/toast.dart'; + +class SettingsView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return AdaptivePageLayout( + primaryPage: FocusPage.SECOND, + firstScaffold: ChatList(), + secondScaffold: Settings(), + ); + } +} + +class Settings extends StatefulWidget { + @override + _SettingsState createState() => _SettingsState(); +} + +class _SettingsState extends State { + Future profileFuture; + dynamic profile; + void logoutAction(BuildContext context) async { + MatrixState matrix = Matrix.of(context); + Navigator.of(context).pushAndRemoveUntil( + AppRoute.defaultRoute(context, LoginPage()), (r) => false); + await matrix.tryRequestWithLoadingDialog(matrix.client.logout()); + matrix.clean(); + } + + void setDisplaynameAction(BuildContext context, String displayname) async { + final MatrixState matrix = Matrix.of(context); + final Map success = + await matrix.tryRequestWithLoadingDialog( + matrix.client.connection.jsonRequest( + type: HTTPType.PUT, + action: "/client/r0/profile/${matrix.client.userID}/displayname", + data: {"displayname": displayname}, + ), + ); + if (success != null && success.length == 0) { + Toast.show( + "Displayname has been changed", + context, + duration: Toast.LENGTH_LONG, + ); + setState(() { + profileFuture = null; + profile = null; + }); + } + } + + void setAvatarAction(BuildContext context) async { + final File tempFile = await ImagePicker.pickImage( + source: ImageSource.gallery, + imageQuality: 50, + maxWidth: 1600, + maxHeight: 1600); + if (tempFile == null) return; + final MatrixState matrix = Matrix.of(context); + final Map success = + await matrix.tryRequestWithLoadingDialog( + matrix.client.setAvatar( + MatrixFile( + bytes: await tempFile.readAsBytes(), + path: tempFile.path, + ), + ), + ); + if (success != null && success.length == 0) { + Toast.show( + "Avatar has been changed", + context, + duration: Toast.LENGTH_LONG, + ); + setState(() { + profileFuture = null; + profile = null; + }); + } + } + + @override + Widget build(BuildContext context) { + final Client client = Matrix.of(context).client; + profileFuture ??= client.getProfileFromUserId(client.userID); + profileFuture.then((p) => setState(() => profile = p)); + return Scaffold( + appBar: AppBar( + title: Text("Settings"), + ), + body: ListView( + children: [ + ContentBanner( + profile?.avatarUrl ?? MxContent(""), + defaultIcon: Icons.account_circle, + loading: profile == null, + ), + kIsWeb + ? Container() + : ListTile( + title: Text("Upload avatar"), + trailing: Icon(Icons.file_upload), + onTap: () => setAvatarAction(context), + ), + ListTile( + trailing: Icon(Icons.edit), + title: TextField( + readOnly: profile == null, + textInputAction: TextInputAction.done, + onSubmitted: (s) => setDisplaynameAction(context, s), + decoration: InputDecoration( + border: InputBorder.none, + labelText: "Edit displayname", + labelStyle: TextStyle(color: Colors.black), + hintText: (profile?.displayname ?? ""), + ), + ), + ), + ListTile( + trailing: Icon(Icons.exit_to_app), + title: Text("Logout"), + onTap: () => logoutAction(context), + ), + ], + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..41fdbe0 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,385 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + bubble: + dependency: "direct main" + description: + name: bubble + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.9+1" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.11" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" + famedlysdk: + dependency: "direct main" + description: + path: "." + ref: "4cbfec1ac4c13e6cc72ee98e8290fd802a96cf89" + resolved-ref: "4cbfec1ac4c13e6cc72ee98e8290fd802a96cf89" + url: "https://gitlab.com/famedly/famedlysdk.git" + source: git + version: "0.0.1" + file_picker: + dependency: "direct main" + description: + name: file_picker + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.3+2" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.3" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.4" + flutter_responsive_screen: + dependency: "direct main" + description: + name: flutter_responsive_screen + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + flutter_speed_dial: + dependency: "direct main" + description: + name: flutter_speed_dial + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+3" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + image_picker: + dependency: "direct main" + description: + name: image_picker + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2+3" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + localstorage: + dependency: "direct main" + description: + name: localstorage + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1+4" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.6" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.8" + mime_type: + dependency: transitive + description: + name: mime_type + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.4" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + path_provider: + dependency: transitive + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.1" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0+1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.5" + sqflite: + dependency: "direct main" + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.11" + toast: + dependency: "direct main" + description: + name: toast + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0+2" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" +sdks: + dart: ">=2.6.0 <3.0.0" + flutter: ">=1.12.8 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..d9947fb --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,96 @@ +name: fluffychat +description: Chat with your friends. + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 0.1.0+1 + +environment: + sdk: ">=2.1.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + flutter_responsive_screen: ^1.0.0 + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^0.1.2 + + famedlysdk: + git: + url: https://gitlab.com/famedly/famedlysdk.git + ref: 4cbfec1ac4c13e6cc72ee98e8290fd802a96cf89 + + localstorage: ^3.0.1+4 + bubble: ^1.1.9+1 + toast: ^0.1.5 + file_picker: ^1.4.3+2 + image_picker: ^0.6.2+3 + flutter_speed_dial: ^1.2.5 + url_launcher: ^5.4.1 + sqflite: ^1.2.0 + cached_network_image: ^2.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + flutter_launcher_icons: "^0.7.3" + + +flutter_icons: + android: "launcher_icon" + ios: true + image_path: "assets/logo.png" + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/fluffychat-banner.png + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..ba00aa5 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:fluffychat/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..79a6245 --- /dev/null +++ b/web/index.html @@ -0,0 +1,10 @@ + + + + + fluffychat + + + + +