Open
Description
Background
In our recent work on supporting scrolling in "share extension", we had a discussion on whether it should be part of engine or not.
In the past, similar discussions have came up several times, but I didn't find a consistent guideline on "engine vs plugin", so I figured it's worth a discussion here, to guide future decisions.
Examples
- Example 1: Share Extension Scrolling. We eventually decided to put it in the engine after weighing pros and cons. For example, one of the arguments is that scrolling is such a fundamental feature that it should just work.
- Example 2: Pointer Interceptor. We briefly mentioned it as part of the discussion, but I don't have much context around it.
- Example 3: iPad Pencil Double Tap. We initially tried it in engine, but later decided plugin is a better choice (see discussion here). For example, one argument is that it is not used by other parts of the framework (so it can easily be a plugin).
- More examples...
Discussion
There are multiple factors brought up:
- Factor 1: Is it a "core" or "fundamental" feature?
- Factor 2: Is it used by other parts of the framework?
- Factor 3: Engine is already very complicated, so we should try to keep it simple.
- Factor 4: Devs may be stuck at an older version of Flutter
- Factor 5: Is it a commonly used feature?
- More factors...
We have to weight these factors carefully, as we may get different decisions based on which factor is more important.
Proposal
We should have a consistent guideline to guide our future decisions, but I'd like to hear from you all.