美文网首页
Android项目中集成Flutter模块

Android项目中集成Flutter模块

作者: DASH_1024 | 来源:发表于2019-04-27 22:53 被阅读0次

Flutter作为Google的一个跨平台解决方案,已经推出有段时间了。如果用Flutter独立开发一个项目,可能会由于生态还不够成熟,很多功能还不太好实现。但如果用Flutter开发项目中的一个模块,还是可以大大提高效率的,毕竟只写一套代码,就可以在Android和ios两个平台上运行,可以很好的节约时间成本。本文主要讲在Android项目中快速集成Flutter模块。

集成Flutter模块

首先,在settings.gradle中添加以下代码

setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir.parentFile.parentFile,
        'flutter_demo/.android/flutter_demo.groovy'
))

其中,settingsDir表示settings.gradle所在的目录,也就是Android项目所在的目录,settingsDir.parentFile.parentFile表示settings.gradle所在目录的父目录的父目录,由于我们flutter_demo模块目录与settings.gradle所在目录的父目录的父目录同级,这里指示了flutter_demo所在的根目录。我们最终要定位于flutter_demo.groovy文件,该文件位于flutter_demo下的.android目录下。

然后在build.gradle文件中添加以下代码

dependencies {        
    //flutter
    implementation project(':flutter')
}

简单两步就可以将flutter子模块集成到我们的Android主工程中了。

调用Flutter模块

在Android主项目中,添加以下代码:

FlutterView flutterView = Flutter.createView(this, getLifecycle(), "flutter_page");
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT
);
addContentView(flutterView, params);

在Android中调起Flutter模块有两种方式,一种是创建FlutterView,如上面代码所示;另一种是创建FlutterFragment,通过研究源码发现,这种方式最终还是创建了FlutterView。新创建的FlutterView可以理解为一个独立的小窗口,嵌入到Android项目的某一个页面中,可以类比于一个WebView页面,可以铺满Android中的某个页面,也可以位于某个页面中的一小块。

接下来看看Flutter中的代码:

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Main',      
      home: FlutterMainPage(),
      routes: {
        "flutter_page":(context) => FlutterPage(),
        "flutter_page2":(context) => FlutterPage2(),
      },
    );
  }
}

Andorid主项目的某个页面到Flutter中的某个页面的跳转是通过路由来实现的。如上面代码所示,Android代码中定义了路由“flutter_page”,在Flutter的main.dart中,如果没有定义routes列表,会直接启动home页面,也就是示例中的FlutterMainPage()页面。而如果定义了routes路由列表,则会对Android中定义的路由名称“flutter_page”进行匹配,这里我们匹配到FlutterPage(),所以上图示例代码最终会跳转到Flutter模块中的FlutterPage()页面。

相关文章

网友评论

      本文标题:Android项目中集成Flutter模块

      本文链接:https://www.haomeiwen.com/subject/nvslnqtx.html