美文网首页Flutter学习
Flutter学习(3)-原生Android通过源码集成Flut

Flutter学习(3)-原生Android通过源码集成Flut

作者: 6He | 来源:发表于2019-05-24 14:17 被阅读0次
    引入源码前的配置:

    新建安卓原生项目FlutterNativeApp,
    执行命令

    cd FlutterNativeApp/
    flutter create -t module my_flutter
    

    在尝试将Flutter模块项目连接到主机Android应用程序之前,请确保您的主机Android应用程序在应用程序的build.gradle文件中声明以下源兼容性:

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    

    将Flutter模块作为子项目包含在Host应用程序的settings.gradle中:

    include ':app'
    setBinding(new Binding([gradle: this]))
    evaluate(new File('my_flutter/.android/include_flutter.groovy'))
    //原文是这样的,但是无法正确编译,去掉settingsDir.parentFile之后就行了
    //evaluate(new File(settingsDir.parentFile, 'my_flutter/.android/include_flutter.groovy'                       ))   
    
    引入Flutter模块:
    implementation project(':flutter’)
    

    使用Flutter模块的Java API将Flutter视图添加到主应用程序。这可以通过直接使用Flutter.createView来完成

    View flutterView = Flutter.createView(
            MainActivity.this,
            getLifecycle(),
            "route1"
    );
    
    setContentView(flutterView);
    

    也可以创建一个FlutterFragment来自己处理生命周期:

    FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
     tx.replace(R.id.someContainer, Flutter.createFragment("route1"));
     tx.commit();
    

    上面我们使用字符串“route1”来告诉Dart代码在Flutter视图中显示哪个小部件。Flutter模块项目模板的lib / main.dart文件应该打开提供的路径字符串(可用作window.defaultRouteName),以确定要创建哪个窗口小部件并传递给runApp。示例,

    import 'dart:ui';
    import 'package:flutter/material.dart';
    void main() => runApp(_widgetForRoute(window.defaultRouteName));
    Widget _widgetForRoute(String route) {
      switch (route) {
        case 'route1':
          return SomeWidget(...);
        case 'route2':
          return SomeOtherWidget(...);
        default:
          return Center(
            child: Text('Unknown route: $route', textDirection: TextDirection.ltr),
          );
      }}
    
    使用热重载:

    将手机连接电脑或者打开模拟器

    cd my_flutter/
    bogon:my_flutter liuhe$ flutter attach
    Waiting for a connection from Flutter on MI 8...
    Done.
    

    然后点击Debug App

    Syncing files to device MI 8...                                        
     3,134ms (!)                                      
    🔥  To hot reload changes while running, press "r". To hot restart (and rebuild state),
    press "R".
    

    输入r进行热重载,输入R进行热重启(会重建状态)

    文档:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

    相关文章

      网友评论

        本文标题:Flutter学习(3)-原生Android通过源码集成Flut

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