-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Description
Thank you very much for considering becoming a maintainer! The fact that you're willing to take some time to make this plugin even better is really appreciated 👍
I'm not going to lie to you though: there's work to be done. If you want to apply, please follow the following steps:
- Read this post entirely.
- Post a message in this thread that explains who you are, why you're considering it, what's your experience, etc. Nothing fancy, just a quick presentation that allows us to know you better.
- Make sure to tag me (@bd-arc) so that I actually receive your message.
- 🎉 Big bonus points for people who also send a polished PR that addresses one of the points below.
⚠️ Warning
People have lots of expectations about this plugin — it's currently downloaded more than 250,000 times every single month. So please do not apply if:
- you don't have an amazing work ethic
- you don't really have time to take care of it
- you lack coding experience
- you're not proficient in English.
🏆 Most required updates
Here are, ranged by order of importance, the most important updates the plugin currently requires.
1. Ditch ScrollView
and FlatList
, and implement a custom scroll logic based on react-native-gesture-handler
and react-native-reanimated
This is, by far, the most important step to be taken at this point. It will open the road to a whole new level of features and user experience: total control over the scroll behavior, proper callback mechanism, better loop mode, better animations, better performance, proper RTL mode, no more "trailing slide whitespace", no visual differenciation between iOS and Android with the advanced animations, and, most importantly, no more FlatList
issues to deal with 🙏
By itself, this update will solve approximately 90 % of the currently opened issues!
While it may seem like a daunted task, it happens that the folks at Software Mansion have created their own version of the carousel that does just that, and they are totally open to sharing their work (in fact, react-native-snap-carousel
served as an inspiration for them). They've laid out a great base that just need to be improved and tailored to this plugin's needs.
Note that the idea is not to use their plugin because:
- it lacks a few important features;
- from their own admittance, it is still immature;
- the hundreds of developers actively engaged with our plugin will help improving it faster.
Next steps
- Take a look at this discussion — a few key points to keep in mind are mentioned there.
- Take a look at this repo — this will serve as a great starting point.
- Update the carousel's inner logic while making sure all the features are preserved. (Again, the
react-native-pager
plugin is not to be imported, only to be used as a reference.) - Progressively improve it thanks to user feedback and other developer's help.
2. Take care of miscellaneous bugs introduced in 3.8.x
- See Snaptoitem doesn't work with more than 10 elements? #513, snapToItem/snapToNext not working on Android devices when called from callbacks inside step #552, useState in onSnapToItem breaks item display #559, #615...
- See the release notes; one (or maybe more) of those commits is to blame...
3. Handle dynamic data (addition/removal of items)
- See Adjust index if data item is removed #157, Strange behaviour when loop is enabled and data is dynamic! #469, Remove current index #554, Removing last item from carousel results in an empty space (Android) #623...
- Will be made incredibly easier once Observing onScrollToPage event #1 is implemented.
4. Prevent unneeded rerenders
- See More than 9 items in the data causes the Carousel to re-render all the items indefinitely #329, #478...
- Will most probably be fixed once Observing onScrollToPage event #1 is implemented.