I wouldn’t pick flutter since it’s so new and you’re wanting to get to production. I assume you will end up having to spend a lot of time figuring out how to do simple things. You also won’t have the benefit of community established best practices to save you from making costly mistakes.
To choose between native and react-native, list the functionality that your app will have, and see if react-native has good support for it. If it doesn’t, you will have to write native code for both platforms and add it yourself.
This adds a ton of learning to the equation and makes the choice less clear, since now you have to learn react-native, plus some swift and Java. If more than a small part of your app ends up requiring to write native code, you might be better off making the whole apps in Swift and Java.
React native is very efficient for apps that show simple widgets like images, texts, lists, buttons, etc. You also have good support for playing video (I assume you’ll need it since you mention coursera-like content).
Some advice if you pick that route:
- Don’t be fooled by it’s simplicity. You can make an app in hours, but if it’s non trivial you will require more time to really polish it
- React code can get messy fast, it’s easy to lose track of where state changes happen. Choosing a well known architecture and sticking with it (ex: redux) is super helpful as complexity grows
- to get to 60fps, you need to be very precise on how and when to make state/U.I updates, so the optimization phase can take a while. I often end up going through all components in a tree to manually disable un-necessary re-renders, or delay re-rendering after some animation has completed.
- don’t use react-router, it’s not suited for native needs (it keeps all previous views from the stack active which creates all sorts of problems)
Compared to learning two languages for making an iOS and Android app, react native is incredibly fast and efficient, especially when you come from the web. If your app doesn’t require native modules, go for it.
Source: spent the past year leading development of a react native app with 2M monthly users.