আমি আমার বিদ্যমান অ্যান্ড্রয়েড অ্যাপে কীভাবে কোনও ঝাঁকুনির UI যুক্ত করতে পারি তা জানার চেষ্টা করে দিন কাটিয়েছি। সবচেয়ে বড় চ্যালেঞ্জটি ছিল মেথাক্যানেলটি ফ্লুটারএকটিভিটির সাথে মেইনএ্যাকটিভিটি থেকে কল করা নিয়ে কাজ করা। আমি জানি এখানে জিজ্ঞাসা করা প্রশ্নের তুলনায় এটি কিছুটা আলাদা, তবে আমি যখন 'অ্যান্ড্রয়েড ফ্লিটারঅ্যাক্টিভিটি মেথডচ্যানেল' অনুসন্ধান করেছিলাম তখন এই পোস্টটি ফিরে আসে। এটি করার জন্য অনেক সংস্থান থাকলেও শেষ পর্যন্ত আমি আমার সমাধান এখানে পেয়েছি:
https://github.com/flutter/sample/tree/master/add_to_app/android_ using_plugin app src main java dev flutter/ উদাহরণস্বরূপ / androidusingplugin
প্রাথমিকভাবে, অ্যান্ড্রয়েড স্টুডিওতে বিদ্যমান অ্যাপ্লিকেশনটি খোলার সাথে সাথে আমি ফাইল, নতুন, নতুন মডিউল, ফ্লার্ট মডিউলটি ট্যাপ করেছি app আমি একটি ত্রুটি পেয়েছি এবং ম্যানুয়াল পদক্ষেপগুলি সম্পাদন করতে হয়েছিল।
আমার উদ্দেশ্য হ'ল ফ্লাটারএকটিভিটি চালু করুন (মেইনঅ্যাক্টিভিটিতে ফ্লাটার_মডিউলে মেইন.ডার্ট খুলবে) - অনক্রিট, তারপরে মেথডচ্যানেলটি ব্যবহার করে সীমিত প্ল্যাটফর্ম কলগুলি দিয়ে যতটা সম্ভব নেটিভ ফ্লটার কোড ব্যবহার করে ফ্লাটার 'স্ক্রিনগুলি' বিকাশ করুন। আমি প্রতিস্থাপন ফ্লটার কোডটি বিকাশ করার সাথে সাথে আমি বিদ্যমান অ্যান্ড্রয়েড কোডটির বিষয়ে মন্তব্য করা চালিয়ে যাব।
অবশেষে আমার জন্য যা কাজ করেছে তা এখানে:
../App_Project/Android/Existing_Android_App/settings.gradle
include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(settingsDir.parentFile, '../flutter_module/.android/include_flutter.groovy'))
include ':flutter_module’
project(':flutter_module’).projectDir = new File('../../flutter_module’)
rootProject.name=‘existing_android_app’
../App_Project/Android/Existing_Android_App/app/build.gradle
dependencies {
…
implementation project(':flutter')
}
../App_Project/Android/Existing_Android_App/app/src/main/AndroidManifest.xml
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize" />
../App_Project/Android/Existing_Android_App/app/src/main/java/com/existing_android_app/MainActivity.java
package com.existing_android_app;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterEngineCache;
import io.flutter.embedding.engine.dart.DartExecutor;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
public class MainActivity extends AppCompatActivity {
final String ENGINE_ID = "1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FlutterEngine flutterEngine = new FlutterEngine(this);
flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
FlutterEngineCache.getInstance().put(ENGINE_ID, flutterEngine);
MethodChannel channel = new MethodChannel(flutterEngine.getDartExecutor(), "com.existing_android_app/myMethodChannel");
channel.setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
String url = call.argument("url");
if (call.method.equals("openBrowser")) {
openBrowser(url);
}
else {
result.notImplemented();
}
}
});
startActivity(FlutterActivity.withCachedEngine(ENGINE_ID).build(this));
}
void openBrowser(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
this.startActivity(intent);
}
}
../App_Project/flutter_module/lib/home_page.dart
class AppHomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<AppHomePage> {
static const platform = const MethodChannel(‘com.existing_android_app/myMethodChannel’);
Future<void> _openBrowser() async {
try {
final int result = await platform.invokeMethod('openBrowser', <String, String> { 'url': "http://bing.com” });
}
catch (e) {
print('***** _openBrowser error: ' + e.toString());
}
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: CustomAppBar(),
body: Column(
children: <Widget>[
RaisedButton(
label: Text('Search',
style: TextStyle(fontSize: 18.0),
),
onPressed: () { _openBrowser(); },
) // RaisedButton.icon
], // Widget
) // Column
) // Scaffold
); // SafeArea
}