Skip to content

[ios]A missing guideline on deciding whether something should be in the engine or a plugin #169953

Open
@hellohuanlin

Description

@hellohuanlin

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listplatform-iosiOS applications specificallyteam-iosOwned by iOS platform teamtriaged-iosTriaged by iOS platform team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions