フラッターは、Androidとの複合用途開発を見ています

私はフラッタがちょうど出てきたとき、私はフラッタを学ぶようになった覚えています。今活発な開発フラッターとプッシュの大物で、そして再びピットフラッタへの綿密な調査を与えるためにその時点でのように、しかし、その後、安定したバージョンにレベルのフラッター複雑な組み合わせを軽蔑していません。
フラッターは、Androidとの複合用途開発を見ています
フラッターはクロスプラットフォームが、現在はほとんどすべての既存のプロジェクトであってもよいが、ネイティブ+フラッタハイブリッド開発プログラムのほぼすべての使用は今、フラッター重いヘッドを開発することはできません。その後、プログラムはどのようにナイジェリアを達成するには?
図1に示すように、モジュールは、粗動導入
ネイティブプログラムのルートディレクトリに第1のスイッチ。一例として、著者のプロジェクトでは、パスはDです:\ FlutterHybrid \ FlutterHybridAndroid、コマンドCDが親ディレクトリに切り替える../。そして、フラッターモジュールを作成するには、次のコマンドを実行します。

    flutter create -t module flutter_module

私たちが作成したモジュール名の上に舞うFlutter_module。

フラッターモジュールが正常に作成されたとき、私たちは、次の手順を使用して、モジュールをインポートする必要があります。

1.まず、settings.gradleファイルに次のコードを追加します。

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

アンドロイドスタジオに示されるように完了した後、フラッタのモジュールを参照することが可能です。
フラッターは、Androidとの複合用途開発を見ています
モジュールフラッタを正しく表示することができた後2.次に、我々は、実装プロジェクトを必要とする:インポートモジュール(「フラッターを」)。追加されましたが、成功したプロジェクトをコンパイルした後に開始した、この時間は、次のようなエラーが発生することがあります。
フラッターは、Androidとの複合用途開発を見ています
これは、私たちが本来のプロジェクトがminSdkVersionがフラッターモジュールより小さくすることはできません、ということに注意する必要がありminSdkVersionがあります。溶液は、天然minSdkVersionがプロジェクトの値は、粗動モジュールminSdkVersionがより大きい値に変更されています。
あなたはネイティブプログラムを実行することができますので、上記の二つのステップの後、ネイティブのプロジェクトが成功し、今回のフラッターモジュールをインポートされます。ネイティブプログラムを実行するときに、まだ次のエラーが発生することがあります。
フラッターは、Androidとの複合用途開発を見ています

問題はどのようにナイジェリアを解決するには?実際には、図の下に解決策を与えてきた、それはネイティブのプロジェクトは、Java 8を使用する必要があり、さもなければ実行することではありません。だから我々は、アプリケーションディレクトリに次のコードbuild.gradleファイルを追加する必要があります。

    android {
        compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
    }

その後、ネイティブプロジェクトを実行し続け、この時間は、デバイス上に実行することができますが、どのようにAPK Riniにパッケージ化そのフラッタ・モジュールを検証するために?今回は、それは、Android StudioのAPK分析ツールを利用することができます。このツールはAPKパッケージで見つけることができます以下で構成されています。
フラッターは、Androidとの複合用途開発を見ています
このプロジェクトにフラッタネイティブなコードを格納しているFlutter_assetsはフラッターモジュールの導入に成功しています。

注意:果物のプロジェクトでAndroidXを使用すると、非常に深刻な互換性の問題につながる場合。プロジェクトはAndroidXを使用するのであれば、フラッターモジュールをインポートするように注意する必要があります。私たちはインポートしたい場合は、正式な申し出を舞う--AndroidX互換性ソリューションを読みに行くことができます。

2、native项目加载flutter页面
经过前面的一些操作,我们就在Native项目中成功依赖了flutter模块,那么下面学习如何在Native项目中加载flutter页面。通过查看flutter模块代码可以发现,该模块提供了以下两种方式来加载flutter页面。

1.将flutter页面构建成View,通过addView来显示flutter页面
2.将flutter页面构建成Fragment,通过对fragment的操作来显示flutter页面

2.1、将flutter页面构建成View
在flutter模块的Flutter类中给我们提供了一个方法——createView。通过该方法,我们可以将flutter页面构建成一个View。而View的相关操作想必对于Android开发者来说都不陌生,所以就通过addView将flutter页面添加到相应的地方。实现代码如下:

    public void onLoadFlutter(View view) {
        View flutterView = Flutter.createView(this, getLifecycle(), "route1");
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(600, 600);
        layoutParams.topMargin = 100;
        addContentView(flutterView, layoutParams);
    }

2.2、将flutter页面构建成fragment
同样,flutter模块也提供了方法——createFragment,通过该方法就将flutter页面构建成一个fragment,然后根据fragment的操作将flutter页面添加到相应的地方。实现代码如下:

    public void onLoadFlutter(View view) {
       FragmentTransaction transaction= getSupportFragmentManager().beginTransaction();
       transaction.replace(R.id.someContainer,Flutter.createFragment("这里是flutter页面"));
       transaction.commit();
    }

2.3、flutter页面
在前面讲述了如何在native项目中加载flutter页面,下面就来看一下flutter页面的代码。代码还使很简单的,基本的都是创建module时自动生成的代码。

import 'package:flutter/material.dart';
import 'dart:ui';

void main() => runApp(MyApp(
      initParams: window.defaultRouteName,
    ));

class MyApp extends StatelessWidget {
  final String initParams;

  MyApp({Key key, @required this.initParams}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(
        title: 'Flutter Demo Home Page',
        initParams: initParams,
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String initParams;

  MyHomePage({Key key, this.title, this.initParams}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState(initParams);
}

class _MyHomePageState extends State<MyHomePage> {
  final String initParams;

  _MyHomePageState(this.initParams);

  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'initParams:$initParams',
              style: TextStyle(color: Colors.red),
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

上記のコードでは、私たちが実際にルート名で初期化プロパティを渡すが、実際には、我々が合格していた、または他のタイプのデータをJSONので、いくつかの他の操作を行うことができます。実際には、これは、天然およびフラッタの間の通信として見ることができます。
図3は、デバッグフラッターモジュール
3.1は、熱過負荷フラッタブロック
開発プロセス内の1つのフラッタ利点後は、しかし、粗動モジュールコードの変更を見つける上記のコードを実行することにより、熱的過負荷機能によって迅速な試運転を達成することができますすぐに効果を取ることができない、あなたを有効にするには、ネイティブを再梱包する必要があります。だから、デバッグ効率を低下させ、主な利点の故障のフラッターをしましょう。だから我々は、ネパール熱過負荷にハイブリッドプロジェクトでフラッタモジュールを行うことはできませんか?実際には、それも可能ですが、いくつかの段階を通過する必要があります。
アプリケーションを終了するアプリケーションではなく、現在のプロセスを強制終了するには:1.まず、現在のアプリケーション、ノートを閉じます。

2.第二に、アタッチフラッタフラッタ入力コマンドモジュールに、次のように表示され

フラッターは、Androidとの複合用途開発を見ています

3.最後に、もう一度アプリケーションを開いて、次があるでしょう。
注意してください、この通路フィギュア

おすすめ

転載: blog.51cto.com/14295695/2410072