flutter_boost icon indicating copy to clipboard operation
flutter_boost copied to clipboard

如何在flutter的main函数中获取到native传过来的args

Open ljx697 opened this issue 2 years ago • 7 comments

我使用了以下方法,在setup时候 传递参数,想在flutter的main函数接收,但是没有效果 android代码:

   String[]  shellArgs ={"--model","debug"};
        FlutterBoostSetupOptions options  = new FlutterBoostSetupOptions.Builder().shellArgs(shellArgs).build();
  FlutterBoost.instance().setup(mApplication, new FlutterBoostDelegate() {
                    @Override
                    public void pushNativeRoute(FlutterBoostRouteOptions options) {
                    }

                    @Override
                    public void pushFlutterRoute(FlutterBoostRouteOptions options) {
                    }
                }, engine -> {
                    Logger.i(TAG, "init: FlutterBoost end");
                },options);

flutter代码:

void main(List<String> args) {
      Log.global().i("[Flutter main]flutter args1 is:", args.toString());
  };

请问这种方式能实现吗?或者有其方式解决这个问题吗?

ljx697 avatar Oct 12 '22 05:10 ljx697

public void executeDartEntrypoint( @NonNull DartEntrypoint dartEntrypoint, @Nullable List<String> dartEntrypointArgs) { if (isApplicationRunning) { Log.w(TAG, "Attempted to run a DartExecutor that is already running."); return; }

TraceSection.begin("DartExecutor#executeDartEntrypoint");
try {
  Log.v(TAG, "Executing Dart entrypoint: " + dartEntrypoint);
  flutterJNI.runBundleAndSnapshotFromLibrary(
      dartEntrypoint.pathToBundle,
      dartEntrypoint.dartEntrypointFunctionName,
      dartEntrypoint.dartEntrypointLibrary,
      assetManager,
      dartEntrypointArgs);

  isApplicationRunning = true;
} finally {
  TraceSection.end();
}

}

已解决,dartEntrypointArgs 这个值是传到fluttermain函数的 参数,需要在engine赋值的时候给值 在flutterBoost类修改, 代码如下:

  if (!engine.getDartExecutor().isExecutingDart()) {
            // Pre-warm the cached FlutterEngine.
            engine.getNavigationChannel().setInitialRoute(options.initialRoute());
            ArrayList<String> objects = new ArrayList<>();
            objects.add("--model");
            objects.add("debug");
            engine.getDartExecutor().executeDartEntrypoint(new DartExecutor.DartEntrypoint(
                    FlutterMain.findAppBundlePath(), options.dartEntrypoint()),objects);
        }

ljx697 avatar Oct 12 '22 07:10 ljx697

大佬 ,iOS 怎么传递

lanyuzx avatar Dec 28 '22 11:12 lanyuzx

大佬 ,iOS 怎么传递

` FlutterBoostSetupOptions *option = [[FlutterBoostSetupOptions alloc]init];

option.dartEntryPoint = @"main";
option.warmUpEngine = YES;



NSDictionary *initParams = @{


};

option.initalRoute = initParams.dictionaryToJson;

[[FlutterBoost instance] setup:application delegate:self callback:^(FlutterEngine *engine) {
} options:option];

`

Leon-ele avatar Jun 08 '23 12:06 Leon-ele

public void executeDartEntrypoint( @nonnull DartEntrypoint dartEntrypoint, @nullable List dartEntrypointArgs) { if (isApplicationRunning) { Log.w(TAG, "Attempted to run a DartExecutor that is already running."); return; }

TraceSection.begin("DartExecutor#executeDartEntrypoint");
try {
  Log.v(TAG, "Executing Dart entrypoint: " + dartEntrypoint);
  flutterJNI.runBundleAndSnapshotFromLibrary(
      dartEntrypoint.pathToBundle,
      dartEntrypoint.dartEntrypointFunctionName,
      dartEntrypoint.dartEntrypointLibrary,
      assetManager,
      dartEntrypointArgs);

  isApplicationRunning = true;
} finally {
  TraceSection.end();
}

}

已解决,dartEntrypointArgs 这个值是传到fluttermain函数的 参数,需要在engine赋值的时候给值 在flutterBoost类修改, 代码如下:

  if (!engine.getDartExecutor().isExecutingDart()) {
            // Pre-warm the cached FlutterEngine.
            engine.getNavigationChannel().setInitialRoute(options.initialRoute());
            ArrayList<String> objects = new ArrayList<>();
            objects.add("--model");
            objects.add("debug");
            engine.getDartExecutor().executeDartEntrypoint(new DartExecutor.DartEntrypoint(
                    FlutterMain.findAppBundlePath(), options.dartEntrypoint()),objects);
        }

这个是要修改 FlutterBoost 类,如果换了环境每次都要修改?

shortybin avatar Jun 14 '23 08:06 shortybin

更新到 4.3.0 版本,可以通过 dartEntrypointArgs 传递启动数据了

 //设置启动参数
 val options = FlutterBoostSetupOptions.Builder().dartEntrypointArgs(listOf(BuildConfig.BUILD_TYPE)).build()

 FlutterBoost.instance().setup(this, object : FlutterBoostDelegate {
        override fun pushNativeRoute(options: FlutterBoostRouteOptions) {
               
         }

        override fun pushFlutterRoute(options: FlutterBoostRouteOptions) {
                
        }
        }, { engine: FlutterEngine? -> }, options)
main(List<String> args) async {
  print("打印测试" + args.toString());
  runApp(MyApp());
}

shortybin avatar Jun 19 '23 10:06 shortybin

更新到 4.3.0 版本,可以通过 dartEntrypointArgs 传递启动数据了

 //设置启动参数
 val options = FlutterBoostSetupOptions.Builder().dartEntrypointArgs(listOf(BuildConfig.BUILD_TYPE)).build()

 FlutterBoost.instance().setup(this, object : FlutterBoostDelegate {
        override fun pushNativeRoute(options: FlutterBoostRouteOptions) {
               
         }

        override fun pushFlutterRoute(options: FlutterBoostRouteOptions) {
                
        }
        }, { engine: FlutterEngine? -> }, options)
main(List<String> args) async {
  print("打印测试" + args.toString());
  runApp(MyApp());
}

麻烦问下 ios 端如何修改?

RicoLiu avatar Aug 08 '24 03:08 RicoLiu

更新到 4.3.0 版本,可以通过 dartEntrypointArgs 传递启动数据了

 //设置启动参数
 val options = FlutterBoostSetupOptions.Builder().dartEntrypointArgs(listOf(BuildConfig.BUILD_TYPE)).build()

 FlutterBoost.instance().setup(this, object : FlutterBoostDelegate {
        override fun pushNativeRoute(options: FlutterBoostRouteOptions) {
               
         }

        override fun pushFlutterRoute(options: FlutterBoostRouteOptions) {
                
        }
        }, { engine: FlutterEngine? -> }, options)
main(List<String> args) async {
  print("打印测试" + args.toString());
  runApp(MyApp());
}

麻烦问下 ios 端如何修改?

我们的 iOS 端没用 Flutter,Android 我们自己尝试性的搞

shortybin avatar Aug 08 '24 03:08 shortybin