Need help with flutter_boost?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

5.0K Stars 813 Forks MIT License 842 Commits 180 Opened issues


FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts

Services available


Need anything else?

Contributors list

中文文档 中文介绍

Release Note

v3.0-beta.4 - 1. Flutter SDK upgrades do not require Boost upgrades - 2. Simplify the architecture - 3. Simplify the interface - 4. Unified design of double-end interface - 5. Solved the Top Issue - 6. Android does not need to distinguish between AndroidX and Support


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). 


  1. Before proceeding, you need to integrate Flutter into your existing project.
  2. The Flutter SDK version supported by Boost 3.0 is >= 1.22

Getting Started

Add a dependency in you Flutter project.

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

androidx branch

        url: ''
        ref: 'v3.0-beta.4'

Boost Integration


1. Initialize :

void main() {
class MyApp extends StatefulWidget {
  _MyAppState createState() => _MyAppState();
class _MyAppState extends State {
   static Map
       routerMap = {
    '/': (settings, uniqueId) {
      return PageRouteBuilder(
          settings: settings, pageBuilder: (_, __, ___)
          => Container());
    'embedded': (settings, uniqueId) {
      return PageRouteBuilder(
          settings: settings,
          pageBuilder: (_, __, ___) =>
    'presentFlutterPage': (settings, uniqueId) {
      return PageRouteBuilder(
          settings: settings,
          pageBuilder: (_, __, ___) =>
                params: settings.arguments,
                uniqueId: uniqueId,
   Route routeFactory(RouteSettings settings, String uniqueId) {
    FlutterBoostRouteFactory func =routerMap[];
    if (func == null) {
      return null;
    return func(settings, uniqueId);

@override void initState() { super.initState(); }

@override Widget build(BuildContext context) { return FlutterBoostApp( routeFactory ); }

2.Boost Lifecycle monitoring :

class SimpleWidget extends StatefulWidget {
  final Map params;
  final String messages;
  final String uniqueId;

const SimpleWidget(this.uniqueId, this.params, this.messages);

@override _SimpleWidgetState createState() => _SimpleWidgetState(); }

class _SimpleWidgetState extends State with PageVisibilityObserver { static const String _kTag = 'xlog'; @override void didChangeDependencies() { super.didChangeDependencies(); print('$_kTag#didChangeDependencies, ${widget.uniqueId}, $this');


@override void initState() { super.initState(); PageVisibilityBinding.instance.addObserver(this, ModalRoute.of(context)); print('$_kTag#initState, ${widget.uniqueId}, $this'); }

@override void dispose() { PageVisibilityBinding.instance.removeObserver(this); print('$_kTag#dispose, ${widget.uniqueId}, $this'); super.dispose(); }

@override void onForeground() { print('$_kTag#onForeground, ${widget.uniqueId}, $this'); }

@override void onBackground() { print('$_kTag#onBackground, ${widget.uniqueId}, $this'); }

@override void onAppear(ChangeReason reason) { print('$_kTag#onAppear, ${widget.uniqueId}, $reason, $this'); }

void onDisappear(ChangeReason reason) { print('$_kTag#onDisappear, ${widget.uniqueId}, $reason, $this'); }

@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('tab_example'), ), body: SingleChildScrollView( physics: BouncingScrollPhysics(), child: Container( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: const EdgeInsets.only(top: 80.0), child: Text( widget.messages, style: TextStyle(fontSize: 28.0, color:, ), alignment:, ), Container( margin: const EdgeInsets.only(top: 32.0), child: Text( widget.uniqueId, style: TextStyle(fontSize: 22.0, color:, ), alignment:, ), InkWell( child: Container( padding: const EdgeInsets.all(8.0), margin: const EdgeInsets.all(30.0), color: Colors.yellow, child: Text( 'open flutter page', style: TextStyle(fontSize: 22.0, color:, )), onTap: () => BoostNavigator.of().push("flutterPage", arguments: {'from': widget.uniqueId}), ) Container( height: 300, width: 200, child: Text( '', style: TextStyle(fontSize: 22.0, color:, ), ) ], ))), ); } }

Page jump

Open the page

 String result = await BoostNavigator.of()
                        .push("flutterPage", withContainer: true);

Close the page

BoostNavigator.of().pop('I am result for popping.'),

Android 测接入

1. Initialize

public class MyApplication extends FlutterApplication {

public void onCreate() {

    FlutterBoost.instance().setup(this, new FlutterBoostDelegate() {

        public void pushNativeRoute(String pageName, HashMap<string string> arguments) {
            Intent intent = new Intent(FlutterBoost.instance().currentActivity(), NativePageActivity.class);

        public void pushFlutterRoute(String pageName, HashMap<string string> arguments) {
            Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class, FlutterBoost.ENGINE_ID)

    } );





<application android:name="com.idlefish.flutterboost.example.MyApplication" android:label="flutter_boost_example" android:icon="@mipmap/ic_launcher">

    <activity android:name="com.idlefish.flutterboost.containers.FlutterBoostActivity" android:theme="@style/Theme.AppCompat" android:configchanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density" android:hardwareaccelerated="true" android:windowsoftinputmode="adjustResize">
        <meta-data android:name="" android:resource="@drawable/launch_background"></meta-data>

    <meta-data android:name="flutterEmbedding" android:value="2">

3.native Open and close the Flutter page





@interface AppDelegate ()


@implementation AppDelegate

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    MyFlutterBoostDelegate* delegate=[[MyFlutterBoostDelegate alloc ] init];

    [[FlutterBoost instance] setup:application delegate:delegate callback:^(FlutterEngine *engine) {

    } ];

    return YES; } @end


@interface MyFlutterBoostDelegate : NSObject
@property (nonatomic,strong) UINavigationController *navigationController;

@implementation MyFlutterBoostDelegate

  • (void) pushNativeRoute:(FBCommonParams*) params{ BOOL animated = [params.arguments[@"animated"] boolValue]; BOOL present= [params.arguments[@"present"] boolValue]; UIViewControllerDemo *nvc = [[UIViewControllerDemo alloc] initWithNibName:@"UIViewControllerDemo" bundle:[NSBundle mainBundle]]; if(present){

      [self.navigationController presentViewController:nvc animated:animated completion:^{


      [self.navigationController pushViewController:nvc animated:animated];

    } }

  • (void) pushFlutterRoute:(FBCommonParams*)params {

    FlutterEngine* engine = [[FlutterBoost instance ] getEngine]; engine.viewController = nil;

    FBFlutterViewContainer *vc = ;

    [vc setName:params.pageName params:params.arguments];

    BOOL animated = [params.arguments[@"animated"] boolValue]; BOOL present= [params.arguments[@"present"] boolValue]; if(present){

      [self.navigationController presentViewController:vc animated:animated completion:^{


      [self.navigationController pushViewController:vc animated:animated];

    } }

  • (void) popRoute:(FBCommonParams*)params

       result:(NSDictionary *)result{

    FBFlutterViewContainer *vc = (id)self.navigationController.presentedViewController;

    if([vc isKindOfClass:FBFlutterViewContainer.class] && [vc.uniqueIDString isEqual: params.uniqueId]){

      [vc dismissViewControllerAnimated:YES completion:^{}];


      [self.navigationController popViewControllerAnimated:YES];




native Open the Flutter page

[[FlutterBoost instance] open:@"flutterPage" arguments:@{@"animated":@(YES)}  ];

[[FlutterBoost instance] open:@"secondStateful" arguments:@{@"present":@(YES)}];


please read this document: FAQ


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





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

欢迎来闲鱼做一个好奇、幸福、有影响力的程序员,简历投递:[email protected]


For English

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.