I recently fell in love with Flutter and I'm developing amazing apps with it at LeanCode. I originally came from web development and I still do that sometimes. Mainly PHP, but I like Go too.
Check out the projects I'm proud of the most below!
Another client for Reddit, but this time, it's not just a client. It's a different way of browsing photos, GIFs, memes and other things there!
Home Page: https://reddigram.wolszon.me/
License: Apache License 2.0
A PageView
with basic navigation tips through the app.
Add a spinner when a full photo is loading in the feed and when the video is buffering.
It should be small in the upper right corner.
Example:
Allow user to play GIFs if they are GIFs and not photos.
Let the user play only one GIF at a time, that is, when user scrolls past a GIF, pause it.
Maybe think about an autoplay feature?
When the user is long-tapping on a photo, show its title on it.
Instead, it opens the image viewer, but on its main screen, not this particular photo.
Try that:
Cache stored feeds in local storage so that the user sees photos when they open up the app before the fresh data is being downloaded!
Pause the GIF when user has scrolled past more than - say - half a GIF, and dispose it (or clear - make it look like it was never played) after it was scrolled past like two screens
And make this disabled by default.
Right now, videos from Reddit preview don't contain audio.
Use approach just like in Unbottled. Make every action require an Api
instance and provide this Api
in the widget tree with some ApiProvider
.
After (probably) one hour, when repository wants to refresh the token, it errors with 401
.
I/flutter ( 6798): Closure: (Store<ReddigramState>) => Null
E/flutter ( 6798): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: DioError [DioErrorType.RESPONSE]: Http status error [401]
E/flutter ( 6798): #0 Dio._makeRequest (package:dio/src/dio.dart:795:16)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #1 Dio._request.<anonymous closure>.<anonymous closure> (package:dio/src/dio.dart:707:22)
E/flutter ( 6798): #2 _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter ( 6798): #3 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter ( 6798): #4 _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
E/flutter ( 6798): #5 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
E/flutter ( 6798): #6 Future._propagateToListeners (dart:async/future_impl.dart:668:32)
E/flutter ( 6798): #7 Future._complete (dart:async/future_impl.dart:473:7)
E/flutter ( 6798): #8 _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter ( 6798): #9 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:28:18)
E/flutter ( 6798): #10 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:294:13)
E/flutter ( 6798): #11 Dio._executeInterceptors (package:dio/src/dio.dart)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #12 Dio._request.<anonymous closure> (package:dio/src/dio.dart:699:20)
E/flutter ( 6798): #13 Dio._checkIfNeedEnqueue (package:dio/src/dio.dart:980:22)
E/flutter ( 6798): #14 Dio._request (package:dio/src/dio.dart:698:9)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #15 Dio.request (package:dio/src/dio.dart:606:12)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #16 Dio.post (package:dio/src/dio.dart:128:12)
E/flutter ( 6798): #17 RedditRepository._post (package:reddigram/api/reddit_repository.dart:53:20)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #18 RedditRepository.refreshAccessToken (package:reddigram/api/reddit_repository.dart:67:12)
E/flutter ( 6798): #19 new RedditRepository.<anonymous closure> (package:reddigram/api/reddit_repository.dart:31:17)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #20 InterceptorsWrapper.onRequest (package:dio/src/interceptor.dart:105:14)
E/flutter ( 6798): #21 Dio._request.<anonymous closure>.<anonymous closure> (package:dio/src/dio.dart:700:60)
E/flutter ( 6798): #22 Dio._executeInterceptors (package:dio/src/dio.dart:649:38)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #23 Dio._request.<anonymous closure> (package:dio/src/dio.dart:699:20)
E/flutter ( 6798): #24 Dio._checkIfNeedEnqueue (package:dio/src/dio.dart:980:22)
E/flutter ( 6798): #25 Dio._request (package:dio/src/dio.dart:698:9)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #26 Dio.request (package:dio/src/dio.dart:606:12)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #27 Dio.get (package:dio/src/dio.dart:94:12)
E/flutter ( 6798): #28 RedditRepository.feed (package:reddigram/api/reddit_repository.dart:127:10)
E/flutter ( 6798): <asynchronous suspension>
E/flutter ( 6798): #29 fetchFreshFeed.<anonymous closure> (package:reddigram/store/feeds/actions.dart:37:24)
E/flutter ( 6798): #30 thunkMiddleware (package:redux_thunk/redux_thunk.dart:45:11)
E/flutter ( 6798): #31 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:238:43)
E/flutter ( 6798): #32 main.<anonymous closure> (package:reddigram/main.dart:21:13)
E/flutter ( 6798): #33 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:238:43)
E/flutter ( 6798): #34 Store.dispatch (package:redux/src/store.dart:250:20)
E/flutter ( 6798): #35 new _BodyViewModel.fromStore.<anonymous closure> (package:reddigram/screens/main/feed_tab.dart:101:17)
E/flutter ( 6798): #36 _FeedTabState.build.<anonymous closure>.<anonymous closure> (package:reddigram/screens/main/feed_tab.dart:33:16)
E/flutter ( 6798): #37 RefreshIndicatorState._show.<anonymous closure> (package:flutter/src/material/refresh_indicator.dart:357:53)
E/flutter ( 6798): #38 _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter ( 6798): #39 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter ( 6798): #40 _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
E/flutter ( 6798): #41 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
E/flutter ( 6798): #42 Future._propagateToListeners (dart:async/future_impl.dart:668:32)
E/flutter ( 6798): #43 Future._completeWithValue (dart:async/future_impl.dart:483:5)
E/flutter ( 6798): #44 Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:513:7)
E/flutter ( 6798): #45 _rootRun (dart:async/zone.dart:1124:13)
E/flutter ( 6798): #46 _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter ( 6798): #47 _CustomZone.runGuarded (dart:async/zone.dart:923:7)
E/flutter ( 6798): #48 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
(...)
Now, subreddits icons and primary colors are cached in shared_preferences. When the user removes the app's data or signs in on a new device, there's no cache.
A possible solution to that could be creating an endpoint in the API that would cache this data and could return multiple subreddits at once.
It currently shows a pause button
Don't use this SearchDelegate
, which doesn't fit the app's theme fully, but instead, after tapping on Explore subreddits change that list tile to a text field and show results below.
For example, show a snackbar, show the sign in option to the user or something other.
Right now, subreddit suggestions are just a constant array of few subs. Let's create some API endpoint for giving better suggestions. Maybe that's a good place to utilize some ML?
Guests should have their own subscription list too! Just store it offline
I wanted a nord theme to this. Could anyone guide me into what to do to add a theme
Give to the user ability to import chosen subreddits from his Reddit subscriptions
When the user opens the subscriptions tab and has it empty, show some suggestions.
For example, EarthPorn, pics, CityPorn, ITookAPicture, Analog
Firefox Focus for example redirects to the /redirect
and doesn't open the app: https://www.reddit.com/r/firefox/comments/a79wzf/firefox_and_opening_in_native_app_in_android/
Let's use the App Link with a custom scheme so it will open it always? We can keep the listener for old link too, for BC.
TODO
comment in 6d3c887. It's been assigned to @Albert221 because they committed the code.Says "1 others upvoted this" instead of "1 other upvoted this"
Przy łączeniu z redditem pare razy trzeba było kliknąć allow, potem aplikacja się wyłączyła, ale za drugim razem było git
Application should display an overlay on the posts marked as NSFW (over_18
in Reddit API) and remove that overlay after user's consent.
Right now it's hard to click on the Open in Reddit, user frequently misses it. I need to make it bigger.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.