The FlutterEngine serves as a host to the Dart VM and your Flutter runtime,
  and the FlutterViewController attaches to a FlutterEngine to pass 
  input events into Flutter and to display frames rendered by the
  FlutterEngine.

The FlutterEngine may have the same lifespan as your
FlutterViewController or outlive your FlutterViewController.

Tip:
  It’s generally recommended to pre-warm a long-lived
  FlutterEngine for your application because:

The first frame appears faster when showing the FlutterViewController.

Your Flutter and Dart state will outlive one FlutterViewController.

Your application and your plugins can interact with Flutter and your Dart
logic before showing the UI.

See Loading sequence and performance
for more analysis on the latency and memory
trade-offs of pre-warming an engine.

Create a FlutterEngine

Where you create a FlutterEngine depends on your host app.