react-native-navigation的迁移库

Screen.js 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import React, {Component} from 'react';
  2. import {
  3. NativeAppEventEmitter,
  4. DeviceEventEmitter,
  5. Platform
  6. } from 'react-native';
  7. import platformSpecific from './platformSpecificDeprecated';
  8. import Navigation from './Navigation';
  9. const _allNavigatorEventHandlers = {};
  10. class Navigator {
  11. constructor(navigatorID, navigatorEventID) {
  12. this.navigatorID = navigatorID;
  13. this.navigatorEventID = navigatorEventID;
  14. this.navigatorEventHandler = null;
  15. this.navigatorEventSubscription = null;
  16. }
  17. push(params = {}) {
  18. return platformSpecific.navigatorPush(this, params);
  19. }
  20. pop(params = {}) {
  21. return platformSpecific.navigatorPop(this, params);
  22. }
  23. popToRoot(params = {}) {
  24. return platformSpecific.navigatorPopToRoot(this, params);
  25. }
  26. resetTo(params = {}) {
  27. return platformSpecific.navigatorResetTo(this, params);
  28. }
  29. showModal(params = {}) {
  30. return Navigation.showModal(params);
  31. }
  32. dismissModal(params = {}) {
  33. return Navigation.dismissModal(params);
  34. }
  35. dismissAllModals(params = {}) {
  36. return Navigation.dismissAllModals(params);
  37. }
  38. showLightBox(params = {}) {
  39. return Navigation.showLightBox(params);
  40. }
  41. dismissLightBox(params = {}) {
  42. return Navigation.dismissLightBox(params);
  43. }
  44. showInAppNotification(params = {}) {
  45. return Navigation.showInAppNotification(params);
  46. }
  47. dismissInAppNotification(params = {}) {
  48. return Navigation.dismissInAppNotification(params);
  49. }
  50. setButtons(params = {}) {
  51. return platformSpecific.navigatorSetButtons(this, this.navigatorEventID, params);
  52. }
  53. setTitle(params = {}) {
  54. return platformSpecific.navigatorSetTitle(this, params);
  55. }
  56. setTitleImage(params = {}) {
  57. return platformSpecific.navigatorSetTitleImage(this, params);
  58. }
  59. toggleDrawer(params = {}) {
  60. return platformSpecific.navigatorToggleDrawer(this, params);
  61. }
  62. toggleTabs(params = {}) {
  63. return platformSpecific.navigatorToggleTabs(this, params);
  64. }
  65. toggleNavBar(params = {}) {
  66. return platformSpecific.navigatorToggleNavBar(this, params);
  67. }
  68. setTabBadge(params = {}) {
  69. return platformSpecific.navigatorSetTabBadge(this, params);
  70. }
  71. switchToTab(params = {}) {
  72. return platformSpecific.navigatorSwitchToTab(this, params);
  73. }
  74. showFAB(params = {}) {
  75. return platformSpecific.showFAB(params);
  76. }
  77. setOnNavigatorEvent(callback) {
  78. this.navigatorEventHandler = callback;
  79. if (!this.navigatorEventSubscription) {
  80. let Emitter = Platform.OS === 'android' ? DeviceEventEmitter : NativeAppEventEmitter;
  81. this.navigatorEventSubscription = Emitter.addListener(this.navigatorEventID, (event) => this.onNavigatorEvent(event));
  82. _allNavigatorEventHandlers[this.navigatorEventID] = (event) => this.onNavigatorEvent(event);
  83. }
  84. }
  85. handleDeepLink(params = {}) {
  86. if (!params.link) return;
  87. const event = {
  88. type: 'DeepLink',
  89. link: params.link
  90. };
  91. for (let i in _allNavigatorEventHandlers) {
  92. _allNavigatorEventHandlers[i](event);
  93. }
  94. }
  95. onNavigatorEvent(event) {
  96. if (this.navigatorEventHandler) {
  97. this.navigatorEventHandler(event);
  98. }
  99. }
  100. cleanup() {
  101. if (this.navigatorEventSubscription) {
  102. this.navigatorEventSubscription.remove();
  103. delete _allNavigatorEventHandlers[this.navigatorEventID];
  104. }
  105. }
  106. }
  107. export default class Screen extends Component {
  108. static navigatorStyle = {};
  109. static navigatorButtons = {};
  110. constructor(props) {
  111. super(props);
  112. if (props.navigatorID) {
  113. this.navigator = new Navigator(props.navigatorID, props.navigatorEventID);
  114. }
  115. }
  116. componentWillUnmount() {
  117. if (this.navigator) {
  118. this.navigator.cleanup();
  119. this.navigator = undefined;
  120. }
  121. }
  122. }