Interview frequency: …
Short answer
Start with a Flutter API or a trusted plugin, and write a custom integration only when there is a real capability not covered, isolating platform differences behind one contract.
Explanation
A ready-made plugin reduces native code and maintenance, but you must check the supported platforms, the lifecycle, and the quality of maintenance. When a custom need exists, you can build a plugin or channel and link Dart to the host, with a fallback or a clear rejection for the unsupported platform. This is a decision about boundary and cost of ownership, not a rule that one package is always better.
Common mistakes
- Adding native code before checking for a suitable Flutter API or plugin.
- Exposing Android and iOS details in every consumer instead of one adapter.
- Treating an unsupported capability as an ordinary null value with no UX or error policy.