handleActionToFlutter static method
2.处理Native发过来的指令 argument里包含必选参数routeName,actionType,可选参数params
Implementation
static Future? handleActionToFlutter(Map arguments) {
/// 处理实际跳转
DNodeEntity nodeEntity = DNodeEntity.fromJson(arguments);
debugPrint("【sendActionToFlutter】 \n"
"【arguments】${nodeEntity.toJson()} \n"
"【navigator】$_navigator ");
final String? action = nodeEntity.action;
switch (action) {
case DStackConstant.push:
continue Present;
Present:
case DStackConstant.present:
{
final DNode node = nodeEntity.nodeList.first;
final Map? params = node.params;
final bool? homePage = node.homePage;
final PageType? pageType = node.pageType;
final String? router = node.target;
if (homePage != null &&
homePage == true &&
node.boundary != null &&
node.boundary == true) {
_hasReplaceHomePage = true;
return replace(router, pageType,
homePage: homePage, animated: false, params: node.params);
} else {
PageRoute route;
bool? boundary = node.boundary;
if (boundary != null && boundary) {
/// 临界页面不开启动画
route = DNavigatorManager.materialRoute(
routeName: router,
params: params,
fullscreenDialog: action == DStackConstant.present,
pushAnimated: false,
);
} else {
route = DNavigatorManager.materialRoute(
routeName: router,
params: params,
fullscreenDialog: action == DStackConstant.present);
}
node.identifier = identifierWithRoute(route);
Map json = node.toJson();
DStack.instance.channel!.sendUpdateBoundaryNode(json);
return _navigator!.push(route);
}
}
break;
case DStackConstant.pop:
{
final DNode node = nodeEntity.nodeList.first;
return DNavigatorManager.gardPop(node.params, nodeEntity.animated);
}
break;
case DStackConstant.popTo:
continue PopSkip;
case DStackConstant.popToRoot:
continue PopSkip;
PopSkip:
case DStackConstant.popSkip:
{
Future? pop;
int length = nodeEntity.nodeList.length - 1;
for (int i = length; i >= 0; i--) {
final DNode node = nodeEntity.nodeList[i];
bool? _animated = i == length;
if (nodeEntity.animated == false) {
_animated = nodeEntity.animated;
}
pop = DNavigatorManager.gardPop(node.params, _animated);
}
return pop;
}
break;
case DStackConstant.dismiss:
{
final DNode node = nodeEntity.nodeList.first;
return DNavigatorManager.gardPop(node.params, nodeEntity.animated);
}
break;
case DStackConstant.gesture:
{
// native发消息过来时,需要处理返回至上一页
final DNode node = nodeEntity.nodeList.first;
DStackNavigatorObserver.instance!
.setGesturingRouteName(DStackConstant.nativeDidPopGesture);
return DNavigatorManager.gardPop(node.params);
}
break;
case DStackConstant.replace:
{
if (_hasReplaceHomePage) {
_hasReplaceHomePage = false;
final DNode node = nodeEntity.nodeList.first;
var route = DNavigatorManager.materialRoute(
routeName: node.target,
params: node.params,
pushAnimated: false);
return _navigator!.pushReplacement(route);
}
return Future.value(true);
}
break;
}
return null;
}