Flutter v1.0.0
原生跳到Flutter頁(yè)面路由的問(wèn)題,官方文檔也沒(méi)什么詳細(xì)教程,由于Flutter沒(méi)有方法可以傳遞參數(shù),所以現(xiàn)在只能依靠initialRoute的String來(lái)傳遞參數(shù)。
- 原生跳Flutter頁(yè)面路由傳參
可以在initialRoute添加參數(shù),例如:demo?{"id":112233},
然后Flutter端 runApp(_widgetForRoute(window.defaultRouteName)),window.defaultRouteName可以拿到這個(gè)字符串(demo?{"id":112233}),再路由并解析參數(shù)就可以了。
話不多說(shuō),直接代碼:
main.dart
import 'package:flutter/material.dart';
import 'dart:ui' as ui;
import './demo.dart';
void main() {
// debugPaintSizeEnabled=true;
runApp(new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: _widgetForRoute(ui.window.defaultRouteName),
));
}
Widget _widgetForRoute(String s) {
print("pageName=" + _getPageName(s) + ",ParamJson=" + _getPageParamJsonStr(s));
switch (_getPageName(s)) {
case "demo":
return new Demo();
}
return Home();
}
String _getPageName(String s) {
if (s.indexOf("?") == -1) {
return s;
} else {
return s.substring(0, s.indexOf("?"));
}
}
String _getPageParamJsonStr(String s) {
if (s.indexOf("?") == -1) {
return "{}";
} else {
return s.substring(s.indexOf("?") + 1);
}
}
Android端FlutterMainActivity
public class FlutterMainActivity extends FlutterActivity {
private String routeStr = "";
@Override
public FlutterView createFlutterView(Context context) {
WindowManager.LayoutParams matchParent = new WindowManager.LayoutParams(-1, -1);
FlutterNativeView nativeView = this.createFlutterNativeView();
FlutterView flutterView = new FlutterView(FlutterMainActivity.this, (AttributeSet) null, nativeView);
flutterView.setInitialRoute(routeStr);
flutterView.setLayoutParams(matchParent);
this.setContentView(flutterView);
return flutterView;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
routeStr = "demo?{\"id\":112233}";
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}
運(yùn)行結(jié)果:
flutter