File tree Expand file tree Collapse file tree 11 files changed +84
-3
lines changed Expand file tree Collapse file tree 11 files changed +84
-3
lines changed Original file line number Diff line number Diff line change 1
- 3f715bff32baf5101070f62afcbad897
1
+ d77992cc63302afcaf57acfc9766cb4c
Original file line number Diff line number Diff line change 1
1
PODS:
2
2
- d_stack (0.0.1):
3
3
- Flutter
4
+ - d_stack_spy (0.0.1):
5
+ - Flutter
4
6
- Flutter (1.0.0)
5
7
6
8
DEPENDENCIES:
7
9
- d_stack (from `.symlinks/plugins/d_stack/ios`)
10
+ - d_stack_spy (from `.symlinks/plugins/d_stack_spy/ios`)
8
11
- Flutter (from `Flutter`)
9
12
10
13
EXTERNAL SOURCES:
11
14
d_stack:
12
15
:path: ".symlinks/plugins/d_stack/ios"
16
+ d_stack_spy:
17
+ :path: ".symlinks/plugins/d_stack_spy/ios"
13
18
Flutter:
14
19
:path: Flutter
15
20
16
21
SPEC CHECKSUMS:
17
22
d_stack: 218a394e5759f06ed1f1aacbeea9c78314bdcfd6
23
+ d_stack_spy: 6894898f3f681296224a57a6419e9e361fee19f7
18
24
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
19
25
20
26
PODFILE CHECKSUM: 9d0ac94d3d11f2290fe3fb976f070609fc82675b
Original file line number Diff line number Diff line change @@ -57,6 +57,13 @@ packages:
57
57
relative: true
58
58
source: path
59
59
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"
60
67
fake_async:
61
68
dependency: transitive
62
69
description:
@@ -158,4 +165,4 @@ packages:
158
165
version: "2.1.0-nullsafety.3"
159
166
sdks:
160
167
dart: ">=2.10.0-110 <2.11.0"
161
- flutter: ">=1.17 .0"
168
+ flutter: ">=1.20.0 <2.0 .0"
Original file line number Diff line number Diff line change @@ -374,6 +374,33 @@ - (void)sendPageLifeCicleToFlutterWithAppearNode:(DNode *)appear
374
374
375
375
#pragma mark -- private
376
376
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
+
377
404
- (DNode *)nodeWithTarget : (NSString *)target
378
405
{
379
406
DNode *targetNode = nil ;
@@ -469,6 +496,7 @@ - (void)cleanLogFile
469
496
470
497
- (void )writeLogWithNode : (DNode *)node
471
498
{
499
+ [self operationNode: node];
472
500
dispatch_async (self.logQueue , ^{
473
501
if (!self.logPath || !node) { return ;}
474
502
NSString *target = node.target ;
Original file line number Diff line number Diff line change @@ -267,6 +267,10 @@ NS_ASSUME_NONNULL_BEGIN
267
267
// / @param nodes 出栈节点列表
268
268
- (void )dStack : (DStack *)stack outStack : (NSArray <DStackNode *>*)nodes ;
269
269
270
+ // / 用户操作的所有行为都将会从这个api传出,可以基于此做行为回放
271
+ // / 将要进行操作的节点
272
+ - (void )operationNode : (DStackNode *)node ;
273
+
270
274
// / 节点显示与消失
271
275
// / @param stack stack
272
276
// / @param appear 正在显示的node
Original file line number Diff line number Diff line change @@ -16,6 +16,8 @@ UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendActionToFlutte
16
16
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendRemoveFlutterPageNode; // flutter发送移除节点的指令到native
17
17
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendLifeCircle; // 生命周期通道
18
18
UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendNodeList; // 节点列表
19
+ UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendFlutterRootNode; // 设置flutter根节点
20
+ UIKIT_EXTERN DStackMethodChannelName const DStackMethodChannelSendOperationNodeToFlutter; // Operation节点
19
21
20
22
@interface DStackPlugin : NSObject <FlutterPlugin>
21
23
Original file line number Diff line number Diff line change 14
14
DStackMethodChannelName const DStackMethodChannelSendRemoveFlutterPageNode = @" sendRemoveFlutterPageNode" ;
15
15
DStackMethodChannelName const DStackMethodChannelSendLifeCircle = @" sendLifeCycle" ;
16
16
DStackMethodChannelName const DStackMethodChannelSendNodeList = @" sendNodeList" ;
17
+ DStackMethodChannelName const DStackMethodChannelSendFlutterRootNode = @" sendFlutterRootNode" ;
18
+ DStackMethodChannelName const DStackMethodChannelSendOperationNodeToFlutter = @" sendOperationNodeToFlutter" ;
17
19
18
20
19
21
@interface DStackPlugin ()
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ import 'dart:async';
11
11
12
12
import 'package:d_stack/constant/constant_config.dart' ;
13
13
import 'package:d_stack/navigator/dnavigator_manager.dart' ;
14
+ import 'package:d_stack/observer/d_node_observer.dart' ;
14
15
import 'package:d_stack/observer/life_cycle_observer.dart' ;
15
16
import 'package:flutter/services.dart' ;
16
17
@@ -27,6 +28,8 @@ class DChannel {
27
28
return DNavigatorManager .handleActionToFlutter (call.arguments);
28
29
} else if (DStackConstant .lifeCycle == call.method) {
29
30
return LifeCycleHandler .handleLifecycleMessage (call.arguments);
31
+ } else if (DStackConstant .sendOperationNodeToFlutter == call.method) {
32
+ return DNodeObserverHandler .handlerNodeMessage (call.arguments);
30
33
}
31
34
return Future .value ();
32
35
});
Original file line number Diff line number Diff line change @@ -24,6 +24,8 @@ class DStackConstant {
24
24
static const String checkRemoved = "sendRemoveFlutterPageNode" ;
25
25
static const String lifeCycle = "sendLifeCycle" ;
26
26
static const String nodeList = "sendNodeList" ;
27
+ static const String sendFlutterRootNode = "sendFlutterRootNode" ;
28
+ static const String sendOperationNodeToFlutter = 'sendOperationNodeToFlutter' ;
27
29
28
30
/// 其他标识
29
31
static const String nativeDidPopGesture = "nativeDidPopGesture" ;
Original file line number Diff line number Diff line change 10
10
import 'package:d_stack/channel/dchannel.dart' ;
11
11
import 'package:d_stack/navigator/dnavigator_gesture_observer.dart' ;
12
12
import 'package:d_stack/navigator/dnavigator_manager.dart' ;
13
+ import 'package:d_stack/observer/d_node_observer.dart' ;
13
14
import 'package:d_stack/observer/life_cycle_observer.dart' ;
14
15
import 'package:flutter/material.dart' ;
15
16
import 'package:flutter/services.dart' ;
@@ -53,6 +54,8 @@ class DStack {
53
54
54
55
/// 用来监听 应用生命周期
55
56
DLifeCycleObserver dLifeCycleObserver;
57
+ /// 用来监听节点操作
58
+ DNodeObserver dNodeObserver;
56
59
57
60
bool _hasHomePage = false ;
58
61
bool get hasHomePage => _hasHomePage;
@@ -68,11 +71,13 @@ class DStack {
68
71
/// observer 生命周期监听者
69
72
void register (
70
73
{Map <String , DStackWidgetBuilder > builders,
71
- DLifeCycleObserver observer}) {
74
+ DLifeCycleObserver observer,
75
+ DNodeObserver nodeObserver}) {
72
76
if (builders? .isNotEmpty == true ) {
73
77
_pageBuilders.addAll (builders);
74
78
}
75
79
dLifeCycleObserver = observer;
80
+ dNodeObserver = nodeObserver;
76
81
}
77
82
78
83
/// 获取一个 DStackWidgetBuilder
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments