flutter_boost 0.1.52

中文文档 中文介绍

Release Note #

Please checkout the release note for the latest 0.1.50 to see changes 0.1.50 release note

FlutterBoost #

A next-generation Flutter-Native hybrid solution. FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts.The philosophy of FlutterBoost is to use Flutter as easy as using a WebView. Managing Native pages and Flutter pages at the same time is non-trivial in an existing App. FlutterBoost takes care of page resolution for you. The only thing you need to care about is the name of the page(usually could be an URL). 

Prerequisites #

You need to add Flutter to your project before moving on.The version of the flutter SDK requires v1.5.4-hotfixes, or it will compile error.

Getting Started #

Add a dependency in you Flutter project. #

Open you pubspec.yaml and add the following line to dependencies:

flutter_boost: ^0.1.52

or you could rely directly on a Github project tag, for example(recommended)

            url: 'https://github.com/alibaba/flutter_boost.git'
            ref: '0.1.52'

Integration with Flutter code. #

Add init code to you App

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  _MyAppState createState() => _MyAppState();

class _MyAppState extends State<MyApp> {
  void initState() {

    ///register page widget builders,the key is pageName
      'sample://firstPage': (pageName, params, _) => FirstRouteWidget(),
      'sample://secondPage': (pageName, params, _) => SecondRouteWidget(),


  Widget build(BuildContext context) => MaterialApp(
      title: 'Flutter Boost example',
      builder: FlutterBoost.init(), ///init container manager
      home: Container());

Integration with iOS code. #

Note: You need to add libc++ into "Linked Frameworks and Libraries"

Use FLBFlutterAppDelegate as the superclass of your AppDelegate

@interface AppDelegate : FLBFlutterAppDelegate <UIApplicationDelegate>

Implement FLBPlatform protocol methods for your App.

@interface DemoRouter : NSObject<FLBPlatform>

@property (nonatomic,strong) UINavigationController *navigationController;

+ (DemoRouter *)sharedRouter;


@implementation DemoRouter

- (void)openPage:(NSString *)name
          params:(NSDictionary *)params
      completion:(void (^)(BOOL))completion
    if([params[@"present"] boolValue]){
        FLBFlutterViewContainer *vc = FLBFlutterViewContainer.new;
        [vc setName:name params:params];
        [self.navigationController presentViewController:vc animated:animated completion:^{}];
        FLBFlutterViewContainer *vc = FLBFlutterViewContainer.new;
        [vc setName:name params:params];
        [self.navigationController pushViewController:vc animated:animated];

- (void)closePage:(NSString *)uid animated:(BOOL)animated params:(NSDictionary *)params completion:(void (^)(BOOL))completion
    FLBFlutterViewContainer *vc = (id)self.navigationController.presentedViewController;
    if([vc isKindOfClass:FLBFlutterViewContainer.class] && [vc.uniqueIDString isEqual: uid]){
        [vc dismissViewControllerAnimated:animated completion:^{}];
        [self.navigationController popViewControllerAnimated:animated];


Initialize FlutterBoost with FLBPlatform at the beginning of your App.

 [FlutterBoostPlugin.sharedInstance startFlutterWithPlatform:router
                                                        onStart:^(id engine) {

Integration with Android code. #

Init FlutterBoost in Application.onCreate() 

public class MyApplication extends FlutterApplication {
    public void onCreate() {
        FlutterBoostPlugin.init(new IPlatform() {

            public Application getApplication() {
                return MyApplication.this;

            public boolean isDebug() {
                return true;

            public void openContainer(Context context, String url, Map<String, Object> urlParams, int requestCode, Map<String, Object> exts) {
            		//native open url 

            public IFlutterEngineProvider engineProvider() {
                return new BoostEngineProvider(){
                    public BoostFlutterEngine createEngine(Context context) {
                        return new BoostFlutterEngine(context, new DartExecutor.DartEntrypoint(

            public int whenEngineStart() {
                return ANY_ACTIVITY_CREATED;


Basic Usage #

Concepts #

All page routing requests are being sent to the native router. Native router communicates with Native Container Manager, Native Container Manager takes care of building and destroying of Native Containers. 

Use Flutter Boost Native Container to show a Flutter page in native code. #


 FLBFlutterViewContainer *vc = FLBFlutterViewContainer.new;
        [vc setName:name params:params];
        [self.navigationController presentViewController:vc animated:animated completion:^{}];


public class FlutterPageActivity extends BoostFlutterActivity {

    public String getContainerUrl() {
     	//specify the page name register in FlutterBoost
       return "sample://firstPage";

    public Map getContainerUrlParams() {
    	//params of the page
        Map<String,String> params = new HashMap<>();
        return params;


public class FlutterFragment extends BoostFlutterFragment {
     public String getContainerUrl() {
        return "flutterFragment";

     public Map getContainerUrlParams() {
        Map<String,String> params = new HashMap<>();
        return params;

Use Flutter Boost to open a page in dart code. #



Use Flutter Boost to close a page in dart code. #


Running the Demo #

Please see the example for details.

License #

This project is licensed under the MIT License - see the LICENSE.md file for details

Problem feedback group( dingding group) #

关于我们 #




架构/服务端/客户端/前端/算法/质量工程师 在公众号中投递简历,名额不限哦



For English

0.0.1 #

  • TODO: Describe initial release.

0.1.5 #

The main changes are as following:

  1. The new version do the page jump (URL route) based on the inherited FlutterViewController or Activity. The jump procedure will create new instance of FlutterView, while the old version just reuse the underlying FlutterView
  2. Avoiding keeping and reusing the FlutterView, there is no screenshot and complex attach&detach logical any more. As a result, memory is saved and black or white-screen issue occured in old version all are solved.
  3. This version also solved the app life cycle observation issue, we recommend you to use ContainerLifeCycle observer to listen the app enter background or foreground notification instead of WidgetBinding.
  4. We did some code refactoring, the main logic became more straightforward.

API changes #

From the point of API changes, we did some refactoring as following:

iOS API changes #

  1. FlutterBoostPlugin's startFlutterWithPlatform function change its parameter from FlutterViewController to Engine

Before change

- (void)startFlutterWithPlatform:(id<FLBPlatform>)platform onStart:(void (^)(FlutterViewController *))callback;

After change

- (void)startFlutterWithPlatform:(id<FLB2Platform>)platform
                         onStart:(void (^)(id<FlutterBinaryMessenger,
                                           FlutterPluginRegistry> engine))callback;

  1. FLBPlatform protocol removed flutterCanPop、accessibilityEnable and added entryForDart Before change:
@protocol FLBPlatform <NSObject>
//Whether to enable accessibility support. Default value is Yes.
- (BOOL)accessibilityEnable;
// flutter模块是否还可以pop
- (void)flutterCanPop:(BOOL)canpop;
- (void)openPage:(NSString *)name
          params:(NSDictionary *)params
      completion:(void (^)(BOOL finished))completion;
- (void)closePage:(NSString *)uid
           params:(NSDictionary *)params
       completion:(void (^)(BOOL finished))completion;

After change:

@protocol FLB2Platform <NSObject>
- (NSString *)entryForDart;
- (void)open:(NSString *)url
   urlParams:(NSDictionary *)urlParams
        exts:(NSDictionary *)exts
      completion:(void (^)(BOOL finished))completion;
- (void)close:(NSString *)uid
       result:(NSDictionary *)result
         exts:(NSDictionary *)exts
   completion:(void (^)(BOOL finished))completion;

Android API changes #

Android mainly changed the IPlatform interface and its implementation. It removed following APIs:

Activity getMainActivity();
boolean startActivity(Context context,String url,int requestCode);
Map getSettings();

And added following APIs:

void registerPlugins(PluginRegistry registry) 方法
void openContainer(Context context,String url,Map<String,Object> urlParams,int requestCode,Map<String,Object> exts);
void closeContainer(IContainerRecord record, Map<String,Object> result, Map<String,Object> exts);
IFlutterEngineProvider engineProvider();
int whenEngineStart();


flutter_boost_example #

Demonstrates how to use the flutter_boost plugin.

Getting Started #

For help getting started with Flutter, view our online documentation.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  flutter_boost: ^0.1.52

2. Install it

You can install packages from the command line:

with Flutter:

$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:flutter_boost/flutter_boost.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Sep 20, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.5.0
  • pana: 0.12.21
  • Flutter: 1.9.1+hotfix.2


Detected platforms: Flutter

References Flutter, and has no conflicting libraries.

Health suggestions

Fix lib/container/boost_container.dart. (-1.99 points)

Analysis of lib/container/boost_container.dart reported 4 hints:

line 176 col 3: This function has a return type of 'Future

line 176 col 3: The class 'Future' wasn't exported from 'dart:core' until version 2.1, but this code is required to be able to run on earlier versions.

line 216 col 3: The class 'Future' wasn't exported from 'dart:core' until version 2.1, but this code is required to be able to run on earlier versions.

line 223 col 5: The class 'Future' wasn't exported from 'dart:core' until version 2.1, but this code is required to be able to run on earlier versions.

Format lib/channel/boost_channel.dart.

Run flutter format to format lib/channel/boost_channel.dart.

Format lib/container/container_manager.dart.

Run flutter format to format lib/container/container_manager.dart.

Format lib/flutter_boost.dart.

Run flutter format to format lib/flutter_boost.dart.

Format lib/support/logger.dart.

Run flutter format to format lib/support/logger.dart.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.68.0 <3.0.0
flutter 0.0.0
Transitive dependencies
collection 1.14.11 1.14.12
meta 1.1.7
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8