Возникли проблемы с обработчиком React-native-жеста (не удается найти символ Переполнение строки = (представление (ReactViewGroup)) .getOverflow ();) - PullRequest
1 голос
/ 13 апреля 2019

У меня проблема с react-native-gesture-handler. Всякий раз, когда я связываю свой react-native-gesture-handler с моим проектом, он перестает работать и показывает эту ошибку. Но после отсоединения react-native-gesture-handler от моего проекта приложение работает нормально. Но так как мне нужно перемещаться с нескольких экранов, мне нужен обработчик жестов.

Сначала я подумал, что это проблема react-native версии, так как я использовал react-native версию 0.57.0, но она также не работает на 0.58.0 и 0.55.4.

package com.swmansion.gesturehandler.react;

import android.os.Build;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.react.uimanager.PointerEvents;
import com.facebook.react.uimanager.ReactPointerEventsView;
import com.facebook.react.views.view.ReactViewGroup;
import com.swmansion.gesturehandler.PointerEventsConfig;
import com.swmansion.gesturehandler.ViewConfigurationHelper;

public class RNViewConfigurationHelper implements ViewConfigurationHelper {

  @Override
  public PointerEventsConfig getPointerEventsConfigForView(View view) {
    PointerEvents pointerEvents;
    pointerEvents = view instanceof ReactPointerEventsView ?
            ((ReactPointerEventsView) view).getPointerEvents() :
            PointerEvents.AUTO;

    // Views that are disabled should never be the target of pointer events. However, their children
    // can be because some views (SwipeRefreshLayout) use enabled but still have children that can
    // be valid targets.
    if (!view.isEnabled()) {
      if (pointerEvents == PointerEvents.AUTO) {
        return PointerEventsConfig.BOX_NONE;
      } else if (pointerEvents == PointerEvents.BOX_ONLY) {
        return PointerEventsConfig.NONE;
      }
    }

    switch (pointerEvents) {
      case BOX_ONLY: return PointerEventsConfig.BOX_ONLY;
      case BOX_NONE: return PointerEventsConfig.BOX_NONE;
      case NONE: return PointerEventsConfig.NONE;
    }

    return PointerEventsConfig.AUTO;
  }

  @Override
  public View getChildInDrawingOrderAtIndex(ViewGroup parent, int index) {
    if (parent instanceof ReactViewGroup) {
      return parent.getChildAt(((ReactViewGroup) parent).getZIndexMappedChildIndex(index));
    }
    return parent.getChildAt(index);
  }

  @Override
  public boolean isViewClippingChildren(ViewGroup view) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && !view.getClipChildren()) {
        if (view instanceof ReactViewGroup) {
            String overflow = ((ReactViewGroup) view).getOverflow();
            return "hidden".equals(overflow);
        }
        return false;
      }
    return true;
  }
}

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Вы можете попробовать ручное связывание.

Также проверьте эту проблему: https://github.com/kmagiera/react-native-gesture-handler/issues/205

0 голосов
/ 09 июня 2019

Если проблема возникает в Android, но не в iOS, возможно, вам нужно добавить полифилл для символов.Я не могу вспомнить, где я нашел это, но я использовал это в моих собственных проектах, и это работает.Просто вставьте его в ваш index.js:

if (Platform.OS === 'android') {
  if (typeof Symbol === 'undefined') {
    if (Array.prototype['@@iterator'] === undefined) {
      Array.prototype['@@iterator'] = function() {
        let i = 0;
        return {
          next: () => ({
            done: i >= this.length,
            value: this[i++]
          })
        };
      };
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...