Giter VIP home page Giter VIP logo

androidforflutter's Introduction

AndroidForFlutter

android接入flutter 需要引入Flutter Boos

1.接入形势aar包 命令:flutter build aar

android { // ... }

repositories { maven { //本地地址 url 'some/path/my_flutter/build/host/outputs/repo' // This is relative to the location of the build.gradle file // if using a relative path. } maven { //命令后的地址直接复制粘贴 url 'https://storage.googleapis.com/download.flutter.io' } }

dependencies { // 自己包的名字 可直接 implementation debugImplementation 'com.example.flutter_module:flutter_debug:1.0' profileImplementation 'com.example.flutter_module:flutter_profile:1.0' releaseImplementation 'com.example.flutter_module:flutter_release:1.0' }

2.在AndroidManifest文件加入

    </activity>
    <!--版本号-->
    <meta-data android:name="flutterEmbedding"
        android:value="2">
    </meta-data>

3.在MyApplication加入 INativeRouter router =new INativeRouter() { @Override public void openContainer(Context context, String url, Map<String, Object> urlParams, int requestCode, Map<String, Object> exts) { String assembleUrl=Utils.assembleUrl(url,urlParams); PageRouter.openPageByUrl(context,assembleUrl, urlParams); }

    };

    FlutterBoost.BoostLifecycleListener boostLifecycleListener= new FlutterBoost.BoostLifecycleListener(){

        @Override
        public void beforeCreateEngine() {

        }

        @Override
        public void onEngineCreated() {

        }

        @Override
        public void onPluginsRegistered() {

        }

        @Override
        public void onEngineDestroy() {

        }

    };

    //
    // AndroidManifest.xml 中必须要添加 flutterEmbedding 版本设置
    //
    //   <meta-data android:name="flutterEmbedding"
    //               android:value="2">
    //    </meta-data>
    // GeneratedPluginRegistrant 会自动生成 新的插件方式 
    //
    // 插件注册方式请使用
    // FlutterBoost.instance().engineProvider().getPlugins().add(new FlutterPlugin());
    // GeneratedPluginRegistrant.registerWith(),是在engine 创建后马上执行,放射形式调用
    //

    Platform platform= new FlutterBoost
            .ConfigBuilder(this,router)
            .isDebug(true)
            .whenEngineStart(FlutterBoost.ConfigBuilder.ANY_ACTIVITY_CREATED)
            .renderMode(FlutterView.RenderMode.texture)
            .lifecycleListener(boostLifecycleListener)
            .build();
    FlutterBoost.instance().init(platform);

4.加android代码跳转flutter路由

public class PageRouter {

public final static Map<String, String> pageName = new HashMap<String, String>() {{

    put("first", "first");
    put("second", "second");
    put("tab", "tab");
    put("sample://flutterPage", "flutterPage");
}};

public static final String NATIVE_PAGE_URL = "sample://nativePage";
public static final String FLUTTER_PAGE_URL = "sample://flutterPage";
public static final String FLUTTER_FRAGMENT_PAGE_URL = "sample://flutterFragmentPage";

public static boolean openPageByUrl(Context context, String url, Map params) {
    return openPageByUrl(context, url, params, 0);
}

public static boolean openPageByUrl(Context context, String url, Map params, int requestCode) {

    String path = url.split("\\?")[0];

    Log.i("openPageByUrl",path);

    try {
        if (pageName.containsKey(path)) {
            Intent intent = BoostFlutterActivity.withNewEngine().url(pageName.get(path)).params(params)
                    .backgroundMode(BoostFlutterActivity.BackgroundMode.opaque).build(context);
            if(context instanceof Activity){
                Activity activity=(Activity)context;
                activity.startActivityForResult(intent,requestCode);
            }else{
                context.startActivity(intent);
            }
            return true;
        } else if (url.startsWith(FLUTTER_FRAGMENT_PAGE_URL)) {
            context.startActivity(new Intent(context, FlutterFragmentPageActivity.class));
            return true;
        } else if (url.startsWith(NATIVE_PAGE_URL)) {
            context.startActivity(new Intent(context, NativePageActivity.class));
            return true;
        }

        return false;

    } catch (Throwable t) {
        return false;
    }
}

}

5.传递参数到flutter Map params = new HashMap(); params.put("test1","v_test1"); params.put("test2","v_test2"); 6.创建flutter fragment new FlutterFragment.NewEngineFragmentBuilder().url("flutterFragment").build();

7.主要flutter main里写 import 'package:flutter/material.dart'; import 'package:flutter_boost/flutter_boost.dart'; import 'simple_page_widgets.dart';

void main() { runApp(MyApp()); }

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

class _MyAppState extends State { @override void initState() { super.initState();

FlutterBoost.singleton.registerPageBuilders({
  'embeded': (pageName, params, _)=>EmbededFirstRouteWidget(),
  'first': (pageName, params, _) => FirstRouteWidget(),
  'firstFirst': (pageName, params, _) => FirstFirstRouteWidget(),
  'second': (pageName, params, _) => SecondRouteWidget(),
  'secondStateful': (pageName, params, _) => SecondStatefulRouteWidget(),
  'tab': (pageName, params, _) => TabRouteWidget(),
  'platformView': (pageName, params, _) => PlatformRouteWidget(),
  'flutterFragment': (pageName, params, _) => FragmentRouteWidget(params),
  ///可以在native层通过 getContainerParams 来传递参数
  'flutterPage': (pageName, params, _) {
    print("flutterPage params:$params");

    return FlutterRouteWidget(params:params);
  },
});
FlutterBoost.singleton.addBoostNavigatorObserver(TestBoostNavigatorObserver());

}

@override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Boost example', builder: FlutterBoost.init(postPush: _onRoutePushed), home: Container( color:Colors.white )); }

void _onRoutePushed( String pageName, String uniqueId, Map params, Route route, Future _) { } } class TestBoostNavigatorObserver extends NavigatorObserver{ void didPush(Route route, Route previousRoute) {

print("flutterboost#didPush");

}

void didPop(Route route, Route previousRoute) { print("flutterboost#didPop"); }

void didRemove(Route route, Route previousRoute) { print("flutterboost#didRemove"); }

void didReplace({Route newRoute, Route oldRoute}) { print("flutterboost#didReplace"); } }

android flutter 互相通信和解决堆栈返回问题

引用:https://juejin.im/post/5d04790a6fb9a07efa09164d 相关:android 和 my_flutter

androidforflutter's People

Contributors

wuyu9527 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.