【问题标题】:Fetch arguments in Flutter module在 Flutter 模块中获取参数
【发布时间】:2021-04-23 02:59:49
【问题描述】:

我有一个原生 Android 应用。我导入了一个 Flutter 模块。现在,我可以从我的 Android 应用程序成功导航到所选路线。我知道在本机和颤振端之间传递数据是通过方法通道。但是启动Activity的时候不明白怎么实现。

这是我的GitHub repo

startActivity(
         new FlutterActivity.NewEngineIntentBuilder(MyFlutterActivity.class)
                   .initialRoute("/secondScreen")
                   .build(getApplicationContext())
                   .putExtra("title", "Hello")); // Here, title is passed!

如何在我的initStatesecondScreen 上处理这个标题?

class SecondScreen extends StatefulWidget {
  SecondScreen({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _SecondScreenState createState() => _SecondScreenState();
}

class _SecondScreenState extends State<SecondScreen> {
  @override
  void initState() {
    super.initState();
    print("title");
    print(widget.title); // Ofc, it is null. I want it as 'Hello'!
  }

【问题讨论】:

  • Here 是一篇关于原生和 Flutter 组件之间通信的文章。

标签: java android flutter flutter-method-channel


【解决方案1】:

现在,我找到了一种方法。我相信还有比这更好的方法。首先,我将覆盖MyFlutterActivity 类的onCreate 方法。然后在全局变量中设置参数。

String title = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle extras = getIntent().getExtras();

    title = extras.getString("title");
}

@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);

    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(((methodCall, result) -> {
        if (methodCall.method.equals("getBatteryLevel")) {

            result.success("batteryLevel"); // It returns string "batteryLevel".

        } else if (methodCall.method.equals("getTitle")) {

            result.success(title); // It returns string "Hello".

        } else {
            result.notImplemented();
        }
    }));
  }

现在,我可以调用 SecondScreeninitState 中的方法来获取完全从原生端传递的标题。

  var title = await platformMethodChannel.invokeMethod('getTitle');

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多