在 Flutter 模块中获取参数
Fetch arguments in Flutter module
我有一个原生 Android 应用程序。我导入了一个 Flutter 模块。现在,我可以从我的 Android 应用程序成功导航到所选路线。我知道在本机端和颤动端之间传递数据是通过方法通道进行的。但是在启动Activity.
的时候没看懂怎么实现
这是我的 GitHub repo.
startActivity(
new FlutterActivity.NewEngineIntentBuilder(MyFlutterActivity.class)
.initialRoute("/secondScreen")
.build(getApplicationContext())
.putExtra("title", "Hello")); // Here, title is passed!
如何在 secondScreen
的 initState
上处理这个标题?
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'!
}
现在,我找到了一个方法。我相信有比这更好的方法。首先,我将覆盖 MyFlutterActivity
class 的 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();
}
}));
}
现在,我可以调用我SecondScreen
的initState
中的方法来获取完全从原生端传递的标题。
var title = await platformMethodChannel.invokeMethod('getTitle');
我有一个原生 Android 应用程序。我导入了一个 Flutter 模块。现在,我可以从我的 Android 应用程序成功导航到所选路线。我知道在本机端和颤动端之间传递数据是通过方法通道进行的。但是在启动Activity.
的时候没看懂怎么实现这是我的 GitHub repo.
startActivity(
new FlutterActivity.NewEngineIntentBuilder(MyFlutterActivity.class)
.initialRoute("/secondScreen")
.build(getApplicationContext())
.putExtra("title", "Hello")); // Here, title is passed!
如何在 secondScreen
的 initState
上处理这个标题?
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'!
}
现在,我找到了一个方法。我相信有比这更好的方法。首先,我将覆盖 MyFlutterActivity
class 的 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();
}
}));
}
现在,我可以调用我SecondScreen
的initState
中的方法来获取完全从原生端传递的标题。
var title = await platformMethodChannel.invokeMethod('getTitle');