Skip to content

Commit cd76dea

Browse files
author
whqfor
committed
Merge branch 'spy' into refactor
# Conflicts: # ios/Classes/Stack/DStackPlugin.h # ios/Classes/Stack/DStackPlugin.m # lib/constant/constant_config.dart
2 parents 1c6dc44 + 40f136f commit cd76dea

File tree

11 files changed

+84
-3
lines changed

11 files changed

+84
-3
lines changed

example/ios/Flutter/.last_build_id

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3f715bff32baf5101070f62afcbad897
1+
d77992cc63302afcaf57acfc9766cb4c

example/ios/Podfile.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
PODS:
22
- d_stack (0.0.1):
33
- Flutter
4+
- d_stack_spy (0.0.1):
5+
- Flutter
46
- Flutter (1.0.0)
57

68
DEPENDENCIES:
79
- d_stack (from `.symlinks/plugins/d_stack/ios`)
10+
- d_stack_spy (from `.symlinks/plugins/d_stack_spy/ios`)
811
- Flutter (from `Flutter`)
912

1013
EXTERNAL SOURCES:
1114
d_stack:
1215
:path: ".symlinks/plugins/d_stack/ios"
16+
d_stack_spy:
17+
:path: ".symlinks/plugins/d_stack_spy/ios"
1318
Flutter:
1419
:path: Flutter
1520

1621
SPEC CHECKSUMS:
1722
d_stack: 218a394e5759f06ed1f1aacbeea9c78314bdcfd6
23+
d_stack_spy: 6894898f3f681296224a57a6419e9e361fee19f7
1824
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
1925

2026
PODFILE CHECKSUM: 9d0ac94d3d11f2290fe3fb976f070609fc82675b

example/pubspec.lock

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ packages:
5757
relative: true
5858
source: path
5959
version: "1.2.8+4"
60+
d_stack_spy:
61+
dependency: "direct dev"
62+
description:
63+
path: "../../d_stack_spy"
64+
relative: true
65+
source: path
66+
version: "0.0.1"
6067
fake_async:
6168
dependency: transitive
6269
description:
@@ -158,4 +165,4 @@ packages:
158165
version: "2.1.0-nullsafety.3"
159166
sdks:
160167
dart: ">=2.10.0-110 <2.11.0"
161-
flutter: ">=1.17.0"
168+
flutter: ">=1.20.0 <2.0.0"

ios/Classes/Node/DNodeManager.m

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,33 @@ - (void)sendPageLifeCicleToFlutterWithAppearNode:(DNode *)appear
374374

375375
#pragma mark -- private
376376

377+
- (void)operationNode:(DNode *)node {
378+
379+
// 发送给flutter侧
380+
NSDictionary *params;
381+
if (node.target) {
382+
params = @{
383+
@"action": node.actionTypeString,
384+
@"pageType": node.pageTypeString,
385+
@"target": node.target,
386+
@"params": node.params,
387+
@"homePage": @(node.isFlutterHomePage),
388+
@"boundary": @(node.boundary),
389+
@"animated": @(node.animated),
390+
};
391+
} else {
392+
params = @{};
393+
}
394+
395+
[[DStackPlugin sharedInstance] invokeMethod:DStackMethodChannelSendOperationNodeToFlutter
396+
arguments:params
397+
result:nil];
398+
// 发送调给native侧
399+
[self dStackDelegateSafeWithSEL:@selector(operationNode:) exe:^(DStack *stack) {
400+
[stack.delegate operationNode:[node copy]];
401+
}];
402+
}
403+
377404
- (DNode *)nodeWithTarget:(NSString *)target
378405
{
379406
DNode *targetNode = nil;
@@ -469,6 +496,7 @@ - (void)cleanLogFile
469496

470497
- (void)writeLogWithNode:(DNode *)node
471498
{
499+
[self operationNode:node];
472500
dispatch_async(self.logQueue, ^{
473501
if (!self.logPath || !node) { return;}
474502
NSString *target = node.target;

ios/Classes/Stack/DStack.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,10 @@ NS_ASSUME_NONNULL_BEGIN
267267
/// @param nodes 出栈节点列表
268268
- (void)dStack:(DStack *)stack outStack:(NSArray <DStackNode *>*)nodes;
269269

270+
/// 用户操作的所有行为都将会从这个api传出,可以基于此做行为回放
271+
/// 将要进行操作的节点
272+
- (void)operationNode:(DStackNode *)node;
273+
270274
/// 节点显示与消失
271275
/// @param stack stack
272276
/// @param appear 正在显示的node

ios/Classes/Stack/DStackPlugin.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendActionToFlutte
1616
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendRemoveFlutterPageNode; // flutter发送移除节点的指令到native
1717
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendLifeCircle; // 生命周期通道
1818
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendNodeList; // 节点列表
19+
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendFlutterRootNode; // 设置flutter根节点
20+
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendOperationNodeToFlutter; // Operation节点
1921

2022
@interface DStackPlugin : NSObject<FlutterPlugin>
2123

ios/Classes/Stack/DStackPlugin.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
DStackMethodChannelName const DStackMethodChannelSendRemoveFlutterPageNode = @"sendRemoveFlutterPageNode";
1515
DStackMethodChannelName const DStackMethodChannelSendLifeCircle = @"sendLifeCycle";
1616
DStackMethodChannelName const DStackMethodChannelSendNodeList = @"sendNodeList";
17+
DStackMethodChannelName const DStackMethodChannelSendFlutterRootNode = @"sendFlutterRootNode";
18+
DStackMethodChannelName const DStackMethodChannelSendOperationNodeToFlutter = @"sendOperationNodeToFlutter";
1719

1820

1921
@interface DStackPlugin ()

lib/channel/dchannel.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'dart:async';
1111

1212
import 'package:d_stack/constant/constant_config.dart';
1313
import 'package:d_stack/navigator/dnavigator_manager.dart';
14+
import 'package:d_stack/observer/d_node_observer.dart';
1415
import 'package:d_stack/observer/life_cycle_observer.dart';
1516
import 'package:flutter/services.dart';
1617

@@ -27,6 +28,8 @@ class DChannel {
2728
return DNavigatorManager.handleActionToFlutter(call.arguments);
2829
} else if (DStackConstant.lifeCycle == call.method) {
2930
return LifeCycleHandler.handleLifecycleMessage(call.arguments);
31+
} else if (DStackConstant.sendOperationNodeToFlutter == call.method) {
32+
return DNodeObserverHandler.handlerNodeMessage(call.arguments);
3033
}
3134
return Future.value();
3235
});

lib/constant/constant_config.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class DStackConstant {
2424
static const String checkRemoved = "sendRemoveFlutterPageNode";
2525
static const String lifeCycle = "sendLifeCycle";
2626
static const String nodeList = "sendNodeList";
27+
static const String sendFlutterRootNode = "sendFlutterRootNode";
28+
static const String sendOperationNodeToFlutter = 'sendOperationNodeToFlutter';
2729

2830
/// 其他标识
2931
static const String nativeDidPopGesture = "nativeDidPopGesture";

lib/d_stack.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import 'package:d_stack/channel/dchannel.dart';
1111
import 'package:d_stack/navigator/dnavigator_gesture_observer.dart';
1212
import 'package:d_stack/navigator/dnavigator_manager.dart';
13+
import 'package:d_stack/observer/d_node_observer.dart';
1314
import 'package:d_stack/observer/life_cycle_observer.dart';
1415
import 'package:flutter/material.dart';
1516
import 'package:flutter/services.dart';
@@ -53,6 +54,8 @@ class DStack {
5354

5455
/// 用来监听 应用生命周期
5556
DLifeCycleObserver dLifeCycleObserver;
57+
/// 用来监听节点操作
58+
DNodeObserver dNodeObserver;
5659

5760
bool _hasHomePage = false;
5861
bool get hasHomePage => _hasHomePage;
@@ -68,11 +71,13 @@ class DStack {
6871
/// observer 生命周期监听者
6972
void register(
7073
{Map<String, DStackWidgetBuilder> builders,
71-
DLifeCycleObserver observer}) {
74+
DLifeCycleObserver observer,
75+
DNodeObserver nodeObserver}) {
7276
if (builders?.isNotEmpty == true) {
7377
_pageBuilders.addAll(builders);
7478
}
7579
dLifeCycleObserver = observer;
80+
dNodeObserver = nodeObserver;
7681
}
7782

7883
/// 获取一个 DStackWidgetBuilder

lib/observer/d_node_observer.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Created with Android Studio.
3+
* User: whqfor
4+
* Date: 12/5/20
5+
* Time: 6:04 PM
6+
* target: 监听节点的observer
7+
*/
8+
9+
import 'package:d_stack/d_stack.dart';
10+
11+
abstract class DNodeObserver {
12+
/// 用户操作的所有行为都将会从这个api传出,可以基于此做行为回放
13+
/// 将要进行操作的节点
14+
void operationNode(Map node);
15+
}
16+
17+
class DNodeObserverHandler {
18+
19+
static handlerNodeMessage(Map node) {
20+
DStack.instance.dNodeObserver?.operationNode(node);
21+
}
22+
}

0 commit comments

Comments
 (0)