├── .github
├── ISSUE_TEMPLATE
│ ├── bug-report.md
│ └── feature-request.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ ├── build.yaml
│ └── pana.yaml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── analysis_options.yaml
├── codecov.yml
├── example
├── .gitignore
├── .metadata
├── README.md
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── magarex
│ │ │ │ │ └── example
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ └── values
│ │ │ │ └── styles.xml
│ │ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ └── settings.gradle
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
├── lib
│ ├── activity_item.dart
│ ├── add_activity_dialog.dart
│ ├── app_user.dart
│ ├── client_provider.dart
│ ├── extension.dart
│ ├── home.dart
│ ├── main.dart
│ ├── people_screen.dart
│ ├── profile_screen.dart
│ └── timeline_screen.dart
└── pubspec.yaml
├── images
├── Screen_Shot_2021-03-31_at_4.13.52_PM.png
├── Screen_Shot_2021-04-14_at_10.55.00_AM.png
├── Screen_Shot_2021-04-14_at_10.56.17_AM.png
├── Screen_Shot_2021-04-14_at_11.08.48_AM.png
├── d1d0f6c27141606521bfa6171bfe2a84.png
├── flutter_feeds_alpha.png
├── flutter_feeds_beta_1.png
├── githubhero.png
└── its-coding-time.jpeg
├── melos.yaml
├── packages
├── faye_dart
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── lib
│ │ ├── faye_dart.dart
│ │ └── src
│ │ │ ├── channel.dart
│ │ │ ├── client.dart
│ │ │ ├── error.dart
│ │ │ ├── event_emitter.dart
│ │ │ ├── extensible.dart
│ │ │ ├── grammar.dart
│ │ │ ├── message.dart
│ │ │ ├── subscription.dart
│ │ │ └── timeout_helper.dart
│ ├── pubspec.yaml
│ └── test
│ │ ├── channel_test.dart
│ │ ├── error_test.dart
│ │ ├── event_emitter_test.dart
│ │ ├── extensible_test.dart
│ │ ├── grammar_test.dart
│ │ ├── mock.dart
│ │ ├── models_test.dart
│ │ ├── subscription_test.dart
│ │ └── timeout_helper_test.dart
├── stream_feed
│ ├── .gitignore
│ ├── .metadata
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── build.yaml
│ ├── example
│ │ ├── lib
│ │ │ └── main.dart
│ │ └── pubspec.yaml
│ ├── lib
│ │ ├── src
│ │ │ ├── client
│ │ │ │ ├── aggregated_feed.dart
│ │ │ │ ├── analytics_client.dart
│ │ │ │ ├── batch_operations_client.dart
│ │ │ │ ├── collections_client.dart
│ │ │ │ ├── feed.dart
│ │ │ │ ├── file_storage_client.dart
│ │ │ │ ├── flat_feed.dart
│ │ │ │ ├── image_storage_client.dart
│ │ │ │ ├── index.dart
│ │ │ │ ├── notification_feed.dart
│ │ │ │ ├── personalization_client.dart
│ │ │ │ ├── reactions_client.dart
│ │ │ │ ├── stream_feed_client.dart
│ │ │ │ ├── stream_feed_client_impl.dart
│ │ │ │ └── stream_user.dart
│ │ │ └── core
│ │ │ │ ├── api
│ │ │ │ ├── analytics_api.dart
│ │ │ │ ├── batch_api.dart
│ │ │ │ ├── collections_api.dart
│ │ │ │ ├── feed_api.dart
│ │ │ │ ├── files_api.dart
│ │ │ │ ├── images_api.dart
│ │ │ │ ├── personalization_api.dart
│ │ │ │ ├── reactions_api.dart
│ │ │ │ ├── responses.dart
│ │ │ │ ├── responses.g.dart
│ │ │ │ ├── stream_api.dart
│ │ │ │ ├── stream_api_impl.dart
│ │ │ │ └── users_api.dart
│ │ │ │ ├── error
│ │ │ │ ├── exceptions.dart
│ │ │ │ ├── feeds_error_code.dart
│ │ │ │ ├── index.dart
│ │ │ │ ├── stream_feeds_dio_error.dart
│ │ │ │ └── stream_feeds_error.dart
│ │ │ │ ├── http
│ │ │ │ ├── index.dart
│ │ │ │ ├── interceptor
│ │ │ │ │ └── logging_interceptor.dart
│ │ │ │ ├── location.dart
│ │ │ │ ├── stream_http_client.dart
│ │ │ │ ├── stream_http_client_options.dart
│ │ │ │ ├── token.dart
│ │ │ │ └── typedefs.dart
│ │ │ │ ├── index.dart
│ │ │ │ ├── models
│ │ │ │ ├── activity.dart
│ │ │ │ ├── activity.g.dart
│ │ │ │ ├── activity_marker.dart
│ │ │ │ ├── activity_update.dart
│ │ │ │ ├── activity_update.g.dart
│ │ │ │ ├── attachment_file.dart
│ │ │ │ ├── attachment_file.g.dart
│ │ │ │ ├── collection_entry.dart
│ │ │ │ ├── collection_entry.g.dart
│ │ │ │ ├── crop.dart
│ │ │ │ ├── enriched_activity.dart
│ │ │ │ ├── enriched_activity.g.dart
│ │ │ │ ├── enrichment_flags.dart
│ │ │ │ ├── event.dart
│ │ │ │ ├── event.g.dart
│ │ │ │ ├── feed_id.dart
│ │ │ │ ├── filter.dart
│ │ │ │ ├── follow.dart
│ │ │ │ ├── follow.g.dart
│ │ │ │ ├── follow_relation.dart
│ │ │ │ ├── follow_relation.g.dart
│ │ │ │ ├── follow_stats.dart
│ │ │ │ ├── follow_stats.g.dart
│ │ │ │ ├── followers.dart
│ │ │ │ ├── followers.g.dart
│ │ │ │ ├── following.dart
│ │ │ │ ├── following.g.dart
│ │ │ │ ├── foreign_id_time_pair.dart
│ │ │ │ ├── group.dart
│ │ │ │ ├── group.g.dart
│ │ │ │ ├── index.dart
│ │ │ │ ├── lookup_attribute.dart
│ │ │ │ ├── next_params.dart
│ │ │ │ ├── notification_feed_meta.dart
│ │ │ │ ├── notification_feed_meta.g.dart
│ │ │ │ ├── open_graph_data.dart
│ │ │ │ ├── open_graph_data.g.dart
│ │ │ │ ├── paginated.dart
│ │ │ │ ├── paginated_activities.dart
│ │ │ │ ├── paginated_activities.g.dart
│ │ │ │ ├── paginated_activities_group.dart
│ │ │ │ ├── paginated_activities_group.g.dart
│ │ │ │ ├── paginated_reactions.dart
│ │ │ │ ├── paginated_reactions.g.dart
│ │ │ │ ├── personalized_feed.dart
│ │ │ │ ├── personalized_feed.g.dart
│ │ │ │ ├── reaction.dart
│ │ │ │ ├── reaction.g.dart
│ │ │ │ ├── realtime_message.dart
│ │ │ │ ├── realtime_message.g.dart
│ │ │ │ ├── resize.dart
│ │ │ │ ├── thumbnail.dart
│ │ │ │ ├── user.dart
│ │ │ │ └── user.g.dart
│ │ │ │ ├── platform_detector
│ │ │ │ ├── platform_detector.dart
│ │ │ │ ├── platform_detector_io.dart
│ │ │ │ ├── platform_detector_stub.dart
│ │ │ │ └── platform_detector_web.dart
│ │ │ │ └── util
│ │ │ │ ├── default.dart
│ │ │ │ ├── enrichment.dart
│ │ │ │ ├── extension.dart
│ │ │ │ ├── index.dart
│ │ │ │ ├── parse_next.dart
│ │ │ │ ├── routes.dart
│ │ │ │ ├── serializer.dart
│ │ │ │ ├── token_helper.dart
│ │ │ │ ├── typedefs.dart
│ │ │ │ └── utc_converter.dart
│ │ ├── stream_feed.dart
│ │ └── version.dart
│ ├── pubspec.yaml
│ └── test
│ │ ├── aggregated_client_test.dart
│ │ ├── analytics_api_test.dart
│ │ ├── analytics_client_test.dart
│ │ ├── assets
│ │ ├── example.pdf
│ │ └── test_image.jpeg
│ │ ├── collections_api_test.dart
│ │ ├── collections_client_test.dart
│ │ ├── enrichment_test.dart
│ │ ├── execeptions_test.dart
│ │ ├── faye_client_test.dart
│ │ ├── feed_api_test.dart
│ │ ├── feed_client_test.dart
│ │ ├── files_api_test.dart
│ │ ├── files_client_test.dart
│ │ ├── fixtures
│ │ ├── activity.json
│ │ ├── activity_update_with_foreign_id.json
│ │ ├── activity_update_with_id.json
│ │ ├── attachment_file.json
│ │ ├── audio.json
│ │ ├── collection_entry.json
│ │ ├── enriched_activity.json
│ │ ├── enriched_activity_collection_entry.json
│ │ ├── enriched_activity_issue61.json
│ │ ├── follow.json
│ │ ├── follow_stats.json
│ │ ├── group.json
│ │ ├── group_enriched_activity.json
│ │ ├── image.json
│ │ ├── meta.json
│ │ ├── notification_group.json
│ │ ├── open_graph_data.json
│ │ ├── paginated_reactions.json
│ │ ├── reaction.json
│ │ ├── realtime_message.json
│ │ ├── realtime_message_issue89.json
│ │ ├── unfollow_relation.json
│ │ ├── user.json
│ │ └── video.json
│ │ ├── flat_client_test.dart
│ │ ├── images_api_test.dart
│ │ ├── images_client_test.dart
│ │ ├── matcher.dart
│ │ ├── mock.dart
│ │ ├── models_test.dart
│ │ ├── notification_client_test.dart
│ │ ├── parse_next.dart
│ │ ├── reactions_api_test.dart
│ │ ├── reactions_client_test.dart
│ │ ├── routes_test.dart
│ │ ├── stream_api_test.dart
│ │ ├── stream_feed_client_test.dart
│ │ ├── stream_feeds_error_test.dart
│ │ ├── stream_http_client_test.dart
│ │ ├── token_helper_test.dart
│ │ ├── users_api_test.dart
│ │ ├── users_client_test.dart
│ │ ├── utils.dart
│ │ ├── utils_test.dart
│ │ └── version_test.dart
├── stream_feed_flutter
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── example
│ │ ├── .gitignore
│ │ ├── .metadata
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── android
│ │ │ ├── .gitignore
│ │ │ ├── app
│ │ │ │ ├── build.gradle
│ │ │ │ └── src
│ │ │ │ │ ├── debug
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ │ ├── main
│ │ │ │ │ ├── AndroidManifest.xml
│ │ │ │ │ ├── kotlin
│ │ │ │ │ │ └── com
│ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ │ └── res
│ │ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── values-night
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ └── values
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ └── profile
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ ├── build.gradle
│ │ │ ├── gradle.properties
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ └── settings.gradle
│ │ ├── assets
│ │ │ └── stream_logo.png
│ │ ├── ios
│ │ │ ├── .gitignore
│ │ │ ├── Flutter
│ │ │ │ ├── AppFrameworkInfo.plist
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ └── Release.xcconfig
│ │ │ ├── Podfile
│ │ │ ├── Runner.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Runner.xcscheme
│ │ │ ├── Runner.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── Runner
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ │ └── LaunchImage.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ └── README.md
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ │ ├── Info.plist
│ │ │ │ └── Runner-Bridging-Header.h
│ │ ├── lib
│ │ │ └── main.dart
│ │ ├── macos
│ │ │ ├── .gitignore
│ │ │ ├── Flutter
│ │ │ │ ├── Flutter-Debug.xcconfig
│ │ │ │ ├── Flutter-Release.xcconfig
│ │ │ │ └── GeneratedPluginRegistrant.swift
│ │ │ ├── Podfile
│ │ │ ├── Runner.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Runner.xcscheme
│ │ │ ├── Runner.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── Runner
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── app_icon_1024.png
│ │ │ │ │ ├── app_icon_128.png
│ │ │ │ │ ├── app_icon_16.png
│ │ │ │ │ ├── app_icon_256.png
│ │ │ │ │ ├── app_icon_32.png
│ │ │ │ │ ├── app_icon_512.png
│ │ │ │ │ └── app_icon_64.png
│ │ │ │ ├── Base.lproj
│ │ │ │ └── MainMenu.xib
│ │ │ │ ├── Configs
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ │ ├── DebugProfile.entitlements
│ │ │ │ ├── Info.plist
│ │ │ │ ├── MainFlutterWindow.swift
│ │ │ │ └── Release.entitlements
│ │ ├── pubspec.yaml
│ │ └── web
│ │ │ ├── favicon.png
│ │ │ ├── icons
│ │ │ ├── Icon-192.png
│ │ │ ├── Icon-512.png
│ │ │ ├── Icon-maskable-192.png
│ │ │ └── Icon-maskable-512.png
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ ├── lib
│ │ ├── src
│ │ │ ├── default
│ │ │ │ ├── default.dart
│ │ │ │ ├── empty_state.dart
│ │ │ │ ├── error_state.dart
│ │ │ │ └── loading_state.dart
│ │ │ ├── media
│ │ │ │ ├── fullscreen_media.dart
│ │ │ │ ├── gallery_header.dart
│ │ │ │ ├── gallery_preview.dart
│ │ │ │ ├── media_widget.dart
│ │ │ │ └── video_package.dart
│ │ │ ├── theme
│ │ │ │ ├── child_reaction_theme.dart
│ │ │ │ ├── gallery_header_theme.dart
│ │ │ │ ├── gif_dialog_theme.dart
│ │ │ │ ├── og_card_theme.dart
│ │ │ │ ├── reaction_theme.dart
│ │ │ │ ├── stream_feed_theme.dart
│ │ │ │ ├── themes.dart
│ │ │ │ └── user_bar_theme.dart
│ │ │ ├── utils
│ │ │ │ ├── constants.dart
│ │ │ │ ├── debug.dart
│ │ │ │ ├── display.dart
│ │ │ │ ├── extensions.dart
│ │ │ │ ├── tag_detector.dart
│ │ │ │ └── typedefs.dart
│ │ │ └── widgets
│ │ │ │ ├── activity
│ │ │ │ ├── activity.dart
│ │ │ │ ├── content.dart
│ │ │ │ ├── footer.dart
│ │ │ │ └── header.dart
│ │ │ │ ├── buttons
│ │ │ │ ├── buttons.dart
│ │ │ │ ├── like.dart
│ │ │ │ ├── reaction.dart
│ │ │ │ ├── reactive_elevated_button.dart
│ │ │ │ ├── reply_button.dart
│ │ │ │ └── repost.dart
│ │ │ │ ├── circular_progress_indicator.dart
│ │ │ │ ├── comment
│ │ │ │ ├── button.dart
│ │ │ │ ├── field.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── textarea.dart
│ │ │ │ ├── dialogs
│ │ │ │ ├── comment.dart
│ │ │ │ ├── delete_activity_dialog.dart
│ │ │ │ ├── dialogs.dart
│ │ │ │ ├── emojis.dart
│ │ │ │ ├── gif.dart
│ │ │ │ └── medias.dart
│ │ │ │ ├── human_readable_timestamp.dart
│ │ │ │ ├── icons.dart
│ │ │ │ ├── interactive_text.dart
│ │ │ │ ├── og
│ │ │ │ └── card.dart
│ │ │ │ ├── pages
│ │ │ │ ├── compose_view.dart
│ │ │ │ ├── flat_feed_list_view.dart
│ │ │ │ └── reaction_list_view.dart
│ │ │ │ ├── stream_feed_app.dart
│ │ │ │ └── user
│ │ │ │ ├── avatar.dart
│ │ │ │ ├── user_bar.dart
│ │ │ │ └── username.dart
│ │ ├── stream_feed_flutter.dart
│ │ └── svgs
│ │ │ ├── avatar.svg
│ │ │ ├── categories.svg
│ │ │ ├── close.svg
│ │ │ ├── gear.svg
│ │ │ ├── love_active.svg
│ │ │ ├── love_inactive.svg
│ │ │ ├── post.svg
│ │ │ ├── reply.svg
│ │ │ ├── repost.svg
│ │ │ └── share.svg
│ ├── pubspec.yaml
│ └── test
│ │ ├── activity_test.dart
│ │ ├── avatar_test.dart
│ │ ├── button_test.dart
│ │ ├── card_test.dart
│ │ ├── circular_progress_indicator_test.dart
│ │ ├── comment_test.dart
│ │ ├── compose_view_test.dart
│ │ ├── dialogs_test.dart
│ │ ├── flat_feed_test.dart
│ │ ├── flutter_test_config.dart
│ │ ├── goldens
│ │ ├── activity_footer.png
│ │ ├── avatar.png
│ │ ├── avatar_icon.png
│ │ ├── buttons_grid.png
│ │ ├── categories_icon.png
│ │ ├── close.png
│ │ ├── gear_icon.png
│ │ ├── love_active_icon.png
│ │ ├── love_inactive_icon.png
│ │ ├── post_icon.png
│ │ ├── reaction_toggle_onAddReaction.png
│ │ ├── reaction_toggle_onRemoveReaction.png
│ │ ├── reply_icon.png
│ │ ├── repost.png
│ │ ├── repost_icon.png
│ │ └── share_icon.png
│ │ ├── human_readable_timestamp_test.dart
│ │ ├── icons_test.dart
│ │ ├── interactive_text_test.dart
│ │ ├── media
│ │ ├── fullscreen_media_test.dart
│ │ ├── gallery_header_test.dart
│ │ └── gallery_preview_test.dart
│ │ ├── mock.dart
│ │ ├── tag_detector_test.dart
│ │ ├── theme
│ │ ├── gallery_header_theme_test.dart
│ │ ├── gif_dialog_theme_test.dart
│ │ ├── og_card_theme_test.dart
│ │ ├── reaction_theme_test.dart
│ │ ├── stream_feed_theme_test.dart
│ │ └── userbar_theme_test.dart
│ │ └── user_bar_test.dart
└── stream_feed_flutter_core
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── example
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android
│ │ ├── .gitignore
│ │ ├── app
│ │ │ ├── build.gradle
│ │ │ └── src
│ │ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin
│ │ │ │ │ └── com
│ │ │ │ │ │ └── example
│ │ │ │ │ │ └── example
│ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res
│ │ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── values-night
│ │ │ │ │ └── styles.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── profile
│ │ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ └── gradle-wrapper.properties
│ │ └── settings.gradle
│ ├── ios
│ │ ├── .gitignore
│ │ ├── Flutter
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── Runner
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ └── LaunchImage.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── LaunchImage.png
│ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ ├── lib
│ │ └── main.dart
│ ├── macos
│ │ ├── .gitignore
│ │ ├── Flutter
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── Runner
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── app_icon_1024.png
│ │ │ │ ├── app_icon_128.png
│ │ │ │ ├── app_icon_16.png
│ │ │ │ ├── app_icon_256.png
│ │ │ │ ├── app_icon_32.png
│ │ │ │ ├── app_icon_512.png
│ │ │ │ └── app_icon_64.png
│ │ │ ├── Base.lproj
│ │ │ └── MainMenu.xib
│ │ │ ├── Configs
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ ├── pubspec.yaml
│ └── web
│ │ ├── favicon.png
│ │ ├── icons
│ │ ├── Icon-192.png
│ │ ├── Icon-512.png
│ │ ├── Icon-maskable-192.png
│ │ └── Icon-maskable-512.png
│ │ ├── index.html
│ │ └── manifest.json
│ ├── lib
│ ├── src
│ │ ├── aggregated_feed_core.dart
│ │ ├── attachment.dart
│ │ ├── bloc
│ │ │ ├── activities_manager.dart
│ │ │ ├── bloc.dart
│ │ │ ├── feed_bloc.dart
│ │ │ ├── grouped_activities_manager.dart
│ │ │ ├── provider.dart
│ │ │ └── reactions_manager.dart
│ │ ├── extensions.dart
│ │ ├── flat_feed_core.dart
│ │ ├── media.dart
│ │ ├── reactions_list_core.dart
│ │ ├── typedefs.dart
│ │ ├── upload
│ │ │ ├── states.dart
│ │ │ ├── upload.dart
│ │ │ ├── upload_controller.dart
│ │ │ └── widgets.dart
│ │ └── upload_list_core.dart
│ └── stream_feed_flutter_core.dart
│ ├── pubspec.yaml
│ └── test
│ ├── aggregated_feed_core_test.dart
│ ├── assets
│ ├── cavalier.mp3
│ ├── example.pdf
│ ├── penserais.mp3
│ ├── test_image.jpeg
│ └── test_image2.png
│ ├── bloc
│ ├── bloc_test.dart
│ ├── extensions_test.dart
│ └── upload_test.dart
│ ├── flat_feed_core_test.dart
│ ├── media_test.dart
│ ├── mocks.dart
│ ├── reactions_list_core_test.dart
│ ├── states
│ └── upload_test.dart
│ ├── stream_feed_flutter_core_test.dart
│ ├── upload_core_test.dart
│ └── utils.dart
└── scripts
└── coverage.sh
/.github/ISSUE_TEMPLATE/bug-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **What version of Flutter do you use?**
14 |
15 | **What package are you using? What version?**
16 |
17 | **What platform is it about?**
18 | - [ ] Android
19 | - [ ] iOS
20 | - [ ] Web
21 | - [ ] Windows
22 | - [ ] MacOS
23 | - [ ] Linux
24 |
25 | **a copy of `flutter doctor --verbose`**
26 |
27 | **To Reproduce**
28 | Steps to reproduce the behavior:
29 | 1. Go to '...'
30 | 2. Click on '....'
31 | 3. Scroll down to '....'
32 | 4. See error
33 |
34 | **Expected behavior**
35 | A clear and concise description of what you expected to happen.
36 |
37 | **Screenshots**
38 | If applicable, add screenshots to help explain your problem.
39 |
40 | **Logs **
41 | Run `flutter analyze` and attach any output of that command below.
42 | If there are any analysis errors, try resolving them before filing this issue.
43 |
44 | Paste the output of running `flutter doctor -v` here.
45 |
46 | **Additional context**
47 | Add any other context about the problem here.
48 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | # Submit a pull request
2 |
3 | ## CLA
4 |
5 | - [ ] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required).
6 | - [ ] The code changes follow best practices
7 | - [ ] Code changes are tested (add some information if not applicable)
8 |
9 | ## Description of the pull request
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.lock
4 | *.log
5 | *.pyc
6 | *.swp
7 | .DS_Store
8 | .atom/
9 | .buildlog/
10 | .history
11 | .svn/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # Visual Studio Code related
20 | .vscode/
21 |
22 | # Flutter/Dart/Pub related
23 | **/doc/api/
24 | .dart_tool/
25 | .flutter-plugins
26 | .packages
27 | .pub-cache/
28 | .pub/
29 | build/
30 | example/pubspec.lock
31 | coverage.lcov
32 | coverage/
33 | packages/stream_feed_flutter/example/.flutter-plugins-dependencies
34 | packages/stream_feed_flutter/example/.flutter-plugins-dependencies
35 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Reporting a Vulnerability
2 | At Stream we are committed to the security of our Software. We appreciate your efforts in disclosing vulnerabilities responsibly and we will make every effort to acknowledge your contributions.
3 |
4 | Report security vulnerabilities at the following email address:
5 | ```
6 | [security@getstream.io](mailto:security@getstream.io)
7 | ```
8 | Alternatively it is also possible to open a new issue in the affected repository, tagging it with the `security` tag.
9 |
10 | A team member will acknowledge the vulnerability and will follow-up with more detailed information. A representative of the security team will be in touch if more information is needed.
11 |
12 | # Information to include in a report
13 | While we appreciate any information that you are willing to provide, please make sure to include the following:
14 | * Which repository is affected
15 | * Which branch, if relevant
16 | * Be as descriptive as possible, the team will replicate the vulnerability before working on a fix.
17 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "**/*.g.dart"
3 |
--------------------------------------------------------------------------------
/example/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: d408d302e22179d598f467e11da5dd968dbdc9ec
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | # example
2 |
3 | A new Flutter application.
4 |
5 | ## Getting Started
6 |
7 | This project is a starting point for a Flutter application.
8 |
9 | A few resources to get you started if this is your first Flutter project:
10 |
11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
13 |
14 | For help getting started with Flutter, view our
15 | [online documentation](https://flutter.dev/docs), which offers tutorials,
16 | samples, guidance on mobile development, and a full API reference.
17 |
--------------------------------------------------------------------------------
/example/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 |
--------------------------------------------------------------------------------
/example/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/android/app/src/main/kotlin/com/magarex/example/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.magarex.example
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/example/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.5.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | jcenter()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/example/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | android.enableR8=true
5 |
--------------------------------------------------------------------------------
/example/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
7 |
--------------------------------------------------------------------------------
/example/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/example/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/example/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 9.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/example/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/example/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/example/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/example/lib/client_provider.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter/widgets.dart';
4 | import 'package:stream_feed/stream_feed.dart';
5 |
6 | class ClientProvider extends InheritedWidget {
7 | const ClientProvider({
8 | Key? key,
9 | required this.client,
10 | required Widget child,
11 | }) : super(key: key, child: child);
12 |
13 | /// Access the [StreamFeedClient] from the provider to perform API actions.
14 | final StreamFeedClient client;
15 |
16 | static ClientProvider of(BuildContext context) {
17 | final client = context.dependOnInheritedWidgetOfExactType();
18 | assert(client != null, 'Client not found in the widget tree');
19 | return client!;
20 | }
21 |
22 | @override
23 | bool updateShouldNotify(ClientProvider old) {
24 | return old.child != child || old.client != client;
25 | }
26 |
27 | @override
28 | void debugFillProperties(DiagnosticPropertiesBuilder properties) {
29 | super.debugFillProperties(properties);
30 | properties.add(DiagnosticsProperty('client', client));
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/example/lib/extension.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:stream_feed/stream_feed.dart';
3 | import 'package:stream_feed_example/client_provider.dart';
4 |
5 | //ignore: public_member_api_docs
6 | extension ProviderX on BuildContext {
7 | //ignore: public_member_api_docs
8 | StreamFeedClient get client => ClientProvider.of(this).client;
9 | }
10 |
11 | //ignore: public_member_api_docs
12 | extension Snackbar on BuildContext {
13 | //ignore: public_member_api_docs
14 | void showSnackBar(final String message) {
15 | ScaffoldMessenger.of(this).showSnackBar(SnackBar(content: Text(message)));
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/example/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: stream_feed_example
2 | description: A new Flutter application.
3 |
4 | publish_to: "none" # Remove this line if you wish to publish to pub.dev
5 | version: 1.0.0+1
6 |
7 | environment:
8 | sdk: ">=2.12.0 <3.0.0"
9 |
10 | dependencies:
11 | cupertino_icons: ^1.0.2
12 | flutter:
13 | sdk: flutter
14 | stream_feed:
15 | path: ../packages/stream_feed
16 | timeago: ^3.0.2
17 |
18 | dev_dependencies:
19 | flutter_test:
20 | sdk: flutter
21 |
22 | flutter:
23 | uses-material-design: true
24 |
--------------------------------------------------------------------------------
/images/Screen_Shot_2021-03-31_at_4.13.52_PM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/Screen_Shot_2021-03-31_at_4.13.52_PM.png
--------------------------------------------------------------------------------
/images/Screen_Shot_2021-04-14_at_10.55.00_AM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/Screen_Shot_2021-04-14_at_10.55.00_AM.png
--------------------------------------------------------------------------------
/images/Screen_Shot_2021-04-14_at_10.56.17_AM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/Screen_Shot_2021-04-14_at_10.56.17_AM.png
--------------------------------------------------------------------------------
/images/Screen_Shot_2021-04-14_at_11.08.48_AM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/Screen_Shot_2021-04-14_at_11.08.48_AM.png
--------------------------------------------------------------------------------
/images/d1d0f6c27141606521bfa6171bfe2a84.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/d1d0f6c27141606521bfa6171bfe2a84.png
--------------------------------------------------------------------------------
/images/flutter_feeds_alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/flutter_feeds_alpha.png
--------------------------------------------------------------------------------
/images/flutter_feeds_beta_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/flutter_feeds_beta_1.png
--------------------------------------------------------------------------------
/images/githubhero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/githubhero.png
--------------------------------------------------------------------------------
/images/its-coding-time.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GetStream/stream-feed-flutter/57208bea525beb6bb050f12f1e2f1d79f198f6fc/images/its-coding-time.jpeg
--------------------------------------------------------------------------------
/packages/faye_dart/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## [0.1.1+2] - (27-05-2022)
2 | - nothing new / lints
3 |
4 | ## [0.1.1+1] - (25-02-2022)
5 |
6 | - fix: implement Equatable on `FayeClient`. With this change, if you fetch your client from an `InheritedWidget` for example, `updateShouldNotify` doesn't trigger every time.
7 |
8 |
9 | ## [0.1.1] - (25-02-2022)
10 |
11 | - new: expose connexion status stream `Stream` via the `Subscription` class to check if the Faye client is unconnected, connecting, connected or disconnected, and act accordingly.
12 |
13 |
14 | ## [0.1.0] - (07-05-2021)
15 |
16 | * Initial release.
17 |
--------------------------------------------------------------------------------
/packages/faye_dart/lib/faye_dart.dart:
--------------------------------------------------------------------------------
1 | library faye_dart;
2 |
3 | export 'src/client.dart' show FayeClient, FayeClientState;
4 | export 'src/error.dart';
5 | export 'src/extensible.dart' show MessageHandler;
6 | export 'src/subscription.dart';
7 |
--------------------------------------------------------------------------------
/packages/faye_dart/lib/src/error.dart:
--------------------------------------------------------------------------------
1 | import 'package:faye_dart/src/grammar.dart' as grammar;
2 |
3 | class FayeClientError {
4 | const FayeClientError({
5 | this.code,
6 | this.params = const [],
7 | required this.errorMessage,
8 | });
9 |
10 | factory FayeClientError.parse(String? errorMessage) {
11 | errorMessage = errorMessage ?? '';
12 | if (!RegExp(grammar.error).hasMatch(errorMessage)) {
13 | return FayeClientError(errorMessage: errorMessage);
14 | }
15 |
16 | final parts = errorMessage.split(':');
17 | final code = int.parse(parts[0]);
18 | final params = parts[1].split(',');
19 | final message = parts[2];
20 |
21 | return FayeClientError(code: code, params: params, errorMessage: message);
22 | }
23 |
24 | final int? code;
25 | final List params;
26 | final String errorMessage;
27 |
28 | @override
29 | String toString() => '$code : ${params.join(',')} : $errorMessage';
30 | }
31 |
--------------------------------------------------------------------------------
/packages/faye_dart/lib/src/extensible.dart:
--------------------------------------------------------------------------------
1 | import 'dart:collection';
2 |
3 | import 'package:faye_dart/src/message.dart';
4 |
5 | typedef MessageHandler = Message Function(Message message);
6 |
7 | class Extensible {
8 | late final _extensions = Queue