react-native-navigation的迁移库

platformSpecific.android.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import React, {Component} from 'react';
  2. import {AppRegistry} from 'react-native';
  3. import Navigation from './Navigation';
  4. import utils from './utils';
  5. import {RctActivity} from 'react-native-navigation';
  6. const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');
  7. function startSingleScreenApp(params) {
  8. let screen = params.screen;
  9. if (!screen.screen) {
  10. console.error('startSingleScreenApp(params): screen must include a screen property');
  11. return;
  12. }
  13. addNavigatorParams(screen);
  14. addNavigatorButtons(screen);
  15. addNavigationStyleParams(screen);
  16. screen.passProps = params.passProps;
  17. RctActivity.startSingleScreenApp(screen);
  18. }
  19. function startTabBasedApp(params) {
  20. if (!params.tabs) {
  21. console.error('startTabBasedApp(params): params.tabs is required');
  22. return;
  23. }
  24. params.tabs.forEach(function(tab, idx) {
  25. addNavigatorParams(tab, null, idx);
  26. addNavigatorButtons(tab);
  27. addNavigationStyleParams(tab);
  28. if (tab.icon) {
  29. const icon = resolveAssetSource(tab.icon);
  30. if (icon) {
  31. tab.icon = icon.uri;
  32. }
  33. }
  34. tab.passProps = params.passProps;
  35. });
  36. RctActivity.startTabBasedApp(params.tabs, params.tabsStyle);
  37. }
  38. function navigatorPush(navigator, params) {
  39. addNavigatorParams(params, navigator);
  40. addNavigatorButtons(params);
  41. addNavigationStyleParams(params);
  42. RctActivity.navigatorPush(params);
  43. }
  44. function navigatorSetButtons(navigator, navigatorEventID, params) {
  45. if (params.rightButtons) {
  46. params.rightButtons.forEach(function(button) {
  47. if (button.icon) {
  48. const icon = resolveAssetSource(button.icon);
  49. if (icon) {
  50. button.icon = icon.uri;
  51. }
  52. }
  53. });
  54. }
  55. RctActivity.setNavigatorButtons(params);
  56. }
  57. function navigatorPop(navigator, params) {
  58. addNavigatorParams(params, navigator);
  59. RctActivity.navigatorPop(params);
  60. }
  61. function navigatorPopToRoot(navigator, params) {
  62. RctActivity.navigatorPopToRoot({
  63. navigatorID: navigator.navigatorID,
  64. animated: !(params.animated !== false)
  65. });
  66. }
  67. function navigatorResetTo(navigator, params) {
  68. addNavigatorParams(params, navigator);
  69. addNavigatorButtons(params);
  70. addNavigationStyleParams(params);
  71. RctActivity.navigatorResetTo(params);
  72. }
  73. function navigatorSetTitle(navigator, params) {
  74. RctActivity.setNavigatorTitle(params);
  75. }
  76. function navigatorSwitchToTab(navigator, params) {
  77. RctActivity.switchToTab({
  78. tabIndex: params.tabIndex
  79. });
  80. }
  81. function navigatorToggleTabs(navigator, params) {
  82. RctActivity.toggleNavigatorTabs({
  83. hidden: params.to == 'hidden',
  84. animated: !(params.animated === false)
  85. });
  86. }
  87. function showModal(params) {
  88. addNavigatorParams(params);
  89. addNavigatorButtons(params);
  90. addNavigationStyleParams(params);
  91. RctActivity.showModal(params);
  92. }
  93. function dismissModal() {
  94. RctActivity.dismissModal();
  95. }
  96. function dismissAllModals(params) {
  97. RctActivity.dismissAllModals(params.animationType);
  98. }
  99. function addNavigatorParams(screen, navigator = null, idx = '') {
  100. screen.navigatorID = navigator ? navigator.navigatorID : utils.getRandomId() + '_nav' + idx;
  101. screen.screenInstanceID = utils.getRandomId();
  102. screen.navigatorEventID = screen.screenInstanceID + '_events';
  103. }
  104. function addNavigatorButtons(screen) {
  105. const Screen = Navigation.getRegisteredScreen(screen.screen);
  106. Object.assign(screen, Screen.navigatorButtons);
  107. // Get image uri from image id
  108. const rightButtons = screen.rightButtons ? screen.rightButtons : screen.navigatorButtons ?
  109. screen.navigatorButtons.rightButtons : null;
  110. if (rightButtons) {
  111. rightButtons.forEach(function(button) {
  112. if (button.icon) {
  113. const icon = resolveAssetSource(button.icon);
  114. if (icon) {
  115. button.icon = icon.uri;
  116. }
  117. }
  118. });
  119. }
  120. }
  121. function addNavigationStyleParams(screen) {
  122. const Screen = Navigation.getRegisteredScreen(screen.screen);
  123. screen.navigatorStyle = Screen.navigatorStyle;
  124. }
  125. export default {
  126. startTabBasedApp,
  127. startSingleScreenApp,
  128. navigatorPush,
  129. navigatorPop,
  130. navigatorPopToRoot,
  131. navigatorResetTo,
  132. showModal,
  133. dismissModal,
  134. dismissAllModals,
  135. navigatorSetButtons,
  136. navigatorSetTitle,
  137. navigatorSwitchToTab,
  138. navigatorToggleTabs
  139. }