flutter_addtoapp_bridge 0.0.1-dev.4 flutter_addtoapp_bridge: ^0.0.1-dev.4 copied to clipboard
flutter addtoapp bridge for flutter call android/ios. so code in flutter page can open native page by this bridge.
flutter_addtoapp_bridge #
flutter addtoapp bridge for flutter call android/ios.
Usage(flutter call android/ios) #
flutter_addtoapp_bridge: ^0.0.1-dev.4
- dart
class _MyAppState extends State<MyApp> {
final _flutterAddtoappBridgePlugin = FlutterAddtoappBridge();
Future<void> initPlatformState() async {
try {
dynamic result = await _flutterAddtoappBridgePlugin.open("toast", "Hi, I am from flutter!");
if (kDebugMode) {
print("putPlatformValue result=$result");
}
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
}
}
- ios(objectivec)
pod install
#import <flutter_addtoapp_bridge/FlutterAddtoappBridgePlugin.h>
// write code in application AppDelegate
[FlutterAddtoappBridgePlugin setOnGlobalMethodCall:^(UIViewController *topmostViewController, FlutterMethodCall *call, FlutterResult result) {
NSLog(@"onCall topViewController=%@, method=%@, arguments=%@", topmostViewController, call.method, call.arguments);
if([@"callPlatform" isEqualToString:call.method]){
NSLog(@"onCall %@" ,[call.arguments class]);
NSArray *argumentsWithFunctionNameArray = (NSArray *)call.arguments;
NSString *functionName = [argumentsWithFunctionNameArray firstObject];
if([@"getPlatformVersion" isEqualToString:functionName]){
result([[UIDevice currentDevice] systemVersion]);
}else if([@"open" isEqualToString:functionName]){
NSArray *argumentsArray = (NSArray *)[argumentsWithFunctionNameArray objectAtIndex:1];
NSString *url = [argumentsArray firstObject];
NSLog(@"onCall open-> url==%@, arguments=%@", url, [argumentsArray objectAtIndex:1]);
if([@"toast" isEqualToString:url]){
[FlutterAddtoappBridgePlugin showToast:topmostViewController message:(NSString *)[argumentsArray objectAtIndex:1]];
result(@"0");
}else{
result([NSString stringWithFormat:@"-2 %@ is not support", url]);
}
}else{
result([NSString stringWithFormat:@"-1 %@ is not support", functionName]);
}
NSLog(@"onCall %lu" ,(unsigned long)[argumentsWithFunctionNameArray count]);
}else{
result(FlutterMethodNotImplemented);
}
}];
- android(kotlin)
import com.codesdancing.flutter.addtoapp.bridge.FlutterAddtoappBridgePlugin;
// write code in application
FlutterAddtoappBridgePlugin.setOnGlobalMethodCall(object : FlutterAddtoappBridgePlugin.OnGlobalMethodCall {
override fun onCall(activity: Activity?, call: MethodCall, result: MethodChannel.Result) {
Log.d("onCall", "activity=${activity?.hashCode()}, method=${call.method}, arguments=${call.arguments}")
if (call.method == "callPlatform") {
val argumentsWithFunctionNameArray = call.arguments as? ArrayList<*>
when (val functionName = argumentsWithFunctionNameArray?.first()) {
"getPlatformVersion" -> result.success(android.os.Build.VERSION.RELEASE)
"open" -> {
val argumentsArray = argumentsWithFunctionNameArray.getOrNull(1) as? ArrayList<*>
Log.d("onCall", "open-> url=${argumentsArray?.getOrNull(0)}, arguments=${argumentsArray?.getOrNull(1) as? String ?: ""}}")
when (val url = argumentsArray?.getOrNull(0)) {
"toast" -> {
FlutterAddtoappBridgePlugin.showToast(activity, argumentsArray.getOrNull(1) as? String ?: "")
result.success("0")
}
else -> {
result.error("-2", "$url is not support", null)
}
}
}
else -> result.error("-1", "$functionName is not support", null)
}
} else {
result.notImplemented()
}
}
})
- Example About Use FlutterFragment in Activity
shouldAttachEngineToActivity(true) // must be true, or flutter plugin activiy is null
import io.flutter.embedding.android.FlutterFragment;
public class XXActivity extends AppCompatActivity {
private FlutterFragment flutterFragment = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxx);
flutterFragment = FlutterFragment.withCachedEngine("my_engine_id")
.shouldAttachEngineToActivity(true) // must be true, or flutter plugin activiy is null
.build();
FragmentPagerItemAdapter adapter = new FragmentPagerItemAdapter(
getSupportFragmentManager(), FragmentPagerItems.with(this)
.add(R.string.flutterHome, FlutterFragment.class)
.add(R.string.xxx, XXXOtherFragment.class)
.create()) {
@NonNull
@Override
public Fragment getItem(int position) {
if (position == 0) {
return flutterFragment;
}
return super.getItem(position);
}
};
}
@Override
public void onPostResume() {
super.onPostResume();
if (flutterFragment != null) flutterFragment.onPostResume();
}
@Override
protected void onNewIntent(@NonNull Intent intent) {
if (flutterFragment != null) flutterFragment.onNewIntent(intent);
}
@Override
public void onBackPressed() {
if (flutterFragment != null) flutterFragment.onBackPressed();
}
@Override
public void onRequestPermissionsResult(
int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults
) {
if (flutterFragment != null) flutterFragment.onRequestPermissionsResult(
requestCode,
permissions,
grantResults
);
}
@Override
public void onUserLeaveHint() {
if (flutterFragment != null) flutterFragment.onUserLeaveHint();
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
if (flutterFragment != null) flutterFragment.onTrimMemory(level);
}
}