The summary.
IT RENDERS ITS OWN CONTROLS RATHER THAN USING THE PLATFORM'S
Which gives identical behaviour everywhere and complete control, at the cost of not matching platform conventions and a larger application.
EXTRACT WIDGETS INTO CLASSES, NOT METHODS
The framework can then skip rebuilding them when nothing changed. And place listening widgets as low as possible to limit rebuild scope.
AGREE ONE STATE MANAGEMENT APPROACH
Several mixed in one application is worse than any single choice.
PASS IDENTIFIERS BETWEEN ROUTES, NOT OBJECTS
It is what makes deep linking work, since a link carries only identifiers.
CROSS-PLATFORM DOES NOT REMOVE THE NEED FOR PLATFORM KNOWLEDGE
Platform channels require native code for each target, and package behaviour differs between platforms in ways emulators do not reveal.
Check maintenance activity before adopting a package — abandoned ones block upgrades.
ALWAYS PROFILE IN A RELEASE BUILD
Debug builds are substantially slower and mislead entirely. Use a separate isolate for heavy computation, since blocking one blocks rendering.
BUILD PER ARCHITECTURE AND STRIP UNUSED ASSETS
Download size is a genuine barrier here.