Repository: iberHK/react-native-picker
Branch: master
Commit: 75e5e5977823
Files: 56
Total size: 314.0 KB
Directory structure:
gitextract_u6l0pbhq/
├── .gitattributes
├── .gitignore
├── CustomPicker.js
├── README.md
├── example/
│ ├── __tests__/
│ │ └── App.js
│ ├── android/
│ │ ├── app/
│ │ │ ├── BUCK
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── pickers/
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── MainApplication.java
│ │ │ └── res/
│ │ │ └── values/
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── keystores/
│ │ │ ├── BUCK
│ │ │ └── debug.keystore.properties
│ │ └── settings.gradle
│ ├── app.json
│ ├── index.js
│ ├── ios/
│ │ ├── pickers/
│ │ │ ├── AppDelegate.h
│ │ │ ├── AppDelegate.m
│ │ │ ├── Base.lproj/
│ │ │ │ └── LaunchScreen.xib
│ │ │ ├── Images.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Info.plist
│ │ │ └── main.m
│ │ ├── pickers-tvOS/
│ │ │ └── Info.plist
│ │ ├── pickers-tvOSTests/
│ │ │ └── Info.plist
│ │ ├── pickers.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ ├── pickers-tvOS.xcscheme
│ │ │ └── pickers.xcscheme
│ │ └── pickersTests/
│ │ ├── Info.plist
│ │ └── pickersTests.m
│ ├── package.json
│ └── src/
│ ├── Area.json
│ └── MainPage.js
├── index.js
├── package.json
├── utils/
│ └── TimeUtils.js
└── view/
├── AlertDialog.js
├── AreaPicker.js
├── BaseComponent.js
├── BaseDialog.js
├── DatePicker.js
├── DownloadDialog.js
├── InputDialog.js
├── KeyboardSpacer.js
├── PickerView.js
├── SimpleChooseDialog.js
├── SimpleItemsDialog.js
└── ToastComponent.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.m linguist-language=javascript
*.h linguist-language=javascript
================================================
FILE: .gitignore
================================================
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
================================================
FILE: CustomPicker.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
StatusBar,
TouchableOpacity,
Platform,
Dimensions,
PixelRatio
} from 'react-native';
import BaseDialog from './view/BaseDialog';
import PickerView from './view/PickerView';
export default class CustomPicker extends BaseDialog {
static defaultProps = {
list: ['item0', 'item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9'],
list1: ['item10', 'item11', 'item12', 'item13', 'item14', 'item15', 'item16', 'item17', 'item18', 'item19']
}
constructor(props) {
super(props);
}
_getContentPosition() {
return { justifyContent: 'flex-end', alignItems: 'center' }
}
renderContent() {
return
{
// console.warn(toValue)
}}
selectedIndex={0}
fontSize={this.getSize(14)}
itemWidth={this.mScreenWidth / 2}
itemHeight={this.getSize(40)} />
{
// console.warn(toValue)
}}
selectedIndex={0}
fontSize={this.getSize(14)}
itemWidth={this.mScreenWidth / 2}
itemHeight={this.getSize(40)} />
}
}
================================================
FILE: README.md
================================================
# react-native-pickers
纯JS实现Picker,还是有点难度的,需要涉及到RN的性能优化(联动不能使用setState来更新)、
自定义手势、自定义点击以及动画等。
其他Dialog只是因为Picker是基于项目的BaseDialog扩展来的,就一并整理发布。

### 安装:
yarn add react-native-pickers
yarn add react-native-svg
react-native link react-native-svg
### 使用:
AreaPicker:
| 属性 |
默认值 |
描述 |
截图 |
| selectedValue |
['香港', '香港', '中西區'] |
选中 |
|
| areaJson |
null |
地址数据源 |
| confirmText |
'确定' |
确定选择文本 |
| confirmTextSize |
14 |
确定选择文本字体大小 |
| confirmTextColor |
'#333333' |
确定选择字体颜色 |
| cancelText |
'取消' |
取消选择文本 |
| cancelTextSize |
14 |
取消选择文本字体大小 |
| cancelTextColor |
'#333333' |
取消选择文本字体颜色 |
| itemTextColor |
0x333333ff |
item正常颜色,仅支持16进制数字 |
| itemSelectedColor |
0x1097D5ff |
item选择颜色,仅支持16进制数字 |
| itemHeight |
40 |
item高度 |
| onPickerCancel |
null |
取消选择回调 |
| onPickerConfirm |
null |
确认选择回调 |
DatePicker:
| 属性 |
默认值 |
描述 |
截图 |
| itemTextColor |
0x333333ff |
item正常颜色,仅支持16进制数字 |
|
| itemSelectedColor |
0x1097D5ff |
item选择颜色,仅支持16进制数字 |
| onPickerCancel |
null |
取消选择回调 |
| onPickerConfirm |
null |
确认选择回调 |
| unit |
['年', '月', '日'] |
单位 |
| selectedValue |
[
new Date().getFullYear() + '年',
new Date().getMonth() + 1 + '月',
new Date().getDate() + '日']
|
选中 |
| startYear |
1990 |
起始年份 |
| endYear |
new Date().getFullYear() |
截至年份 |
| cancelText |
'取消' |
取消选择文本 |
| cancelTextSize |
14 |
取消选择文本字体大小 |
| cancelTextColor |
'#333333' |
取消选择文本字体颜色 |
| itemTextColor |
0x333333ff |
item正常颜色,仅支持16进制数字 |
| itemSelectedColor |
0x1097D5ff |
item选择颜色,仅支持16进制数字 |
| onPickerCancel |
null |
取消选择回调 |
| onPickerConfirm |
null |
确认选择回调 |
| confirmText |
'确定' |
确定选择文本 |
| confirmTextSize |
14 |
确定选择文本字体大小 |
| confirmTextColor |
'#333333' |
确定选择字体颜色 |
| cancelText |
'取消' |
取消选择文本 |
| cancelTextSize |
14 |
取消选择文本字体大小 |
| cancelTextColor |
'#333333' |
取消选择文本字体颜色 |
| itemHeight |
40 |
item高度 |
| HH |
true |
是否显示小时 |
| mm |
true |
是否显示分钟 |
| xx |
false |
是否显示秒 |
AlertDialog:
| 属性 |
默认值 |
描述 |
截图 |
| messageText |
'Alert Message' |
消息文本 |
|
| messageTextColor |
'#444444' |
消息文本字体颜色 |
| messageTextSize |
14 |
消息文本字体大小 |
| negativeText |
'cancel' |
取消文本 |
| negativeColor |
'#666666' |
取消文本颜色 |
| negativeSize |
16 |
取消文本字体大小 |
| positiveText |
'ok' |
确定文本 |
| positiveColor |
'#1097D5' |
确定文本颜色 |
| positiveSize |
16 |
确定文本字体大小 |
| onPress |
null |
positive(确定)返回true or
negative(取消)返回false
|
SimpleItemsDialog:
| 属性 |
默认值 |
描述 |
截图 |
| items |
['a', 'b', 'c'] |
列表数据,可以string、object(需要指定itemKey) |
|
| itemKey |
'key' |
当item为object时,来指定显示的属性
items:[{id:0, value: 'v1'},{id:0, value: 'v1'}]
itemKey设为'value',则等同于['v1', 'v2']
|
| itemStyle |
{
fontSize: 14,
fontWeight: '400',
color: '#333333'
}
|
列表文字样式 |
| cancel |
true |
是否在列表最后 增加 ‘取消’ 项 |
| cancelText |
'取消' |
取消项文本 |
| cancelTextStyle |
{
fontSize: 14,
fontWeight: '400',
color: '#999999'
}
|
取消文本字体样式 |
| onPress |
null |
返回选中index
|
SimpleChooseDialog:
| 属性 |
默认值 |
描述 |
截图 |
| items |
['a', 'b', 'c'] |
列表数据,可以string、object
(需要指定itemKey) |
|
| itemKey |
'key' |
当item为object时,来指定显示的属性
items:[{id:0, value: 'v1'},{id:0, value: 'v1'}]
itemKey设为'value',则等同于
['v1', 'v2']
|
| itemStyle |
{
fontSize: 14,
fontWeight: '400',
color: '#333333'
}
|
列表文字样式 |
| selectColor |
'#1097D5' |
选中颜色 |
| normalColor |
'#666666' |
未选中颜色 |
| pointSize |
18 |
左侧选中标识大小 |
| pointBorderRadius |
9 |
左侧选中标识边框弧度 |
| confirmText |
'确定' |
确定选择文本 |
| confirmBtnColor |
'#1097D5' |
确定选择按钮颜色 |
| confirmTextColor |
'#ffffff' |
确定选择文本颜色 |
| onPress |
null |
返回选中index
|
InputDialog:
| 属性 |
默认值 |
描述 |
截图 |
| title |
'我要举报' |
标题文本 |
|
| titleSize |
16 |
标题文本字体大小 |
| titleColor |
'#333333' |
标题文本文本颜色 |
| cancelText |
'返回' |
取消文本 |
| cancelSize |
14 |
取消文本字体大小 |
| cancelColor |
'#333333' |
取消文本字体颜色 |
| btnText |
'提交' |
提交文本 |
| btnTextSize |
12 |
提交文本字体大小 |
| btnTextColor |
'#ffffff' |
提交文本字体颜色 |
| btnBgColor |
'#1097D5' |
提交按钮颜色 |
| placeholder |
'请尽量说明问题,我们将尽快处理...' |
输入框提示语 |
| onSubmit |
null |
返回输入的文本内容
|
| InputDialog.show(text),显示dialog,text:用于编辑时,设置前值 |
DownloadDialog:
| 属性 |
默认值 |
描述 |
截图 |
| title |
'视频下载' |
标题文本 |
|
| titleSize |
16 |
标题文本字体大小 |
| titleColor |
'#333333' |
标题文本文本颜色 |
| active |
false |
按钮是否可点击 |
| actionText |
'打开' |
按钮文本 |
| onAction |
null |
点击按钮回调 |
| totalTextColor |
'#666666' |
总数文本字体颜色 |
| totalTextSize |
12 |
总数文本字体大小 |
| DownloadDialog.setProcess(0, '4.24MB'),设置当前进度,及下载文件总数 |
ToastComponent:
| 属性 |
默认值 |
描述 |
截图 |
| duration |
1500 |
显示时长(自动隐藏) |
|
| fontSize |
14 |
message字体大小 |
| textColor |
'#ffffff' |
message字体颜色 |
| lineHeight |
20 |
message字体行高 |
| paddingH |
10 |
水平padding |
| paddingV |
5 |
上下padding |
| borderRadius |
5 |
背景圆角 |
| backgroundColor |
0x00000099 |
背景颜色 |
| ToastComponent.show('message'),显示‘message’toast。应放在navigation同层,全局唯一 |
BaseDialog:
| 属性 |
默认值 |
描述 |
| removeSubviews |
true |
dismiss,是否回收前景控件,拓展出来的子控件,不要动态设置改属性 |
| coverClickable |
ture |
背景点击隐藏 |
| onCoverPress |
null |
点击背景,dismiss回调 |
| showAnimationType |
null |
入场动画方式 spring timing |
PickerView:
| 属性 |
默认值 |
描述 |
| itemTextColor |
0x333333ff |
item正常颜色,仅支持16进制数字 |
| itemSelectedColor |
0x1097D5ff |
item选择颜色,仅支持16进制数字 |
| itemHeight |
40 |
item高度 |
| onPickerSelected |
null |
选中时回调 |
| selectedIndex |
0 |
选中 |
================================================
FILE: example/__tests__/App.js
================================================
import 'react-native';
import React from 'react';
import App from '../App';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
it('renders correctly', () => {
const tree = renderer.create(
);
});
================================================
FILE: example/android/app/BUCK
================================================
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
# - `npm start` - to start the packager
# - `cd android`
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
# - `buck install -r android/app` - compile, install and run application
#
lib_deps = []
for jarfile in glob(['libs/*.jar']):
name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
lib_deps.append(':' + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)
for aarfile in glob(['libs/*.aar']):
name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
lib_deps.append(':' + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
android_library(
name = "all-libs",
exported_deps = lib_deps,
)
android_library(
name = "app-code",
srcs = glob([
"src/main/java/**/*.java",
]),
deps = [
":all-libs",
":build_config",
":res",
],
)
android_build_config(
name = "build_config",
package = "com.pickers",
)
android_resource(
name = "res",
package = "com.pickers",
res = "src/main/res",
)
android_binary(
name = "app",
keystore = "//android/keystores:debug",
manifest = "src/main/AndroidManifest.xml",
package_type = "debug",
deps = [
":app-code",
],
)
================================================
FILE: example/android/app/build.gradle
================================================
apply plugin: "com.android.application"
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation
* entryFile: "index.android.js",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
entryFile: "index.js"
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion 25
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.pickers"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86"
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a":1, "x86":2]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
}
dependencies {
compile project(':react-native-svg')
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.facebook.react:react-native:+" // From node_modules
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
================================================
FILE: example/android/app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Disabling obfuscation is useful if you collect stack traces from production crashes
# (unless you are using a system that supports de-obfuscate the stack traces).
-dontobfuscate
# React Native
# Keep our interfaces so they can be used by other ProGuard rules.
# See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native ; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; }
-dontwarn com.facebook.react.**
# TextLayoutBuilder uses a non-public Android constructor within StaticLayout.
# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details.
-dontwarn android.text.StaticLayout
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
================================================
FILE: example/android/app/src/main/AndroidManifest.xml
================================================
================================================
FILE: example/android/app/src/main/java/com/pickers/MainActivity.java
================================================
package com.pickers;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.facebook.react.ReactActivity;
public class MainActivity extends ReactActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// Translucent status bar
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(Color.TRANSPARENT);
}
}
super.onCreate(savedInstanceState);
}
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "pickers";
}
}
================================================
FILE: example/android/app/src/main/java/com/pickers/MainApplication.java
================================================
package com.pickers;
import android.app.Application;
import android.util.Log;
import com.facebook.react.ReactApplication;
import com.horcrux.svg.SvgPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import java.util.Arrays;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List getPackages() {
return Arrays.asList(
new MainReactPackage(),
new SvgPackage()
);
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}
================================================
FILE: example/android/app/src/main/res/values/strings.xml
================================================
pickers
================================================
FILE: example/android/app/src/main/res/values/styles.xml
================================================
================================================
FILE: example/android/build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
================================================
FILE: example/android/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
================================================
FILE: example/android/gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.useDeprecatedNdk=true
================================================
FILE: example/android/gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: example/android/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: example/android/keystores/BUCK
================================================
keystore(
name = "debug",
properties = "debug.keystore.properties",
store = "debug.keystore",
visibility = [
"PUBLIC",
],
)
================================================
FILE: example/android/keystores/debug.keystore.properties
================================================
key.store=debug.keystore
key.alias=androiddebugkey
key.store.password=android
key.alias.password=android
================================================
FILE: example/android/settings.gradle
================================================
rootProject.name = 'pickers'
include ':react-native-svg'
project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android')
include ':app'
================================================
FILE: example/app.json
================================================
{
"name": "pickers",
"displayName": "pickers"
}
================================================
FILE: example/index.js
================================================
import { AppRegistry } from 'react-native';
import MainPage from './src/MainPage';
AppRegistry.registerComponent('pickers', () => MainPage);
================================================
FILE: example/ios/pickers/AppDelegate.h
================================================
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import
@interface AppDelegate : UIResponder
@property (nonatomic, strong) UIWindow *window;
@end
================================================
FILE: example/ios/pickers/AppDelegate.m
================================================
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "AppDelegate.h"
#import
#import
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"pickers"
initialProperties:nil
launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
@end
================================================
FILE: example/ios/pickers/Base.lproj/LaunchScreen.xib
================================================
================================================
FILE: example/ios/pickers/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: example/ios/pickers/Images.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: example/ios/pickers/Info.plist
================================================
CFBundleDevelopmentRegion
en
CFBundleDisplayName
pickers
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
$(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$(PRODUCT_NAME)
CFBundlePackageType
APPL
CFBundleShortVersionString
1.0
CFBundleSignature
????
CFBundleVersion
1
LSRequiresIPhoneOS
NSAppTransportSecurity
NSExceptionDomains
localhost
NSExceptionAllowsInsecureHTTPLoads
NSLocationWhenInUseUsageDescription
UILaunchStoryboardName
LaunchScreen
UIRequiredDeviceCapabilities
armv7
UIStatusBarStyle
UIStatusBarStyleLightContent
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
UIViewControllerBasedStatusBarAppearance
================================================
FILE: example/ios/pickers/main.m
================================================
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
================================================
FILE: example/ios/pickers-tvOS/Info.plist
================================================
CFBundleDevelopmentRegion
en
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$(PRODUCT_NAME)
CFBundlePackageType
APPL
CFBundleShortVersionString
1.0
CFBundleSignature
????
CFBundleVersion
1
LSRequiresIPhoneOS
UILaunchStoryboardName
LaunchScreen
UIRequiredDeviceCapabilities
armv7
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
UIViewControllerBasedStatusBarAppearance
NSLocationWhenInUseUsageDescription
NSAppTransportSecurity
NSExceptionDomains
localhost
NSExceptionAllowsInsecureHTTPLoads
================================================
FILE: example/ios/pickers-tvOSTests/Info.plist
================================================
CFBundleDevelopmentRegion
en
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$(PRODUCT_NAME)
CFBundlePackageType
BNDL
CFBundleShortVersionString
1.0
CFBundleSignature
????
CFBundleVersion
1
================================================
FILE: example/ios/pickers.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
00E356F31AD99517003FC87E /* pickersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* pickersTests.m */; };
0C2E157B2D124BAD8C781BBF /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D94197A2D16B4D5CA5CC0CAE /* libRNSVG.a */; };
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; };
2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; };
2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; };
2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; };
2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; };
2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; };
2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; };
2DCD954D1E0B4F2C00145EB5 /* pickersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* pickersTests.m */; };
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTActionSheet;
};
00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTGeolocation;
};
00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
remoteInfo = RCTImage;
};
00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 58B511DB1A9E6C8500147676;
remoteInfo = RCTNetwork;
};
00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
remoteInfo = RCTVibration;
};
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = pickers;
};
139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTSettings;
};
139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
remoteInfo = RCTWebSocket;
};
146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
remoteInfo = React;
};
2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
remoteInfo = "pickers-tvOS";
};
2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = ADD01A681E09402E00F6D226;
remoteInfo = "RCTBlob-tvOS";
};
2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3DBE0D001F3B181A0099AA32;
remoteInfo = fishhook;
};
2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32;
remoteInfo = "fishhook-tvOS";
};
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
remoteInfo = "RCTImage-tvOS";
};
3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28471D9B043800D4039D;
remoteInfo = "RCTLinking-tvOS";
};
3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
remoteInfo = "RCTNetwork-tvOS";
};
3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28611D9B046600D4039D;
remoteInfo = "RCTSettings-tvOS";
};
3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
remoteInfo = "RCTText-tvOS";
};
3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28881D9B049200D4039D;
remoteInfo = "RCTWebSocket-tvOS";
};
3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
remoteInfo = "React-tvOS";
};
3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
remoteInfo = yoga;
};
3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
remoteInfo = "yoga-tvOS";
};
3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
remoteInfo = cxxreact;
};
3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
remoteInfo = "cxxreact-tvOS";
};
3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
remoteInfo = jschelpers;
};
3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
remoteInfo = "jschelpers-tvOS";
};
5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTAnimation;
};
5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
remoteInfo = "RCTAnimation-tvOS";
};
6E6E974C202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EBF21BDC1FC498900052F4D5;
remoteInfo = jsinspector;
};
6E6E974E202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5;
remoteInfo = "jsinspector-tvOS";
};
6E6E9750202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7;
remoteInfo = "third-party";
};
6E6E9752202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D383D3C1EBD27B6005632C8;
remoteInfo = "third-party-tvOS";
};
6E6E9754202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 139D7E881E25C6D100323FB7;
remoteInfo = "double-conversion";
};
6E6E9756202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D383D621EBD27B9005632C8;
remoteInfo = "double-conversion-tvOS";
};
6E6E9758202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 9936F3131F5F2E4B0010BF04;
remoteInfo = privatedata;
};
6E6E975A202B8793003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04;
remoteInfo = "privatedata-tvOS";
};
6E6E9760202B8794003E6346 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 17592519A17B478C902658F0 /* RNSVG.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C;
remoteInfo = RNSVG;
};
78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTLinking;
};
832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 58B5119B1A9E6C1200147676;
remoteInfo = RCTText;
};
ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 358F4ED71D1E81A9004DF814;
remoteInfo = RCTBlob;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; };
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; };
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; };
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; };
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; };
00E356EE1AD99517003FC87E /* pickersTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = pickersTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
00E356F21AD99517003FC87E /* pickersTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = pickersTests.m; sourceTree = ""; };
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; };
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; };
13B07F961A680F5B00A75B9A /* pickers.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = pickers.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = pickers/AppDelegate.h; sourceTree = ""; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = pickers/AppDelegate.m; sourceTree = ""; };
13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = pickers/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = pickers/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = pickers/main.m; sourceTree = ""; };
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; };
17592519A17B478C902658F0 /* RNSVG.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = ""; };
2D02E47B1E0B4A5D006451C7 /* pickers-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "pickers-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E4901E0B4A5D006451C7 /* pickers-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "pickers-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; };
71E34E02FE99464BAB4F98FD /* libRNSVG-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNSVG-tvOS.a"; sourceTree = ""; };
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; };
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; };
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; };
D94197A2D16B4D5CA5CC0CAE /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSVG.a; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
00E356EB1AD99517003FC87E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */,
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
146834051AC3E58100842450 /* libReact.a in Frameworks */,
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
0C2E157B2D124BAD8C781BBF /* libRNSVG.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */,
2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */,
2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */,
2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */,
2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */,
2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */,
2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */,
2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
00C302A81ABCB8CE00DB3ED1 /* Products */ = {
isa = PBXGroup;
children = (
00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
);
name = Products;
sourceTree = "";
};
00C302B61ABCB90400DB3ED1 /* Products */ = {
isa = PBXGroup;
children = (
00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
);
name = Products;
sourceTree = "";
};
00C302BC1ABCB91800DB3ED1 /* Products */ = {
isa = PBXGroup;
children = (
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
);
name = Products;
sourceTree = "";
};
00C302D41ABCB9D200DB3ED1 /* Products */ = {
isa = PBXGroup;
children = (
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
);
name = Products;
sourceTree = "";
};
00C302E01ABCB9EE00DB3ED1 /* Products */ = {
isa = PBXGroup;
children = (
00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
);
name = Products;
sourceTree = "";
};
00E356EF1AD99517003FC87E /* pickersTests */ = {
isa = PBXGroup;
children = (
00E356F21AD99517003FC87E /* pickersTests.m */,
00E356F01AD99517003FC87E /* Supporting Files */,
);
path = pickersTests;
sourceTree = "";
};
00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
00E356F11AD99517003FC87E /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "";
};
139105B71AF99BAD00B5F7CC /* Products */ = {
isa = PBXGroup;
children = (
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
);
name = Products;
sourceTree = "";
};
139FDEE71B06529A00C62182 /* Products */ = {
isa = PBXGroup;
children = (
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
2D16E6841FA4F8DC00B85C8A /* libfishhook.a */,
2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */,
);
name = Products;
sourceTree = "";
};
13B07FAE1A68108700A75B9A /* pickers */ = {
isa = PBXGroup;
children = (
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
13B07FB71A68108700A75B9A /* main.m */,
);
name = pickers;
sourceTree = "";
};
146834001AC3E56700842450 /* Products */ = {
isa = PBXGroup;
children = (
146834041AC3E56700842450 /* libReact.a */,
3DAD3EA31DF850E9000B6D8A /* libReact.a */,
3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
6E6E974D202B8793003E6346 /* libjsinspector.a */,
6E6E974F202B8793003E6346 /* libjsinspector-tvOS.a */,
6E6E9751202B8793003E6346 /* libthird-party.a */,
6E6E9753202B8793003E6346 /* libthird-party.a */,
6E6E9755202B8793003E6346 /* libdouble-conversion.a */,
6E6E9757202B8793003E6346 /* libdouble-conversion.a */,
6E6E9759202B8793003E6346 /* libprivatedata.a */,
6E6E975B202B8793003E6346 /* libprivatedata-tvOS.a */,
);
name = Products;
sourceTree = "";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
2D16E6891FA4F8E400B85C8A /* libReact.a */,
);
name = Frameworks;
sourceTree = "";
};
5E91572E1DD0AC6500FF2AA8 /* Products */ = {
isa = PBXGroup;
children = (
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */,
);
name = Products;
sourceTree = "";
};
6E6E9726202B8791003E6346 /* Recovered References */ = {
isa = PBXGroup;
children = (
D94197A2D16B4D5CA5CC0CAE /* libRNSVG.a */,
71E34E02FE99464BAB4F98FD /* libRNSVG-tvOS.a */,
);
name = "Recovered References";
sourceTree = "";
};
6E6E975C202B8793003E6346 /* Products */ = {
isa = PBXGroup;
children = (
6E6E9761202B8794003E6346 /* libRNSVG.a */,
);
name = Products;
sourceTree = "";
};
78C398B11ACF4ADC00677621 /* Products */ = {
isa = PBXGroup;
children = (
78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
);
name = Products;
sourceTree = "";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
146833FF1AC3E56700842450 /* React.xcodeproj */,
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */,
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
17592519A17B478C902658F0 /* RNSVG.xcodeproj */,
);
name = Libraries;
sourceTree = "";
};
832341B11AAA6A8300B99B32 /* Products */ = {
isa = PBXGroup;
children = (
832341B51AAA6A8300B99B32 /* libRCTText.a */,
3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
);
name = Products;
sourceTree = "";
};
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
13B07FAE1A68108700A75B9A /* pickers */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* pickersTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
6E6E9726202B8791003E6346 /* Recovered References */,
);
indentWidth = 2;
sourceTree = "";
tabWidth = 2;
usesTabs = 0;
};
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* pickers.app */,
00E356EE1AD99517003FC87E /* pickersTests.xctest */,
2D02E47B1E0B4A5D006451C7 /* pickers-tvOS.app */,
2D02E4901E0B4A5D006451C7 /* pickers-tvOSTests.xctest */,
);
name = Products;
sourceTree = "";
};
ADBDB9201DFEBF0600ED6528 /* Products */ = {
isa = PBXGroup;
children = (
ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */,
2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */,
);
name = Products;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* pickersTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "pickersTests" */;
buildPhases = (
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = pickersTests;
productName = pickersTests;
productReference = 00E356EE1AD99517003FC87E /* pickersTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
13B07F861A680F5B00A75B9A /* pickers */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "pickers" */;
buildPhases = (
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
);
buildRules = (
);
dependencies = (
);
name = pickers;
productName = "Hello World";
productReference = 13B07F961A680F5B00A75B9A /* pickers.app */;
productType = "com.apple.product-type.application";
};
2D02E47A1E0B4A5D006451C7 /* pickers-tvOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "pickers-tvOS" */;
buildPhases = (
2D02E4771E0B4A5D006451C7 /* Sources */,
2D02E4781E0B4A5D006451C7 /* Frameworks */,
2D02E4791E0B4A5D006451C7 /* Resources */,
2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
);
buildRules = (
);
dependencies = (
);
name = "pickers-tvOS";
productName = "pickers-tvOS";
productReference = 2D02E47B1E0B4A5D006451C7 /* pickers-tvOS.app */;
productType = "com.apple.product-type.application";
};
2D02E48F1E0B4A5D006451C7 /* pickers-tvOSTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "pickers-tvOSTests" */;
buildPhases = (
2D02E48C1E0B4A5D006451C7 /* Sources */,
2D02E48D1E0B4A5D006451C7 /* Frameworks */,
2D02E48E1E0B4A5D006451C7 /* Resources */,
);
buildRules = (
);
dependencies = (
2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
);
name = "pickers-tvOSTests";
productName = "pickers-tvOSTests";
productReference = 2D02E4901E0B4A5D006451C7 /* pickers-tvOSTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 610;
ORGANIZATIONNAME = Facebook;
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
DevelopmentTeam = Q9W5LFLCU2;
};
2D02E47A1E0B4A5D006451C7 = {
CreatedOnToolsVersion = 8.2.1;
ProvisioningStyle = Automatic;
};
2D02E48F1E0B4A5D006451C7 = {
CreatedOnToolsVersion = 8.2.1;
ProvisioningStyle = Automatic;
TestTargetID = 2D02E47A1E0B4A5D006451C7;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "pickers" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
},
{
ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
},
{
ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */;
ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
},
{
ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
},
{
ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
},
{
ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
},
{
ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
},
{
ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
},
{
ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
},
{
ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
},
{
ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
},
{
ProductGroup = 146834001AC3E56700842450 /* Products */;
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
},
{
ProductGroup = 6E6E975C202B8793003E6346 /* Products */;
ProjectRef = 17592519A17B478C902658F0 /* RNSVG.xcodeproj */;
},
);
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* pickers */,
00E356ED1AD99517003FC87E /* pickersTests */,
2D02E47A1E0B4A5D006451C7 /* pickers-tvOS */,
2D02E48F1E0B4A5D006451C7 /* pickers-tvOSTests */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTActionSheet.a;
remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTGeolocation.a;
remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTImage.a;
remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTNetwork.a;
remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTVibration.a;
remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTSettings.a;
remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTWebSocket.a;
remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
146834041AC3E56700842450 /* libReact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libReact.a;
remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTBlob-tvOS.a";
remoteRef = 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
2D16E6841FA4F8DC00B85C8A /* libfishhook.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libfishhook.a;
remoteRef = 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libfishhook-tvOS.a";
remoteRef = 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTImage-tvOS.a";
remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTLinking-tvOS.a";
remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTNetwork-tvOS.a";
remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTSettings-tvOS.a";
remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTText-tvOS.a";
remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTWebSocket-tvOS.a";
remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libReact.a;
remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libyoga.a;
remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libyoga.a;
remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libcxxreact.a;
remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libcxxreact.a;
remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjschelpers.a;
remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjschelpers.a;
remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTAnimation.a;
remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTAnimation.a;
remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E974D202B8793003E6346 /* libjsinspector.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjsinspector.a;
remoteRef = 6E6E974C202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E974F202B8793003E6346 /* libjsinspector-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libjsinspector-tvOS.a";
remoteRef = 6E6E974E202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E9751202B8793003E6346 /* libthird-party.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libthird-party.a";
remoteRef = 6E6E9750202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E9753202B8793003E6346 /* libthird-party.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libthird-party.a";
remoteRef = 6E6E9752202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E9755202B8793003E6346 /* libdouble-conversion.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libdouble-conversion.a";
remoteRef = 6E6E9754202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E9757202B8793003E6346 /* libdouble-conversion.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libdouble-conversion.a";
remoteRef = 6E6E9756202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E9759202B8793003E6346 /* libprivatedata.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libprivatedata.a;
remoteRef = 6E6E9758202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E975B202B8793003E6346 /* libprivatedata-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libprivatedata-tvOS.a";
remoteRef = 6E6E975A202B8793003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
6E6E9761202B8794003E6346 /* libRNSVG.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRNSVG.a;
remoteRef = 6E6E9760202B8794003E6346 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTLinking.a;
remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTText.a;
remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTBlob.a;
remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
00E356EC1AD99517003FC87E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E4791E0B4A5D006451C7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E48E1E0B4A5D006451C7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Bundle React Native Code And Images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
00E356EA1AD99517003FC87E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
00E356F31AD99517003FC87E /* pickersTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E4771E0B4A5D006451C7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E48C1E0B4A5D006451C7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2DCD954D1E0B4F2C00145EB5 /* pickersTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 13B07F861A680F5B00A75B9A /* pickers */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 2D02E47A1E0B4A5D006451C7 /* pickers-tvOS */;
targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
isa = PBXVariantGroup;
children = (
13B07FB21A68108700A75B9A /* Base */,
);
name = LaunchScreen.xib;
path = pickers;
sourceTree = "";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
INFOPLIST_FILE = pickersTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
);
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pickers.app/pickers";
};
name = Debug;
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
INFOPLIST_FILE = pickersTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
);
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pickers.app/pickers";
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = Q9W5LFLCU2;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
INFOPLIST_FILE = pickers/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = com.iBroker.pickers;
PRODUCT_NAME = pickers;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = Q9W5LFLCU2;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
INFOPLIST_FILE = pickers/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = com.iBroker.pickers;
PRODUCT_NAME = pickers;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
2D02E4971E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
INFOPLIST_FILE = "pickers-tvOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.pickers-tvOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.2;
};
name = Debug;
};
2D02E4981E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_NO_COMMON_BLOCKS = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
INFOPLIST_FILE = "pickers-tvOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.pickers-tvOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.2;
};
name = Release;
};
2D02E4991E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
INFOPLIST_FILE = "pickers-tvOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.pickers-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pickers-tvOS.app/pickers-tvOS";
TVOS_DEPLOYMENT_TARGET = 10.1;
};
name = Debug;
};
2D02E49A1E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_NO_COMMON_BLOCKS = YES;
INFOPLIST_FILE = "pickers-tvOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.pickers-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pickers-tvOS.app/pickers-tvOS";
TVOS_DEPLOYMENT_TARGET = 10.1;
};
name = Release;
};
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
83CBBA211A601CBA00E9B192 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "pickersTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
00E356F71AD99517003FC87E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "pickers" */ = {
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
13B07F951A680F5B00A75B9A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "pickers-tvOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2D02E4971E0B4A5E006451C7 /* Debug */,
2D02E4981E0B4A5E006451C7 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "pickers-tvOSTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2D02E4991E0B4A5E006451C7 /* Debug */,
2D02E49A1E0B4A5E006451C7 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "pickers" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,
83CBBA211A601CBA00E9B192 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}
================================================
FILE: example/ios/pickers.xcodeproj/xcshareddata/xcschemes/pickers-tvOS.xcscheme
================================================
================================================
FILE: example/ios/pickers.xcodeproj/xcshareddata/xcschemes/pickers.xcscheme
================================================
================================================
FILE: example/ios/pickersTests/Info.plist
================================================
CFBundleDevelopmentRegion
en
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$(PRODUCT_NAME)
CFBundlePackageType
BNDL
CFBundleShortVersionString
1.0
CFBundleSignature
????
CFBundleVersion
1
================================================
FILE: example/ios/pickersTests/pickersTests.m
================================================
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import
#import
#import
#import
#define TIMEOUT_SECONDS 600
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
@interface pickersTests : XCTestCase
@end
@implementation pickersTests
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
{
if (test(view)) {
return YES;
}
for (UIView *subview in [view subviews]) {
if ([self findSubviewInView:subview matching:test]) {
return YES;
}
}
return NO;
}
- (void)testRendersWelcomeScreen
{
UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
BOOL foundElement = NO;
__block NSString *redboxError = nil;
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
if (level >= RCTLogLevelError) {
redboxError = message;
}
});
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
return YES;
}
return NO;
}];
}
RCTSetLogFunction(RCTDefaultLogFunction);
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
}
@end
================================================
FILE: example/package.json
================================================
{
"name": "pickers",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "^16.3.0-alpha.1",
"react-native": "0.53.3",
"react-native-pickers": "^1.1.9",
"react-native-svg": "^6.2.2"
},
"devDependencies": {
"babel-jest": "22.2.0",
"babel-preset-react-native": "4.0.0",
"jest": "22.2.1",
"react-test-renderer": "16.2.0"
},
"jest": {
"preset": "react-native"
}
}
================================================
FILE: example/src/Area.json
================================================
[
{
"name": "香港",
"city": [
{
"name": "香港",
"area": [
"中西區",
"灣仔區",
"東區",
"南區",
"深水埗區",
"油尖旺區",
"油麻地",
"尖沙咀",
"旺角",
"九龍城區",
"黃大仙區",
"觀塘區",
"北區",
"大埔區",
"沙田區",
"西貢區",
"元朗區",
"屯門區",
"荃灣區",
"葵青區",
"離島區",
"其他"
]
}
]
},
{
"name": "台灣",
"city": [
{
"name": "台灣",
"area": [
"臺北市",
"高雄市",
"臺北縣",
"桃園縣",
"新竹縣",
"苗栗縣",
"臺中縣",
"彰化縣",
"南投縣",
"雲林縣",
"嘉義縣",
"臺南縣",
"高雄縣",
"屏東縣",
"宜蘭縣",
"花蓮縣",
"臺東縣",
"澎湖縣",
"基隆市",
"新竹市",
"臺中市",
"嘉義市",
"臺南市",
"其他"
]
}
]
},
{
"name": "澳門",
"city": [
{
"name": "澳門",
"area": [
"花地瑪堂區",
"聖安多尼堂區",
"大堂區",
"望德堂區",
"風順堂區",
"嘉模堂區",
"聖方濟各堂區",
"路氹",
"其他"
]
}
]
},
{
"name": "北京",
"city": [
{
"name": "北京",
"area": [
"東城區",
"西城區",
"崇文區",
"宣武區",
"朝陽區",
"豐臺區",
"石景山區",
"海澱區",
"門頭溝區",
"房山區",
"通州區",
"順義區",
"昌平區",
"大興區",
"平谷區",
"懷柔區",
"密雲縣",
"延慶縣",
"其他"
]
}
]
},
{
"name": "天津",
"city": [
{
"name": "天津",
"area": [
"和平區",
"河東區",
"河西區",
"南開區",
"河北區",
"紅橋區",
"塘沽區",
"漢沽區",
"大港區",
"東麗區",
"西青區",
"津南區",
"北辰區",
"武清區",
"寶坻區",
"寧河縣",
"靜海縣",
"薊縣",
"其他"
]
}
]
},
{
"name": "河北",
"city": [
{
"name": "石家莊",
"area": [
"長安區",
"橋東區",
"橋西區",
"新華區",
"郊區",
"井陘礦區",
"井陘縣",
"正定縣",
"欒城縣",
"行唐縣",
"靈壽縣",
"高邑縣",
"深澤縣",
"贊皇縣",
"無極縣",
"平山縣",
"元氏縣",
"趙縣",
"辛集市",
"槁",
"晉州市",
"新樂市",
"鹿泉市",
"其他"
]
},
{
"name": "唐山",
"area": [
"路南區",
"路北區",
"古冶區",
"開平區",
"新區",
"豐潤縣",
"灤縣",
"灤南縣",
"樂亭縣",
"遷西縣",
"玉田縣",
"唐海縣",
"遵化市",
"豐南市",
"遷安市",
"其他"
]
},
{
"name": "秦皇島",
"area": [
"海港區",
"山海關區",
"北戴河區",
"青龍滿族自治縣",
"昌黎縣",
"撫寧縣",
"盧龍縣",
"其他"
]
},
{
"name": "邯鄲",
"area": [
"邯山區",
"叢臺區",
"復興區",
"峰峰礦區",
"邯鄲縣",
"臨漳縣",
"成安縣",
"大名縣",
"涉縣",
"磁縣",
"肥鄉縣",
"永年縣",
"邱縣",
"雞澤縣",
"廣平縣",
"館陶縣",
"魏縣",
"曲周縣",
"武安市",
"其他"
]
},
{
"name": "邢臺",
"area": [
"橋東區",
"橋西區",
"邢臺縣",
"臨城縣",
"內丘縣",
"柏鄉縣",
"隆堯縣",
"任縣",
"南和縣",
"寧晉縣",
"巨鹿縣",
"新河縣",
"廣宗縣",
"平鄉縣",
"威縣",
"清河縣",
"臨西縣",
"南宮市",
"沙河市",
"其他"
]
},
{
"name": "保定",
"area": [
"新市區",
"北市區",
"南市區",
"滿城縣",
"清苑縣",
"淶水縣",
"阜平縣",
"徐水縣",
"定興縣",
"唐縣",
"高陽縣",
"容城縣",
"淶源縣",
"望都縣",
"安新縣",
"易縣",
"曲陽縣",
"蠡縣",
"順平縣",
"博野",
"雄縣",
"涿州市",
"定州市",
"安國市",
"高碑店市",
"其他"
]
},
{
"name": "張家口",
"area": [
"橋東區",
"橋西區",
"宣化區",
"下花園區",
"宣化縣",
"張北縣",
"康保縣",
"沽源縣",
"尚義縣",
"蔚縣",
"陽原縣",
"懷安縣",
"萬全縣",
"懷來縣",
"涿鹿縣",
"赤城縣",
"崇禮縣",
"其他"
]
},
{
"name": "承德",
"area": [
"雙橋區",
"雙灤區",
"鷹手營子礦區",
"承德縣",
"興隆縣",
"平泉縣",
"灤平縣",
"隆化縣",
"豐寧滿族自治縣",
"寬城滿族自治縣",
"圍場滿族蒙古族自治縣",
"其他"
]
},
{
"name": "滄州",
"area": [
"新華區",
"運河區",
"滄縣",
"青縣",
"東光縣",
"海興縣",
"鹽山縣",
"肅寧縣",
"南皮縣",
"吳橋縣",
"獻縣",
"孟村回族自治縣",
"泊頭市",
"任丘市",
"黃驊市",
"河間市",
"其他"
]
},
{
"name": "廊坊",
"area": [
"安次區",
"固安縣",
"永清縣",
"香河縣",
"大城縣",
"文安縣",
"大廠回族自治縣",
"霸州市",
"三河市",
"其他"
]
},
{
"name": "衡水",
"area": [
"桃城區",
"棗強縣",
"武邑縣",
"武強縣",
"饒陽縣",
"安平縣",
"故城縣",
"景縣",
"阜城縣",
"冀州市",
"深州市",
"其他"
]
}
]
},
{
"name": "山西",
"city": [
{
"name": "太原",
"area": [
"小店區",
"迎澤區",
"杏花嶺區",
"尖草坪區",
"萬柏林區",
"晉源區",
"清徐縣",
"陽曲縣",
"婁煩縣",
"古交市",
"其他"
]
},
{
"name": "大同",
"area": [
"城區",
"礦區",
"南郊區",
"新榮區",
"陽高縣",
"天鎮縣",
"廣靈縣",
"靈丘縣",
"渾源縣",
"左雲縣",
"大同縣",
"其他"
]
},
{
"name": "陽泉",
"area": [
"城區",
"礦區",
"郊區",
"平定縣",
"盂縣",
"其他"
]
},
{
"name": "長治",
"area": [
"城區",
"郊區",
"長治縣",
"襄垣縣",
"屯留縣",
"平順縣",
"黎城縣",
"壺關縣",
"長子縣",
"武鄉縣",
"沁縣",
"沁源縣",
"潞城市",
"其他"
]
},
{
"name": "晉城",
"area": [
"城區",
"沁水縣",
"陽城縣",
"陵川縣",
"澤州縣",
"高平市",
"其他"
]
},
{
"name": "朔州",
"area": [
"朔城區",
"平魯區",
"山陰縣",
"應縣",
"右玉縣",
"懷仁縣",
"其他"
]
},
{
"name": "忻州",
"area": [
"忻府區",
"原平市",
"定襄縣",
"五臺縣",
"代縣",
"繁峙縣",
"寧武縣",
"靜樂縣",
"神池縣",
"五寨縣",
"苛嵐縣",
"河曲縣",
"保德縣",
"偏關縣",
"其他"
]
},
{
"name": "呂梁",
"area": [
"離石區",
"孝義市",
"汾陽市",
"文水縣",
"交城縣",
"興縣",
"臨縣",
"柳林縣",
"石樓縣",
"嵐縣",
"方山縣",
"中陽縣",
"交口縣",
"其他"
]
},
{
"name": "晉中",
"area": [
"榆次市",
"介休市",
"榆社縣",
"左權縣",
"和順縣",
"昔陽縣",
"壽陽縣",
"太谷縣",
"祁縣",
"平遙縣",
"靈石縣",
"其他"
]
},
{
"name": "臨汾",
"area": [
"臨汾市",
"侯馬市",
"霍州市",
"曲沃縣",
"翼城縣",
"襄汾縣",
"洪洞縣",
"古縣",
"安澤縣",
"浮山縣",
"吉縣",
"鄉寧縣",
"蒲縣",
"大寧縣",
"永和縣",
"隰縣",
"汾西縣",
"其他"
]
},
{
"name": "運城",
"area": [
"運城市",
"永濟市",
"河津市",
"芮城縣",
"臨猗縣",
"萬榮縣",
"新絳縣",
"稷山縣",
"聞喜縣",
"夏縣",
"絳縣",
"平陸縣",
"垣曲縣",
"其他"
]
}
]
},
{
"name": "內蒙古",
"city": [
{
"name": "呼和浩特",
"area": [
"新城區",
"回民區",
"玉泉區",
"郊區",
"土默特左旗",
"托克托縣",
"和林格爾縣",
"清水河縣",
"武川縣",
"其他"
]
},
{
"name": "包頭",
"area": [
"東河區",
"昆都倫區",
"青山區",
"石拐礦區",
"白雲礦區",
"郊區",
"土默特右旗",
"固陽縣",
"達爾罕茂明安聯合旗",
"其他"
]
},
{
"name": "烏海",
"area": [
"海勃灣區",
"海南區",
"烏達區",
"其他"
]
},
{
"name": "赤峰",
"area": [
"紅山區",
"元寶山區",
"松山區",
"阿魯科爾沁旗",
"巴林左旗",
"巴林右旗",
"林西縣",
"克什克騰旗",
"翁牛特旗",
"喀喇沁旗",
"寧城縣",
"敖漢旗",
"其他"
]
},
{
"name": "呼倫貝爾",
"area": [
"海拉爾市",
"滿洲裏市",
"紮蘭屯市",
"牙克石市",
"根河市",
"額爾古納市",
"阿榮旗",
"莫力達瓦達斡爾族自治旗",
"鄂倫春自治旗",
"鄂溫克族自治旗",
"新巴爾虎右旗",
"新巴爾虎左旗",
"陳巴爾虎旗",
"其他"
]
},
{
"name": "興安盟",
"area": [
"烏蘭浩特市",
"阿爾山市",
"科爾沁右翼前旗",
"科爾沁右翼中旗",
"紮賚特旗",
"突泉縣",
"其他"
]
},
{
"name": "通遼",
"area": [
"科爾沁區",
"霍林郭勒市",
"科爾沁左翼中旗",
"科爾沁左翼後旗",
"開魯縣",
"庫倫旗",
"奈曼旗",
"紮魯特旗",
"其他"
]
},
{
"name": "錫林郭勒盟",
"area": [
"二連浩特市",
"錫林浩特市",
"阿巴嘎旗",
"蘇尼特左旗",
"蘇尼特右旗",
"東烏珠穆沁旗",
"西烏珠穆沁旗",
"太仆寺旗",
"鑲黃旗",
"正鑲白旗",
"正藍旗",
"多倫縣",
"其他"
]
},
{
"name": "烏蘭察布盟",
"area": [
"集寧市",
"豐鎮市",
"卓資縣",
"化德縣",
"商都縣",
"興和縣",
"涼城縣",
"察哈爾右翼前旗",
"察哈爾右翼中旗",
"察哈爾右翼後旗",
"四子王旗",
"其他"
]
},
{
"name": "伊克昭盟",
"area": [
"東勝市",
"達拉特旗",
"準格爾旗",
"鄂托克前旗",
"鄂托克旗",
"杭錦旗",
"烏審旗",
"伊金霍洛旗",
"其他"
]
},
{
"name": "巴彥淖爾盟",
"area": [
"臨河市",
"五原縣",
"磴口縣",
"烏拉特前旗",
"烏拉特中旗",
"烏拉特後旗",
"杭錦後旗",
"其他"
]
},
{
"name": "阿拉善盟",
"area": [
"阿拉善左旗",
"阿拉善右旗",
"額濟納旗",
"其他"
]
}
]
},
{
"name": "遼寧",
"city": [
{
"name": "沈陽",
"area": [
"沈河區",
"皇姑區",
"和平區",
"大東區",
"鐵西區",
"蘇家屯區",
"東陵區",
"於洪區",
"新民市",
"法庫縣",
"遼中縣",
"康平縣",
"新城子區",
"其他"
]
},
{
"name": "大連",
"area": [
"西崗區",
"中山區",
"沙河口區",
"甘井子區",
"旅順口區",
"金州區",
"瓦房店市",
"普蘭店市",
"莊河市",
"長海縣",
"其他"
]
},
{
"name": "鞍山",
"area": [
"鐵東區",
"鐵西區",
"立山區",
"千山區",
"海城市",
"臺安縣",
"岫巖滿族自治縣",
"其他"
]
},
{
"name": "撫順",
"area": [
"順城區",
"新撫區",
"東洲區",
"望花區",
"撫順縣",
"清原滿族自治縣",
"新賓滿族自治縣",
"其他"
]
},
{
"name": "本溪",
"area": [
"平山區",
"明山區",
"溪湖區",
"南芬區",
"本溪滿族自治縣",
"桓仁滿族自治縣",
"其他"
]
},
{
"name": "丹東",
"area": [
"振興區",
"元寶區",
"振安區",
"東港市",
"鳳城市",
"寬甸滿族自治縣",
"其他"
]
},
{
"name": "錦州",
"area": [
"太和區",
"古塔區",
"淩河區",
"淩海市",
"黑山縣",
"義縣",
"北寧市",
"其他"
]
},
{
"name": "營口",
"area": [
"站前區",
"西市區",
"鮁魚圈區",
"老邊區",
"大石橋市",
"蓋州市",
"其他"
]
},
{
"name": "阜新",
"area": [
"海州區",
"新邱區",
"太平區",
"清河門區",
"細河區",
"彰武縣",
"阜新蒙古族自治縣",
"其他"
]
},
{
"name": "遼陽",
"area": [
"白塔區",
"文聖區",
"宏偉區",
"太子河區",
"弓長嶺區",
"燈塔市",
"遼陽縣",
"其他"
]
},
{
"name": "盤錦",
"area": [
"雙臺子區",
"興隆臺區",
"盤山縣",
"大窪縣",
"其他"
]
},
{
"name": "鐵嶺",
"area": [
"銀州區",
"清河區",
"調兵山市",
"開原市",
"鐵嶺縣",
"昌圖縣",
"西豐縣",
"其他"
]
},
{
"name": "朝陽",
"area": [
"雙塔區",
"龍城區",
"淩源市",
"北票市",
"朝陽縣",
"建平縣",
"喀喇沁左翼蒙古族自治縣",
"其他"
]
},
{
"name": "葫蘆島",
"area": [
"龍港區",
"南票區",
"連山區",
"興城市",
"綏中縣",
"建昌縣",
"其他"
]
}
]
},
{
"name": "吉林",
"city": [
{
"name": "長春",
"area": [
"朝陽區",
"寬城區",
"二道區",
"南關區",
"綠園區",
"雙陽區",
"九臺市",
"榆樹市",
"德惠市",
"農安縣",
"其他"
]
},
{
"name": "吉林",
"area": [
"船營區",
"昌邑區",
"龍潭區",
"豐滿區",
"舒蘭市",
"樺甸市",
"蛟河市",
"磐石市",
"永吉縣",
"其他"
]
},
{
"name": "四平",
"area": [
"鐵西區",
"鐵東區",
"公主嶺市",
"雙遼市",
"梨樹縣",
"伊通滿族自治縣",
"其他"
]
},
{
"name": "遼源",
"area": [
"龍山區",
"西安區",
"東遼縣",
"東豐縣",
"其他"
]
},
{
"name": "通化",
"area": [
"東昌區",
"二道江區",
"梅河口市",
"集安市",
"通化縣",
"輝南縣",
"柳河縣",
"其他"
]
},
{
"name": "白山",
"area": [
"八道江區",
"江源區",
"臨江市",
"靖宇縣",
"撫松縣",
"長白朝鮮族自治縣",
"其他"
]
},
{
"name": "松原",
"area": [
"寧江區",
"乾安縣",
"長嶺縣",
"扶余縣",
"前郭爾羅斯蒙古族自治縣",
"其他"
]
},
{
"name": "白城",
"area": [
"桃北區",
"大安市",
"桃南市",
"鎮賚縣",
"通榆縣",
"其他"
]
},
{
"name": "延邊朝鮮族自治州",
"area": [
"延吉市",
"圖們市",
"敦化市",
"龍井市",
"琿春市",
"和龍市",
"安圖縣",
"汪清縣",
"其他"
]
}
]
},
{
"name": "黑龍江",
"city": [
{
"name": "哈爾濱",
"area": [
"松北區",
"道裏區",
"南崗區",
"平房區",
"香坊區",
"道外區",
"呼蘭區",
"阿城區",
"雙城市",
"尚誌市",
"五常市",
"賓縣",
"方正縣",
"通河縣",
"巴彥縣",
"延壽縣",
"木蘭縣",
"依蘭縣",
"其他"
]
},
{
"name": "齊齊哈爾",
"area": [
"龍沙區",
"昂昂溪區",
"鐵鋒區",
"建華區",
"富拉爾基區",
"碾子山區",
"梅裏斯達斡爾族區",
"訥河市",
"富裕縣",
"拜泉縣",
"甘南縣",
"依安縣",
"克山縣",
"泰來縣",
"克東縣",
"龍江縣",
"其他"
]
},
{
"name": "鶴崗",
"area": [
"興山區",
"工農區",
"南山區",
"興安區",
"向陽區",
"東山區",
"蘿北縣",
"綏濱縣",
"其他"
]
},
{
"name": "雙鴨山",
"area": [
"尖山區",
"嶺東區",
"四方臺區",
"寶山區",
"集賢縣",
"寶清縣",
"友誼縣",
"饒河縣",
"其他"
]
},
{
"name": "雞西",
"area": [
"雞冠區",
"恒山區",
"城子河區",
"滴道區",
"梨樹區",
"麻山區",
"密山市",
"虎林市",
"雞東縣",
"其他"
]
},
{
"name": "大慶",
"area": [
"薩爾圖區",
"紅崗區",
"龍鳳區",
"讓胡路區",
"大同區",
"林甸縣",
"肇州縣",
"肇源縣",
"杜爾伯特蒙古族自治縣",
"其他"
]
},
{
"name": "伊春",
"area": [
"伊春區",
"帶嶺區",
"南岔區",
"金山屯區",
"西林區",
"美溪區",
"烏馬河區",
"翠巒區",
"友好區",
"上甘嶺區",
"五營區",
"紅星區",
"新青區",
"湯旺河區",
"烏伊嶺區",
"鐵力市",
"嘉蔭縣",
"其他"
]
},
{
"name": "牡丹江",
"area": [
"愛民區",
"東安區",
"陽明區",
"西安區",
"綏芬河市",
"寧安市",
"海林市",
"穆棱市",
"林口縣",
"東寧縣",
"其他"
]
},
{
"name": "佳木斯",
"area": [
"向陽區",
"前進區",
"東風區",
"郊區",
"同江市",
"富錦市",
"樺川縣",
"撫遠縣",
"樺南縣",
"湯原縣",
"其他"
]
},
{
"name": "七臺河",
"area": [
"桃山區",
"新興區",
"茄子河區",
"勃利縣",
"其他"
]
},
{
"name": "黑河",
"area": [
"愛輝區",
"北安市",
"五大連池市",
"遜克縣",
"嫩江縣",
"孫吳縣",
"其他"
]
},
{
"name": "綏化",
"area": [
"北林區",
"安達市",
"肇東市",
"海倫市",
"綏棱縣",
"蘭西縣",
"明水縣",
"青岡縣",
"慶安縣",
"望奎縣",
"其他"
]
},
{
"name": "大興安嶺地區",
"area": [
"呼瑪縣",
"塔河縣",
"漠河縣",
"大興安嶺轄區",
"其他"
]
}
]
},
{
"name": "上海",
"city": [
{
"name": "上海",
"area": [
"黃浦區",
"盧灣區",
"徐匯區",
"長寧區",
"靜安區",
"普陀區",
"閘北區",
"虹口區",
"楊浦區",
"寶山區",
"閔行區",
"嘉定區",
"松江區",
"金山區",
"青浦區",
"南匯區",
"奉賢區",
"浦東新區",
"崇明縣",
"其他"
]
}
]
},
{
"name": "江蘇",
"city": [
{
"name": "南京",
"area": [
"玄武區",
"白下區",
"秦淮區",
"建鄴區",
"鼓樓區",
"下關區",
"棲霞區",
"雨花臺區",
"浦口區",
"江寧區",
"六合區",
"溧水縣",
"高淳縣",
"其他"
]
},
{
"name": "蘇州",
"area": [
"金閶區",
"平江區",
"滄浪區",
"虎丘區",
"吳中區",
"相城區",
"常熟市",
"張家港市",
"昆山市",
"吳江市",
"太倉市",
"其他"
]
},
{
"name": "無錫",
"area": [
"崇安區",
"南長區",
"北塘區",
"濱湖區",
"錫山區",
"惠山區",
"江陰市",
"宜興市",
"其他"
]
},
{
"name": "常州",
"area": [
"鐘樓區",
"天寧區",
"戚墅堰區",
"新北區",
"武進區",
"金壇市",
"溧陽市",
"其他"
]
},
{
"name": "鎮江",
"area": [
"京口區",
"潤州區",
"丹徒區",
"丹陽市",
"揚中市",
"句容市",
"其他"
]
},
{
"name": "南通",
"area": [
"崇川區",
"港閘區",
"通州市",
"如臯市",
"海門市",
"啟東市",
"海安縣",
"如東縣",
"其他"
]
},
{
"name": "泰州",
"area": [
"海陵區",
"高港區",
"姜堰市",
"泰興市",
"靖江市",
"興化市",
"其他"
]
},
{
"name": "揚州",
"area": [
"廣陵區",
"維揚區",
"邗江區",
"江都市",
"儀征市",
"高郵市",
"寶應縣",
"其他"
]
},
{
"name": "鹽城",
"area": [
"亭湖區",
"鹽都區",
"大豐市",
"東臺市",
"建湖縣",
"射陽縣",
"阜寧縣",
"濱海縣",
"響水縣",
"其他"
]
},
{
"name": "連雲港",
"area": [
"新浦區",
"海州區",
"連雲區",
"東海縣",
"灌雲縣",
"贛榆縣",
"灌南縣",
"其他"
]
},
{
"name": "徐州",
"area": [
"雲龍區",
"鼓樓區",
"九裏區",
"泉山區",
"賈汪區",
"邳州市",
"新沂市",
"銅山縣",
"睢寧縣",
"沛縣",
"豐縣",
"其他"
]
},
{
"name": "淮安",
"area": [
"清河區",
"清浦區",
"楚州區",
"淮陰區",
"漣水縣",
"洪澤縣",
"金湖縣",
"盱眙縣",
"其他"
]
},
{
"name": "宿遷",
"area": [
"宿城區",
"宿豫區",
"述陽縣",
"泗陽縣",
"泗洪縣",
"其他"
]
}
]
},
{
"name": "浙江",
"city": [
{
"name": "杭州",
"area": [
"拱墅區",
"西湖區",
"上城區",
"下城區",
"江幹區",
"濱江區",
"余杭區",
"蕭山區",
"建德市",
"富陽市",
"臨安市",
"桐廬縣",
"淳安縣",
"其他"
]
},
{
"name": "寧波",
"area": [
"海曙區",
"江東區",
"江北區",
"鎮海區",
"北侖區",
"鄞州區",
"余姚市",
"慈溪市",
"奉化市",
"寧海縣",
"象山縣",
"其他"
]
},
{
"name": "溫州",
"area": [
"鹿城區",
"龍灣區",
"甌海區",
"瑞安市",
"樂清市",
"永嘉縣",
"洞頭縣",
"平陽縣",
"蒼南縣",
"文成縣",
"泰順縣",
"其他"
]
},
{
"name": "嘉興",
"area": [
"秀城區",
"秀洲區",
"海寧市",
"平湖市",
"桐鄉市",
"嘉善縣",
"海鹽縣",
"其他"
]
},
{
"name": "湖州",
"area": [
"吳興區",
"南潯區",
"長興縣",
"德清縣",
"安吉縣",
"其他"
]
},
{
"name": "紹興",
"area": [
"越城區",
"諸暨市",
"上虞市",
"嵊州市",
"紹興縣",
"新昌縣",
"其他"
]
},
{
"name": "金華",
"area": [
"婺城區",
"金東區",
"蘭溪市",
"義烏市",
"東陽市",
"永康市",
"武義縣",
"浦江縣",
"磐安縣",
"其他"
]
},
{
"name": "衢州",
"area": [
"柯城區",
"衢江區",
"江山市",
"龍遊縣",
"常山縣",
"開化縣",
"其他"
]
},
{
"name": "舟山",
"area": [
"定海區",
"普陀區",
"岱山縣",
"嵊泗縣",
"其他"
]
},
{
"name": "臺州",
"area": [
"椒江區",
"黃巖區",
"路橋區",
"臨海市",
"溫嶺市",
"玉環縣",
"天臺縣",
"仙居縣",
"三門縣",
"其他"
]
},
{
"name": "麗水",
"area": [
"蓮都區",
"龍泉市",
"縉雲縣",
"青田縣",
"雲和縣",
"遂昌縣",
"松陽縣",
"慶元縣",
"景寧畬族自治縣",
"其他"
]
}
]
},
{
"name": "安徽",
"city": [
{
"name": "合肥",
"area": [
"廬陽區",
"瑤海區",
"蜀山區",
"包河區",
"長豐縣",
"肥東縣",
"肥西縣",
"其他"
]
},
{
"name": "蕪湖",
"area": [
"鏡湖區",
"弋江區",
"鳩江區",
"三山區",
"蕪湖縣",
"南陵縣",
"繁昌縣",
"其他"
]
},
{
"name": "蚌埠",
"area": [
"蚌山區",
"龍子湖區",
"禹會區",
"淮上區",
"懷遠縣",
"固鎮縣",
"五河縣",
"其他"
]
},
{
"name": "淮南",
"area": [
"田家庵區",
"大通區",
"謝家集區",
"八公山區",
"潘集區",
"鳳臺縣",
"其他"
]
},
{
"name": "馬鞍山",
"area": [
"雨山區",
"花山區",
"金家莊區",
"當塗縣",
"其他"
]
},
{
"name": "淮北",
"area": [
"相山區",
"杜集區",
"烈山區",
"濉溪縣",
"其他"
]
},
{
"name": "銅陵",
"area": [
"銅官山區",
"獅子山區",
"郊區",
"銅陵縣",
"其他"
]
},
{
"name": "安慶",
"area": [
"迎江區",
"大觀區",
"宜秀區",
"桐城市",
"宿松縣",
"樅陽縣",
"太湖縣",
"懷寧縣",
"嶽西縣",
"望江縣",
"潛山縣",
"其他"
]
},
{
"name": "黃山",
"area": [
"屯溪區",
"黃山區",
"徽州區",
"休寧縣",
"歙縣",
"祁門縣",
"黟縣",
"其他"
]
},
{
"name": "滁州",
"area": [
"瑯琊區",
"南譙區",
"天長市",
"明光市",
"全椒縣",
"來安縣",
"定遠縣",
"鳳陽縣",
"其他"
]
},
{
"name": "阜陽",
"area": [
"潁州區",
"潁東區",
"潁泉區",
"界首市",
"臨泉縣",
"潁上縣",
"阜南縣",
"太和縣",
"其他"
]
},
{
"name": "宿州",
"area": [
"埇橋區",
"蕭縣",
"泗縣",
"碭山縣",
"靈璧縣",
"其他"
]
},
{
"name": "巢湖",
"area": [
"居巢區",
"含山縣",
"無為縣",
"廬江縣",
"和縣",
"其他"
]
},
{
"name": "六安",
"area": [
"金安區",
"裕安區",
"壽縣",
"霍山縣",
"霍邱縣",
"舒城縣",
"金寨縣",
"其他"
]
},
{
"name": "亳州",
"area": [
"譙城區",
"利辛縣",
"渦陽縣",
"蒙城縣",
"其他"
]
},
{
"name": "池州",
"area": [
"貴池區",
"東至縣",
"石臺縣",
"青陽縣",
"其他"
]
},
{
"name": "宣城",
"area": [
"宣州區",
"寧國市",
"廣德縣",
"郎溪縣",
"涇縣",
"旌德縣",
"績溪縣",
"其他"
]
}
]
},
{
"name": "福建",
"city": [
{
"name": "福州",
"area": [
"鼓樓區",
"臺江區",
"倉山區",
"馬尾區",
"晉安區",
"福清市",
"長樂市",
"閩侯縣",
"閩清縣",
"永泰縣",
"連江縣",
"羅源縣",
"平潭縣",
"其他"
]
},
{
"name": "廈門",
"area": [
"思明區",
"海滄區",
"湖裏區",
"集美區",
"同安區",
"翔安區",
"其他"
]
},
{
"name": "莆田",
"area": [
"城廂區",
"涵江區",
"荔城區",
"秀嶼區",
"仙遊縣",
"其他"
]
},
{
"name": "三明",
"area": [
"梅列區",
"三元區",
"永安市",
"明溪縣",
"將樂縣",
"大田縣",
"寧化縣",
"建寧縣",
"沙縣",
"尤溪縣",
"清流縣",
"泰寧縣",
"其他"
]
},
{
"name": "泉州",
"area": [
"鯉城區",
"豐澤區",
"洛江區",
"泉港區",
"石獅市",
"晉江市",
"南安市",
"惠安縣",
"永春縣",
"安溪縣",
"德化縣",
"金門縣",
"其他"
]
},
{
"name": "漳州",
"area": [
"薌城區",
"龍文區",
"龍海市",
"平和縣",
"南靖縣",
"詔安縣",
"漳浦縣",
"華安縣",
"東山縣",
"長泰縣",
"雲霄縣",
"其他"
]
},
{
"name": "南平",
"area": [
"延平區",
"建甌市",
"邵武市",
"武夷山市",
"建陽市",
"松溪縣",
"光澤縣",
"順昌縣",
"浦城縣",
"政和縣",
"其他"
]
},
{
"name": "龍岩",
"area": [
"新羅區",
"漳平市",
"長汀縣",
"武平縣",
"上杭縣",
"永定縣",
"連城縣",
"其他"
]
},
{
"name": "寧德",
"area": [
"蕉城區",
"福安市",
"福鼎市",
"壽寧縣",
"霞浦縣",
"柘榮縣",
"屏南縣",
"古田縣",
"周寧縣",
"其他"
]
}
]
},
{
"name": "江西",
"city": [
{
"name": "南昌",
"area": [
"東湖區",
"西湖區",
"青雲譜區",
"灣裏區",
"青山湖區",
"新建縣",
"南昌縣",
"進賢縣",
"安義縣",
"其他"
]
},
{
"name": "景德鎮",
"area": [
"珠山區",
"昌江區",
"樂平市",
"浮梁縣",
"其他"
]
},
{
"name": "萍鄉",
"area": [
"安源區",
"湘東區",
"蓮花縣",
"上栗縣",
"蘆溪縣",
"其他"
]
},
{
"name": "九江",
"area": [
"潯陽區",
"廬山區",
"瑞昌市",
"九江縣",
"星子縣",
"武寧縣",
"彭澤縣",
"永修縣",
"修水縣",
"湖口縣",
"德安縣",
"都昌縣",
"其他"
]
},
{
"name": "新余",
"area": [
"渝水區",
"分宜縣",
"其他"
]
},
{
"name": "鷹潭",
"area": [
"月湖區",
"貴溪市",
"余江縣",
"其他"
]
},
{
"name": "贛州",
"area": [
"章貢區",
"瑞金市",
"南康市",
"石城縣",
"安遠縣",
"贛縣",
"寧都縣",
"尋烏縣",
"興國縣",
"定南縣",
"上猶縣",
"於都縣",
"龍南縣",
"崇義縣",
"信豐縣",
"全南縣",
"大余縣",
"會昌縣",
"其他"
]
},
{
"name": "吉安",
"area": [
"吉州區",
"青原區",
"井岡山市",
"吉安縣",
"永豐縣",
"永新縣",
"新幹縣",
"泰和縣",
"峽江縣",
"遂川縣",
"安福縣",
"吉水縣",
"萬安縣",
"其他"
]
},
{
"name": "宜春",
"area": [
"袁州區",
"豐城市",
"樟樹市",
"高安市",
"銅鼓縣",
"靖安縣",
"宜豐縣",
"奉新縣",
"萬載縣",
"上高縣",
"其他"
]
},
{
"name": "撫州",
"area": [
"臨川區",
"南豐縣",
"樂安縣",
"金溪縣",
"南城縣",
"東鄉縣",
"資溪縣",
"宜黃縣",
"廣昌縣",
"黎川縣",
"崇仁縣",
"其他"
]
},
{
"name": "上饒",
"area": [
"信州區",
"德興市",
"上饒縣",
"廣豐縣",
"鄱陽縣",
"婺源縣",
"鉛山縣",
"余幹縣",
"橫峰縣",
"弋陽縣",
"玉山縣",
"萬年縣",
"其他"
]
}
]
},
{
"name": "山東",
"city": [
{
"name": "濟南",
"area": [
"市中區",
"歷下區",
"天橋區",
"槐蔭區",
"歷城區",
"長清區",
"章丘市",
"平陰縣",
"濟陽縣",
"商河縣",
"其他"
]
},
{
"name": "青島",
"area": [
"市南區",
"市北區",
"城陽區",
"四方區",
"李滄區",
"黃島區",
"嶗山區",
"膠南市",
"膠州市",
"平度市",
"萊西市",
"即墨市",
"其他"
]
},
{
"name": "淄博",
"area": [
"張店區",
"臨淄區",
"淄川區",
"博山區",
"周村區",
"桓臺縣",
"高青縣",
"沂源縣",
"其他"
]
},
{
"name": "棗莊",
"area": [
"市中區",
"山亭區",
"嶧城區",
"臺兒莊區",
"薛城區",
"滕州市",
"其他"
]
},
{
"name": "東營",
"area": [
"東營區",
"河口區",
"墾利縣",
"廣饒縣",
"利津縣",
"其他"
]
},
{
"name": "煙臺",
"area": [
"芝罘區",
"福山區",
"牟平區",
"萊山區",
"龍口市",
"萊陽市",
"萊州市",
"招遠市",
"蓬萊市",
"棲霞市",
"海陽市",
"長島縣",
"其他"
]
},
{
"name": "濰坊",
"area": [
"濰城區",
"寒亭區",
"坊子區",
"奎文區",
"青州市",
"諸城市",
"壽光市",
"安丘市",
"高密市",
"昌邑市",
"昌樂縣",
"臨朐縣",
"其他"
]
},
{
"name": "濟寧",
"area": [
"市中區",
"任城區",
"曲阜市",
"兗州市",
"鄒城市",
"魚臺縣",
"金鄉縣",
"嘉祥縣",
"微山縣",
"汶上縣",
"泗水縣",
"梁山縣",
"其他"
]
},
{
"name": "泰安",
"area": [
"泰山區",
"岱嶽區",
"新泰市",
"肥城市",
"寧陽縣",
"東平縣",
"其他"
]
},
{
"name": "威海",
"area": [
"環翠區",
"乳山市",
"文登市",
"榮成市",
"其他"
]
},
{
"name": "日照",
"area": [
"東港區",
"嵐山區",
"五蓮縣",
"莒縣",
"其他"
]
},
{
"name": "萊蕪",
"area": [
"萊城區",
"鋼城區",
"其他"
]
},
{
"name": "臨沂",
"area": [
"蘭山區",
"羅莊區",
"河東區",
"沂南縣",
"郯城縣",
"沂水縣",
"蒼山縣",
"費縣",
"平邑縣",
"莒南縣",
"蒙陰縣",
"臨述縣",
"其他"
]
},
{
"name": "德州",
"area": [
"德城區",
"樂陵市",
"禹城市",
"陵縣",
"寧津縣",
"齊河縣",
"武城縣",
"慶雲縣",
"平原縣",
"夏津縣",
"臨邑縣",
"其他"
]
},
{
"name": "聊城",
"area": [
"東昌府區",
"臨清市",
"高唐縣",
"陽谷縣",
"茌平縣",
"莘縣",
"東阿縣",
"冠縣",
"其他"
]
},
{
"name": "濱州",
"area": [
"濱城區",
"鄒平縣",
"沾化縣",
"惠民縣",
"博興縣",
"陽信縣",
"無棣縣",
"其他"
]
},
{
"name": "菏澤",
"area": [
"牡丹區",
"鄄城縣",
"單縣",
"鄆城縣",
"曹縣",
"定陶縣",
"巨野縣",
"東明縣",
"成武縣",
"其他"
]
}
]
},
{
"name": "河南",
"city": [
{
"name": "鄭州",
"area": [
"中原區",
"金水區",
"二七區",
"管城回族區",
"上街區",
"惠濟區",
"鞏義市",
"新鄭市",
"新密市",
"登封市",
"滎陽市",
"中牟縣",
"其他"
]
},
{
"name": "開封",
"area": [
"鼓樓區",
"龍亭區",
"順河回族區",
"禹王臺區",
"金明區",
"開封縣",
"尉氏縣",
"蘭考縣",
"杞縣",
"通許縣",
"其他"
]
},
{
"name": "洛陽",
"area": [
"西工區",
"老城區",
"澗西區",
"纏河回族區",
"洛龍區",
"吉利區",
"偃師市",
"孟津縣",
"汝陽縣",
"伊川縣",
"洛寧縣",
"嵩縣",
"宜陽縣",
"新安縣",
"欒川縣",
"其他"
]
},
{
"name": "平頂山",
"area": [
"新華區",
"衛東區",
"湛河區",
"石龍區",
"汝州市",
"舞鋼市",
"寶豐縣",
"葉縣",
"郟縣",
"魯山縣",
"其他"
]
},
{
"name": "安陽",
"area": [
"北關區",
"文峰區",
"殷都區",
"龍安區",
"林州市",
"安陽縣",
"滑縣",
"內黃縣",
"湯陰縣",
"其他"
]
},
{
"name": "鶴壁",
"area": [
"泣濱區",
"山城區",
"鶴山區",
"浚縣",
"泣縣",
"其他"
]
},
{
"name": "新鄉",
"area": [
"衛濱區",
"紅旗區",
"鳳泉區",
"牧野區",
"衛輝市",
"輝縣市",
"新鄉縣",
"獲嘉縣",
"原陽縣",
"長垣縣",
"封丘縣",
"延津縣",
"其他"
]
},
{
"name": "焦作",
"area": [
"解放區",
"中站區",
"馬村區",
"山陽區",
"沁陽市",
"孟州市",
"修武縣",
"溫縣",
"武陟縣",
"博愛縣",
"其他"
]
},
{
"name": "濮陽",
"area": [
"華龍區",
"濮陽縣",
"南樂縣",
"臺前縣",
"清豐縣",
"範縣",
"其他"
]
},
{
"name": "許昌",
"area": [
"魏都區",
"禹州市",
"長葛市",
"許昌縣",
"鄢陵縣",
"襄城縣",
"其他"
]
},
{
"name": "漯河",
"area": [
"源匯區",
"郾城區",
"召陵區",
"臨潁縣",
"舞陽縣",
"其他"
]
},
{
"name": "三門峽",
"area": [
"湖濱區",
"義馬市",
"靈寶市",
"澠池縣",
"盧氏縣",
"陜縣",
"其他"
]
},
{
"name": "南陽",
"area": [
"臥龍區",
"宛城區",
"鄧州市",
"桐柏縣",
"方城縣",
"浙川縣",
"鎮平縣",
"唐河縣",
"南召縣",
"內鄉縣",
"新野縣",
"社旗縣",
"西峽縣",
"其他"
]
},
{
"name": "商丘",
"area": [
"梁園區",
"睢陽區",
"永城市",
"寧陵縣",
"虞城縣",
"民權縣",
"夏邑縣",
"柘城縣",
"睢縣",
"其他"
]
},
{
"name": "信陽",
"area": [
"獅河區",
"平橋區",
"潢川縣",
"淮濱縣",
"息縣",
"新縣",
"商城縣",
"固始縣",
"羅山縣",
"光山縣",
"其他"
]
},
{
"name": "周口",
"area": [
"川匯區",
"項城市",
"商水縣",
"淮陽縣",
"太康縣",
"鹿邑縣",
"西華縣",
"扶溝縣",
"沈丘縣",
"鄲城縣",
"其他"
]
},
{
"name": "駐馬店",
"area": [
"驛城區",
"確山縣",
"新蔡縣",
"上蔡縣",
"西平縣",
"泌陽縣",
"平輿縣",
"汝南縣",
"遂平縣",
"正陽縣",
"其他"
]
},
{
"name": "焦作",
"area": [
"濟源市",
"其他"
]
}
]
},
{
"name": "湖北",
"city": [
{
"name": "武漢",
"area": [
"江岸區",
"武昌區",
"江漢區",
"硚口區",
"漢陽區",
"青山區",
"洪山區",
"東西湖區",
"漢南區",
"蔡甸區",
"江夏區",
"黃陂區",
"新洲區",
"其他"
]
},
{
"name": "黃石",
"area": [
"黃石港區",
"西塞山區",
"下陸區",
"鐵山區",
"大冶市",
"陽新縣",
"其他"
]
},
{
"name": "十堰",
"area": [
"張灣區",
"茅箭區",
"丹江口市",
"鄖縣",
"竹山縣",
"房縣",
"鄖西縣",
"竹溪縣",
"其他"
]
},
{
"name": "荊州",
"area": [
"沙市區",
"荊州區",
"洪湖市",
"石首市",
"松滋市",
"監利縣",
"公安縣",
"江陵縣",
"其他"
]
},
{
"name": "宜昌",
"area": [
"西陵區",
"伍家崗區",
"點軍區",
"猇亭區",
"夷陵區",
"宜都市",
"當陽市",
"枝江市",
"秭歸縣",
"遠安縣",
"興山縣",
"五峰土家族自治縣",
"長陽土家族自治縣",
"其他"
]
},
{
"name": "襄樊",
"area": [
"襄城區",
"樊城區",
"襄陽區",
"老河口市",
"棗陽市",
"宜城市",
"南漳縣",
"谷城縣",
"保康縣",
"其他"
]
},
{
"name": "鄂州",
"area": [
"鄂城區",
"華容區",
"梁子湖區",
"其他"
]
},
{
"name": "荊門",
"area": [
"東寶區",
"掇刀區",
"鐘祥市",
"京山縣",
"沙洋縣",
"其他"
]
},
{
"name": "孝感",
"area": [
"孝南區",
"應城市",
"安陸市",
"漢川市",
"雲夢縣",
"大悟縣",
"孝昌縣",
"其他"
]
},
{
"name": "黃岡",
"area": [
"黃州區",
"麻城市",
"武穴市",
"紅安縣",
"羅田縣",
"稀水縣",
"蘄春縣",
"黃梅縣",
"英山縣",
"團風縣",
"其他"
]
},
{
"name": "鹹寧",
"area": [
"鹹安區",
"赤壁市",
"嘉魚縣",
"通山縣",
"崇陽縣",
"通城縣",
"其他"
]
},
{
"name": "隨州",
"area": [
"曾都區",
"廣水市",
"其他"
]
},
{
"name": "恩施土家族苗族自治州",
"area": [
"恩施市",
"利川市",
"建始縣",
"來鳳縣",
"巴東縣",
"鶴峰縣",
"宣恩縣",
"鹹豐縣",
"其他"
]
},
{
"name": "仙桃",
"area": [
""
]
},
{
"name": "天門",
"area": [
""
]
},
{
"name": "潛江",
"area": [
""
]
},
{
"name": "神農架林區",
"area": [
""
]
}
]
},
{
"name": "湖南",
"city": [
{
"name": "長沙",
"area": [
"嶽麓區",
"芙蓉區",
"天心區",
"開福區",
"雨花區",
"瀏陽市",
"長沙縣",
"望城縣",
"寧鄉縣",
"其他"
]
},
{
"name": "株洲",
"area": [
"天元區",
"荷塘區",
"蘆淞區",
"石峰區",
"醴陵市",
"株洲縣",
"炎陵縣",
"茶陵縣",
"攸縣",
"其他"
]
},
{
"name": "湘潭",
"area": [
"嶽塘區",
"雨湖區",
"湘鄉市",
"韶山市",
"湘潭縣",
"其他"
]
},
{
"name": "衡陽",
"area": [
"雁峰區",
"珠暉區",
"石鼓區",
"蒸湘區",
"南嶽區",
"耒陽市",
"常寧市",
"衡陽縣",
"衡東縣",
"衡山縣",
"衡南縣",
"祁東縣",
"其他"
]
},
{
"name": "邵陽",
"area": [
"雙清區",
"大祥區",
"北塔區",
"武岡市",
"邵東縣",
"洞口縣",
"新邵縣",
"綏寧縣",
"新寧縣",
"邵陽縣",
"隆回縣",
"城步苗族自治縣",
"其他"
]
},
{
"name": "嶽陽",
"area": [
"嶽陽樓區",
"雲溪區",
"君山區",
"臨湘市",
"淚羅市",
"嶽陽縣",
"湘陰縣",
"平江縣",
"華容縣",
"其他"
]
},
{
"name": "常德",
"area": [
"武陵區",
"鼎城區",
"津市市",
"澧縣",
"臨澧縣",
"桃源縣",
"漢壽縣",
"安鄉縣",
"石門縣",
"其他"
]
},
{
"name": "張家界",
"area": [
"永定區",
"武陵源區",
"慈利縣",
"桑植縣",
"其他"
]
},
{
"name": "益陽",
"area": [
"赫山區",
"資陽區",
"元江市",
"桃江縣",
"南縣",
"安化縣",
"其他"
]
},
{
"name": "郴州",
"area": [
"北湖區",
"蘇仙區",
"資興市",
"宜章縣",
"汝城縣",
"安仁縣",
"嘉禾縣",
"臨武縣",
"桂東縣",
"永興縣",
"桂陽縣",
"其他"
]
},
{
"name": "永州",
"area": [
"冷水灘區",
"零陵區",
"祁陽縣",
"藍山縣",
"寧遠縣",
"新田縣",
"東安縣",
"江永縣",
"道縣",
"雙牌縣",
"江華瑤族自治縣",
"其他"
]
},
{
"name": "懷化",
"area": [
"鶴城區",
"洪江市",
"會同縣",
"元陵縣",
"辰溪縣",
"漵浦縣",
"中方縣",
"新晃侗族自治縣",
"芝江侗族自治縣",
"通道侗族自治縣",
"靖州苗族侗族自治縣",
"麻陽苗族自治縣",
"其他"
]
},
{
"name": "婁底",
"area": [
"婁星區",
"冷水江市",
"漣源市",
"新化縣",
"雙峰縣",
"其他"
]
},
{
"name": "湘西土家族苗族自治州",
"area": [
"吉首市",
"古丈縣",
"龍山縣",
"永順縣",
"鳳凰縣",
"瀘溪縣",
"保靖縣",
"花垣縣",
"其他"
]
}
]
},
{
"name": "廣東",
"city": [
{
"name": "廣州",
"area": [
"越秀區",
"荔灣區",
"海珠區",
"天河區",
"白雲區",
"黃埔區",
"番禺區",
"花都區",
"南沙區",
"蘿崗區",
"增城市",
"從化市",
"其他"
]
},
{
"name": "深圳",
"area": [
"福田區",
"羅湖區",
"南山區",
"寶安區",
"龍崗區",
"鹽田區",
"其他"
]
},
{
"name": "東莞",
"area": [
"莞城",
"常平",
"塘廈",
"其他"
]
},
{
"name": "中山",
"area": [
""
]
},
{
"name": "潮州",
"area": [
"湘橋區",
"潮安縣",
"饒平縣",
"其他"
]
},
{
"name": "揭陽",
"area": [
"榕城區",
"揭東縣",
"揭西縣",
"惠來縣",
"普寧市",
"其他"
]
},
{
"name": "雲浮",
"area": [
"雲城區",
"新興縣",
"郁南縣",
"雲安縣",
"羅定市",
"其他"
]
},
{
"name": "珠海",
"area": [
"香洲區",
"鬥門區",
"金灣區",
"其他"
]
},
{
"name": "汕頭",
"area": [
"金平區",
"豪江區",
"龍湖區",
"潮陽區",
"潮南區",
"澄海區",
"南澳縣",
"其他"
]
},
{
"name": "韶關",
"area": [
"湞江區",
"武江區",
"曲江區",
"樂昌市",
"南雄市",
"始興縣",
"仁化縣",
"翁源縣",
"新豐縣",
"乳源瑤族自治縣",
"其他"
]
},
{
"name": "佛山",
"area": [
"禪城區",
"南海區",
"順德區",
"三水區",
"高明區",
"其他"
]
},
{
"name": "江門",
"area": [
"蓬江區",
"江海區",
"新會區",
"恩平市",
"臺山市",
"開平市",
"鶴山市",
"其他"
]
},
{
"name": "湛江",
"area": [
"赤坎區",
"霞山區",
"坡頭區",
"麻章區",
"吳川市",
"廉江市",
"雷州市",
"遂溪縣",
"徐聞縣",
"其他"
]
},
{
"name": "茂名",
"area": [
"茂南區",
"茂港區",
"化州市",
"信宜市",
"高州市",
"電白縣",
"其他"
]
},
{
"name": "肇慶",
"area": [
"端州區",
"鼎湖區",
"高要市",
"四會市",
"廣寧縣",
"懷集縣",
"封開縣",
"德慶縣",
"其他"
]
},
{
"name": "惠州",
"area": [
"惠城區",
"惠陽區",
"博羅縣",
"惠東縣",
"龍門縣",
"其他"
]
},
{
"name": "梅州",
"area": [
"梅江區",
"興寧市",
"梅縣",
"大埔縣",
"豐順縣",
"五華縣",
"平遠縣",
"蕉嶺縣",
"其他"
]
},
{
"name": "汕尾",
"area": [
"城區",
"陸豐市",
"海豐縣",
"陸河縣",
"其他"
]
},
{
"name": "河源",
"area": [
"源城區",
"紫金縣",
"龍川縣",
"連平縣",
"和平縣",
"東源縣",
"其他"
]
},
{
"name": "陽江",
"area": [
"江城區",
"陽春市",
"陽西縣",
"陽東縣",
"其他"
]
},
{
"name": "清遠",
"area": [
"清城區",
"英德市",
"連州市",
"佛岡縣",
"陽山縣",
"清新縣",
"連山壯族瑤族自治縣",
"連南瑤族自治縣",
"其他"
]
}
]
},
{
"name": "廣西",
"city": [
{
"name": "南寧",
"area": [
"青秀區",
"興寧區",
"西鄉塘區",
"良慶區",
"江南區",
"邕寧區",
"武鳴縣",
"隆安縣",
"馬山縣",
"上林縣",
"賓陽縣",
"橫縣",
"其他"
]
},
{
"name": "柳州",
"area": [
"城中區",
"魚峰區",
"柳北區",
"柳南區",
"柳江縣",
"柳城縣",
"鹿寨縣",
"融安縣",
"融水苗族自治縣",
"三江侗族自治縣",
"其他"
]
},
{
"name": "桂林",
"area": [
"象山區",
"秀峰區",
"疊彩區",
"七星區",
"雁山區",
"陽朔縣",
"臨桂縣",
"靈川縣",
"全州縣",
"平樂縣",
"興安縣",
"灌陽縣",
"荔浦縣",
"資源縣",
"永福縣",
"龍勝各族自治縣",
"恭城瑤族自治縣",
"其他"
]
},
{
"name": "梧州",
"area": [
"萬秀區",
"蝶山區",
"長洲區",
"岑溪市",
"蒼梧縣",
"藤縣",
"蒙山縣",
"其他"
]
},
{
"name": "北海",
"area": [
"海城區",
"銀海區",
"鐵山港區",
"合浦縣",
"其他"
]
},
{
"name": "防城港",
"area": [
"港口區",
"防城區",
"東興市",
"上思縣",
"其他"
]
},
{
"name": "欽州",
"area": [
"欽南區",
"欽北區",
"靈山縣",
"浦北縣",
"其他"
]
},
{
"name": "貴港",
"area": [
"港北區",
"港南區",
"覃塘區",
"桂平市",
"平南縣",
"其他"
]
},
{
"name": "玉林",
"area": [
"玉州區",
"北流市",
"容縣",
"陸川縣",
"博白縣",
"興業縣",
"其他"
]
},
{
"name": "百色",
"area": [
"右江區",
"淩雲縣",
"平果縣",
"西林縣",
"樂業縣",
"德保縣",
"田林縣",
"田陽縣",
"靖西縣",
"田東縣",
"那坡縣",
"隆林各族自治縣",
"其他"
]
},
{
"name": "賀州",
"area": [
"八步區",
"鐘山縣",
"昭平縣",
"富川瑤族自治縣",
"其他"
]
},
{
"name": "河池",
"area": [
"金城江區",
"宜州市",
"天峨縣",
"鳳山縣",
"南丹縣",
"東蘭縣",
"都安瑤族自治縣",
"羅城仫佬族自治縣",
"巴馬瑤族自治縣",
"環江毛南族自治縣",
"大化瑤族自治縣",
"其他"
]
},
{
"name": "來賓",
"area": [
"興賓區",
"合山市",
"象州縣",
"武宣縣",
"忻城縣",
"金秀瑤族自治縣",
"其他"
]
},
{
"name": "崇左",
"area": [
"江州區",
"憑祥市",
"寧明縣",
"扶綏縣",
"龍州縣",
"大新縣",
"天等縣",
"其他"
]
}
]
},
{
"name": "海南",
"city": [
{
"name": "海口",
"area": [
"龍華區",
"秀英區",
"瓊山區",
"美蘭區",
"其他"
]
},
{
"name": "三亞",
"area": [
"三亞市",
"其他"
]
},
{
"name": "五指山",
"area": [
""
]
},
{
"name": "瓊海",
"area": [
""
]
},
{
"name": "儋州",
"area": [
""
]
},
{
"name": "文昌",
"area": [
""
]
},
{
"name": "萬寧",
"area": [
""
]
},
{
"name": "東方",
"area": [
""
]
},
{
"name": "澄邁縣",
"area": [
""
]
},
{
"name": "定安縣",
"area": [
""
]
},
{
"name": "屯昌縣",
"area": [
""
]
},
{
"name": "臨高縣",
"area": [
""
]
},
{
"name": "白沙黎族自治縣",
"area": [
""
]
},
{
"name": "昌江黎族自治縣",
"area": [
""
]
},
{
"name": "樂東黎族自治縣",
"area": [
""
]
},
{
"name": "陵水黎族自治縣",
"area": [
""
]
},
{
"name": "保亭黎族苗族自治縣",
"area": [
""
]
},
{
"name": "瓊中黎族苗族自治縣",
"area": [
""
]
}
]
},
{
"name": "重慶",
"city": [
{
"name": "重慶",
"area": [
"渝中區",
"大渡口區",
"江北區",
"南岸區",
"北碚區",
"渝北區",
"巴南區",
"長壽區",
"雙橋區",
"沙坪壩區",
"萬盛區",
"萬州區",
"涪陵區",
"黔江區",
"永川區",
"合川區",
"江津區",
"九龍坡區",
"南川區",
"綦江縣",
"潼南縣",
"榮昌縣",
"璧山縣",
"大足縣",
"銅梁縣",
"梁平縣",
"開縣",
"忠縣",
"城口縣",
"墊江縣",
"武隆縣",
"豐都縣",
"奉節縣",
"雲陽縣",
"巫溪縣",
"巫山縣",
"石柱土家族自治縣",
"秀山土家族苗族自治縣",
"酉陽土家族苗族自治縣",
"彭水苗族土家族自治縣",
"其他"
]
}
]
},
{
"name": "四川",
"city": [
{
"name": "成都",
"area": [
"青羊區",
"錦江區",
"金牛區",
"武侯區",
"成華區",
"龍泉驛區",
"青白江區",
"新都區",
"溫江區",
"都江堰市",
"彭州市",
"邛崍市",
"崇州市",
"金堂縣",
"郫縣",
"新津縣",
"雙流縣",
"蒲江縣",
"大邑縣",
"其他"
]
},
{
"name": "自貢",
"area": [
"大安區",
"自流井區",
"貢井區",
"沿灘區",
"榮縣",
"富順縣",
"其他"
]
},
{
"name": "攀枝花",
"area": [
"仁和區",
"米易縣",
"鹽邊縣",
"東區",
"西區",
"其他"
]
},
{
"name": "瀘州",
"area": [
"江陽區",
"納溪區",
"龍馬潭區",
"瀘縣",
"合江縣",
"敘永縣",
"古藺縣",
"其他"
]
},
{
"name": "德陽",
"area": [
"旌陽區",
"廣漢市",
"什邡市",
"綿竹市",
"羅江縣",
"中江縣",
"其他"
]
},
{
"name": "綿陽",
"area": [
"涪城區",
"遊仙區",
"江油市",
"鹽亭縣",
"三臺縣",
"平武縣",
"安縣",
"梓潼縣",
"北川羌族自治縣",
"其他"
]
},
{
"name": "廣元",
"area": [
"元壩區",
"朝天區",
"青川縣",
"旺蒼縣",
"劍閣縣",
"蒼溪縣",
"市中區",
"其他"
]
},
{
"name": "遂寧",
"area": [
"船山區",
"安居區",
"射洪縣",
"蓬溪縣",
"大英縣",
"其他"
]
},
{
"name": "內江",
"area": [
"市中區",
"東興區",
"資中縣",
"隆昌縣",
"威遠縣",
"其他"
]
},
{
"name": "樂山",
"area": [
"市中區",
"五通橋區",
"沙灣區",
"金口河區",
"峨眉山市",
"夾江縣",
"井研縣",
"犍為縣",
"沐川縣",
"馬邊彜族自治縣",
"峨邊彜族自治縣",
"其他"
]
},
{
"name": "南充",
"area": [
"順慶區",
"高坪區",
"嘉陵區",
"閬中市",
"營山縣",
"蓬安縣",
"儀隴縣",
"南部縣",
"西充縣",
"其他"
]
},
{
"name": "眉山",
"area": [
"東坡區",
"仁壽縣",
"彭山縣",
"洪雅縣",
"丹棱縣",
"青神縣",
"其他"
]
},
{
"name": "宜賓",
"area": [
"翠屏區",
"宜賓縣",
"興文縣",
"南溪縣",
"拱縣",
"長寧縣",
"高縣",
"江安縣",
"筠連縣",
"屏山縣",
"其他"
]
},
{
"name": "廣安",
"area": [
"廣安區",
"華鎣市",
"嶽池縣",
"鄰水縣",
"武勝縣",
"其他"
]
},
{
"name": "達州",
"area": [
"通川區",
"萬源市",
"達縣",
"渠縣",
"宣漢縣",
"開江縣",
"大竹縣",
"其他"
]
},
{
"name": "雅安",
"area": [
"雨城區",
"蘆山縣",
"石棉縣",
"名山縣",
"天全縣",
"滎經縣",
"寶興縣",
"漢源縣",
"其他"
]
},
{
"name": "巴中",
"area": [
"巴州區",
"南江縣",
"平昌縣",
"通江縣",
"其他"
]
},
{
"name": "資陽",
"area": [
"雁江區",
"簡陽市",
"安嶽縣",
"樂至縣",
"其他"
]
},
{
"name": "阿壩藏族羌族自治州",
"area": [
"馬爾康縣",
"九寨溝縣",
"紅原縣",
"汶川縣",
"阿壩縣",
"理縣",
"若爾蓋縣",
"小金縣",
"黑水縣",
"金川縣",
"松潘縣",
"壤塘縣",
"茂縣",
"其他"
]
},
{
"name": "甘孜藏族自治州",
"area": [
"康定縣",
"丹巴縣",
"爐霍縣",
"九龍縣",
"甘孜縣",
"雅江縣",
"新龍縣",
"道孚縣",
"白玉縣",
"理塘縣",
"德格縣",
"鄉城縣",
"石渠縣",
"稻城縣",
"色達縣",
"巴塘縣",
"瀘定縣",
"得榮縣",
"其他"
]
},
{
"name": "涼山彜族自治州",
"area": [
"西昌市",
"美姑縣",
"昭覺縣",
"金陽縣",
"甘洛縣",
"布拖縣",
"雷波縣",
"普格縣",
"寧南縣",
"喜德縣",
"會東縣",
"越西縣",
"會理縣",
"鹽源縣",
"德昌縣",
"冕寧縣",
"木裏藏族自治縣",
"其他"
]
}
]
},
{
"name": "貴州",
"city": [
{
"name": "貴陽",
"area": [
"南明區",
"雲巖區",
"花溪區",
"烏當區",
"白雲區",
"小河區",
"清鎮市",
"開陽縣",
"修文縣",
"息烽縣",
"其他"
]
},
{
"name": "六盤水",
"area": [
"鐘山區",
"水城縣",
"盤縣",
"六枝特區",
"其他"
]
},
{
"name": "遵義",
"area": [
"紅花崗區",
"匯川區",
"赤水市",
"仁懷市",
"遵義縣",
"綏陽縣",
"桐梓縣",
"習水縣",
"鳳岡縣",
"正安縣",
"余慶縣",
"湄潭縣",
"道真仡佬族苗族自治縣",
"務川仡佬族苗族自治縣",
"其他"
]
},
{
"name": "安順",
"area": [
"西秀區",
"普定縣",
"平壩縣",
"鎮寧布依族苗族自治縣",
"紫雲苗族布依族自治縣",
"關嶺布依族苗族自治縣",
"其他"
]
},
{
"name": "銅仁地區",
"area": [
"銅仁市",
"德江縣",
"江口縣",
"思南縣",
"石阡縣",
"玉屏侗族自治縣",
"松桃苗族自治縣",
"印江土家族苗族自治縣",
"沿河土家族自治縣",
"萬山特區",
"其他"
]
},
{
"name": "畢節地區",
"area": [
"畢節市",
"黔西縣",
"大方縣",
"織金縣",
"金沙縣",
"赫章縣",
"納雍縣",
"威寧彜族回族苗族自治縣",
"其他"
]
},
{
"name": "黔西南布依族苗族自治州",
"area": [
"興義市",
"望謨縣",
"興仁縣",
"普安縣",
"冊亨縣",
"晴隆縣",
"貞豐縣",
"安龍縣",
"其他"
]
},
{
"name": "黔東南苗族侗族自治州",
"area": [
"凱裏市",
"施秉縣",
"從江縣",
"錦屏縣",
"鎮遠縣",
"麻江縣",
"臺江縣",
"天柱縣",
"黃平縣",
"榕江縣",
"劍河縣",
"三穗縣",
"雷山縣",
"黎平縣",
"岑鞏縣",
"丹寨縣",
"其他"
]
},
{
"name": "黔南布依族苗族自治州",
"area": [
"都勻市",
"福泉市",
"貴定縣",
"惠水縣",
"羅甸縣",
"甕安縣",
"荔波縣",
"龍裏縣",
"平塘縣",
"長順縣",
"獨山縣",
"三都水族自治縣",
"其他"
]
}
]
},
{
"name": "雲南",
"city": [
{
"name": "昆明",
"area": [
"盤龍區",
"五華區",
"官渡區",
"西山區",
"東川區",
"安寧市",
"呈貢縣",
"晉寧縣",
"富民縣",
"宜良縣",
"嵩明縣",
"石林彜族自治縣",
"祿勸彜族苗族自治縣",
"尋甸回族彜族自治縣",
"其他"
]
},
{
"name": "曲靖",
"area": [
"麒麟區",
"宣威市",
"馬龍縣",
"沾益縣",
"富源縣",
"羅平縣",
"師宗縣",
"陸良縣",
"會澤縣",
"其他"
]
},
{
"name": "玉溪",
"area": [
"紅塔區",
"江川縣",
"澄江縣",
"通海縣",
"華寧縣",
"易門縣",
"峨山彜族自治縣",
"新平彜族傣族自治縣",
"元江哈尼族彜族傣族自治縣",
"其他"
]
},
{
"name": "保山",
"area": [
"隆陽區",
"施甸縣",
"騰沖縣",
"龍陵縣",
"昌寧縣",
"其他"
]
},
{
"name": "昭通",
"area": [
"昭陽區",
"魯甸縣",
"巧家縣",
"鹽津縣",
"大關縣",
"永善縣",
"綏江縣",
"鎮雄縣",
"彜良縣",
"威信縣",
"水富縣",
"其他"
]
},
{
"name": "麗江",
"area": [
"古城區",
"永勝縣",
"華坪縣",
"玉龍納西族自治縣",
"寧蒗彜族自治縣",
"其他"
]
},
{
"name": "普洱",
"area": [
"思茅區",
"普洱哈尼族彜族自治縣",
"墨江哈尼族自治縣",
"景東彜族自治縣",
"景谷傣族彜族自治縣",
"鎮元彜族哈尼族拉祜族自治縣",
"江城哈尼族彜族自治縣",
"孟連傣族拉祜族佤族自治縣",
"瀾滄拉祜族自治縣",
"西盟佤族自治縣",
"其他"
]
},
{
"name": "臨滄",
"area": [
"臨翔區",
"鳳慶縣",
"雲縣",
"永德縣",
"鎮康縣",
"雙江拉祜族佤族布朗族傣族自治縣",
"耿馬傣族佤族自治縣",
"滄源佤族自治縣",
"其他"
]
},
{
"name": "德宏傣族景頗族自治州",
"area": [
"潞西市",
"瑞麗市",
"梁河縣",
"盈江縣",
"隴川縣",
"其他"
]
},
{
"name": "怒江傈僳族自治州",
"area": [
"瀘水縣",
"福貢縣",
"貢山獨龍族怒族自治縣",
"蘭坪白族普米族自治縣",
"其他"
]
},
{
"name": "迪慶藏族自治州",
"area": [
"香格裏拉縣",
"德欽縣",
"維西傈僳族自治縣",
"其他"
]
},
{
"name": "大理白族自治州",
"area": [
"大理市",
"祥雲縣",
"賓川縣",
"彌渡縣",
"永平縣",
"雲龍縣",
"洱源縣",
"劍川縣",
"鶴慶縣",
"漾濞彜族自治縣",
"南澗彜族自治縣",
"巍山彜族回族自治縣",
"其他"
]
},
{
"name": "楚雄彜族自治州",
"area": [
"楚雄市",
"雙柏縣",
"牟定縣",
"南華縣",
"姚安縣",
"大姚縣",
"永仁縣",
"元謀縣",
"武定縣",
"祿豐縣",
"其他"
]
},
{
"name": "紅河哈尼族彜族自治州",
"area": [
"蒙自縣",
"個舊市",
"開遠市",
"綠春縣",
"建水縣",
"石屏縣",
"彌勒縣",
"瀘西縣",
"元陽縣",
"紅河縣",
"金平苗族瑤族傣族自治縣",
"河口瑤族自治縣",
"屏邊苗族自治縣",
"其他"
]
},
{
"name": "文山壯族苗族自治州",
"area": [
"文山縣",
"硯山縣",
"西疇縣",
"麻栗坡縣",
"馬關縣",
"丘北縣",
"廣南縣",
"富寧縣",
"其他"
]
},
{
"name": "西雙版納傣族自治州",
"area": [
"景洪市",
"猛海縣",
"猛臘縣",
"其他"
]
}
]
},
{
"name": "西藏",
"city": [
{
"name": "拉薩",
"area": [
"城關區",
"林周縣",
"當雄縣",
"尼木縣",
"曲水縣",
"堆龍德慶縣",
"達孜縣",
"墨竹工卡縣",
"其他"
]
},
{
"name": "那曲地區",
"area": [
"那曲縣",
"嘉黎縣",
"比如縣",
"聶榮縣",
"安多縣",
"申紮縣",
"索縣",
"班戈縣",
"巴青縣",
"尼瑪縣",
"其他"
]
},
{
"name": "昌都地區",
"area": [
"昌都縣",
"江達縣",
"貢覺縣",
"類烏齊縣",
"丁青縣",
"察雅縣",
"八宿縣",
"左貢縣",
"芒康縣",
"洛隆縣",
"邊壩縣",
"其他"
]
},
{
"name": "林芝地區",
"area": [
"林芝縣",
"工布江達縣",
"米林縣",
"墨脫縣",
"波密縣",
"察隅縣",
"朗縣",
"其他"
]
},
{
"name": "山南地區",
"area": [
"乃東縣",
"紮囊縣",
"貢嘎縣",
"桑日縣",
"瓊結縣",
"曲松縣",
"措美縣",
"洛紮縣",
"加查縣",
"隆子縣",
"錯那縣",
"浪卡子縣",
"其他"
]
},
{
"name": "日喀則地區",
"area": [
"日喀則市",
"南木林縣",
"江孜縣",
"定日縣",
"薩迦縣",
"拉孜縣",
"昂仁縣",
"謝通門縣",
"白朗縣",
"仁布縣",
"康馬縣",
"定結縣",
"仲巴縣",
"亞東縣",
"吉隆縣",
"聶拉木縣",
"薩嘎縣",
"崗巴縣",
"其他"
]
},
{
"name": "阿裏地區",
"area": [
"噶爾縣",
"普蘭縣",
"劄達縣",
"日土縣",
"革吉縣",
"改則縣",
"措勤縣",
"其他"
]
}
]
},
{
"name": "陝西",
"city": [
{
"name": "西安",
"area": [
"蓮湖區",
"新城區",
"碑林區",
"雁塔區",
"灞橋區",
"未央區",
"閻良區",
"臨潼區",
"長安區",
"高陵縣",
"藍田縣",
"戶縣",
"周至縣",
"其他"
]
},
{
"name": "銅川",
"area": [
"耀州區",
"王益區",
"印臺區",
"宜君縣",
"其他"
]
},
{
"name": "寶雞",
"area": [
"渭濱區",
"金臺區",
"陳倉區",
"岐山縣",
"鳳翔縣",
"隴縣",
"太白縣",
"麟遊縣",
"扶風縣",
"千陽縣",
"眉縣",
"鳳縣",
"其他"
]
},
{
"name": "鹹陽",
"area": [
"秦都區",
"渭城區",
"楊陵區",
"興平市",
"禮泉縣",
"涇陽縣",
"永壽縣",
"三原縣",
"彬縣",
"旬邑縣",
"長武縣",
"乾縣",
"武功縣",
"淳化縣",
"其他"
]
},
{
"name": "渭南",
"area": [
"臨渭區",
"韓城市",
"華陰市",
"蒲城縣",
"潼關縣",
"白水縣",
"澄城縣",
"華縣",
"合陽縣",
"富平縣",
"大荔縣",
"其他"
]
},
{
"name": "延安",
"area": [
"寶塔區",
"安塞縣",
"洛川縣",
"子長縣",
"黃陵縣",
"延川縣",
"富縣",
"延長縣",
"甘泉縣",
"宜川縣",
"誌丹縣",
"黃龍縣",
"吳起縣",
"其他"
]
},
{
"name": "漢中",
"area": [
"漢臺區",
"留壩縣",
"鎮巴縣",
"城固縣",
"南鄭縣",
"洋縣",
"寧強縣",
"佛坪縣",
"勉縣",
"西鄉縣",
"略陽縣",
"其他"
]
},
{
"name": "榆林",
"area": [
"榆陽區",
"清澗縣",
"綏德縣",
"神木縣",
"佳縣",
"府谷縣",
"子洲縣",
"靖邊縣",
"橫山縣",
"米脂縣",
"吳堡縣",
"定邊縣",
"其他"
]
},
{
"name": "安康",
"area": [
"漢濱區",
"紫陽縣",
"嵐臯縣",
"旬陽縣",
"鎮坪縣",
"平利縣",
"石泉縣",
"寧陜縣",
"白河縣",
"漢陰縣",
"其他"
]
},
{
"name": "商洛",
"area": [
"商州區",
"鎮安縣",
"山陽縣",
"洛南縣",
"商南縣",
"丹鳳縣",
"柞水縣",
"其他"
]
}
]
},
{
"name": "甘肅",
"city": [
{
"name": "蘭州",
"area": [
"城關區",
"七裏河區",
"西固區",
"安寧區",
"紅古區",
"永登縣",
"臯蘭縣",
"榆中縣",
"其他"
]
},
{
"name": "嘉峪關",
"area": [
"嘉峪關市",
"其他"
]
},
{
"name": "金昌",
"area": [
"金川區",
"永昌縣",
"其他"
]
},
{
"name": "白銀",
"area": [
"白銀區",
"平川區",
"靖遠縣",
"會寧縣",
"景泰縣",
"其他"
]
},
{
"name": "天水",
"area": [
"清水縣",
"秦安縣",
"甘谷縣",
"武山縣",
"張家川回族自治縣",
"北道區",
"秦城區",
"其他"
]
},
{
"name": "武威",
"area": [
"涼州區",
"民勤縣",
"古浪縣",
"天祝藏族自治縣",
"其他"
]
},
{
"name": "酒泉",
"area": [
"肅州區",
"玉門市",
"敦煌市",
"金塔縣",
"肅北蒙古族自治縣",
"阿克塞哈薩克族自治縣",
"安西縣",
"其他"
]
},
{
"name": "張掖",
"area": [
"甘州區",
"民樂縣",
"臨澤縣",
"高臺縣",
"山丹縣",
"肅南裕固族自治縣",
"其他"
]
},
{
"name": "慶陽",
"area": [
"西峰區",
"慶城縣",
"環縣",
"華池縣",
"合水縣",
"正寧縣",
"寧縣",
"鎮原縣",
"其他"
]
},
{
"name": "平涼",
"area": [
"崆峒區",
"涇川縣",
"靈臺縣",
"崇信縣",
"華亭縣",
"莊浪縣",
"靜寧縣",
"其他"
]
},
{
"name": "定西",
"area": [
"安定區",
"通渭縣",
"臨桃縣",
"漳縣",
"岷縣",
"渭源縣",
"隴西縣",
"其他"
]
},
{
"name": "隴南",
"area": [
"武都區",
"成縣",
"宕昌縣",
"康縣",
"文縣",
"西和縣",
"禮縣",
"兩當縣",
"徽縣",
"其他"
]
},
{
"name": "臨夏回族自治州",
"area": [
"臨夏市",
"臨夏縣",
"康樂縣",
"永靖縣",
"廣河縣",
"和政縣",
"東鄉族自治縣",
"積石山保安族東鄉族撒拉族自治縣",
"其他"
]
},
{
"name": "甘南藏族自治州",
"area": [
"合作市",
"臨潭縣",
"卓尼縣",
"舟曲縣",
"叠部縣",
"瑪曲縣",
"碌曲縣",
"夏河縣",
"其他"
]
}
]
},
{
"name": "青海",
"city": [
{
"name": "西寧",
"area": [
"城中區",
"城東區",
"城西區",
"城北區",
"湟源縣",
"湟中縣",
"大通回族土族自治縣",
"其他"
]
},
{
"name": "海東地區",
"area": [
"平安縣",
"樂都縣",
"民和回族土族自治縣",
"互助土族自治縣",
"化隆回族自治縣",
"循化撒拉族自治縣",
"其他"
]
},
{
"name": "海北藏族自治州",
"area": [
"海晏縣",
"祁連縣",
"剛察縣",
"門源回族自治縣",
"其他"
]
},
{
"name": "海南藏族自治州",
"area": [
"共和縣",
"同德縣",
"貴德縣",
"興海縣",
"貴南縣",
"其他"
]
},
{
"name": "黃南藏族自治州",
"area": [
"同仁縣",
"尖紮縣",
"澤庫縣",
"河南蒙古族自治縣",
"其他"
]
},
{
"name": "果洛藏族自治州",
"area": [
"瑪沁縣",
"班瑪縣",
"甘德縣",
"達日縣",
"久治縣",
"瑪多縣",
"其他"
]
},
{
"name": "玉樹藏族自治州",
"area": [
"玉樹縣",
"雜多縣",
"稱多縣",
"治多縣",
"囊謙縣",
"曲麻萊縣",
"其他"
]
},
{
"name": "海西蒙古族藏族自治州",
"area": [
"德令哈市",
"格爾木市",
"烏蘭縣",
"都蘭縣",
"天峻縣",
"其他"
]
}
]
},
{
"name": "寧夏",
"city": [
{
"name": "銀川",
"area": [
"興慶區",
"西夏區",
"金鳳區",
"靈武市",
"永寧縣",
"賀蘭縣",
"其他"
]
},
{
"name": "石嘴山",
"area": [
"大武口區",
"惠農區",
"平羅縣",
"其他"
]
},
{
"name": "吳忠",
"area": [
"利通區",
"青銅峽市",
"鹽池縣",
"同心縣",
"其他"
]
},
{
"name": "固原",
"area": [
"原州區",
"西吉縣",
"隆德縣",
"涇源縣",
"彭陽縣",
"其他"
]
},
{
"name": "中衛",
"area": [
"沙坡頭區",
"中寧縣",
"海原縣",
"其他"
]
}
]
},
{
"name": "新疆",
"city": [
{
"name": "烏魯木齊",
"area": [
"天山區",
"沙依巴克區",
"新市區",
"水磨溝區",
"頭屯河區",
"達阪城區",
"東山區",
"烏魯木齊縣",
"其他"
]
},
{
"name": "克拉瑪依",
"area": [
"克拉瑪依區",
"獨山子區",
"白堿灘區",
"烏爾禾區",
"其他"
]
},
{
"name": "吐魯番地區",
"area": [
"吐魯番市",
"托克遜縣",
"鄯善縣",
"其他"
]
},
{
"name": "哈密地區",
"area": [
"哈密市",
"伊吾縣",
"巴裏坤哈薩克自治縣",
"其他"
]
},
{
"name": "和田地區",
"area": [
"和田市",
"和田縣",
"洛浦縣",
"民豐縣",
"皮山縣",
"策勒縣",
"於田縣",
"墨玉縣",
"其他"
]
},
{
"name": "阿克蘇地區",
"area": [
"阿克蘇市",
"溫宿縣",
"沙雅縣",
"拜城縣",
"阿瓦提縣",
"庫車縣",
"柯坪縣",
"新和縣",
"烏什縣",
"其他"
]
},
{
"name": "喀什地區",
"area": [
"喀什市",
"巴楚縣",
"澤普縣",
"伽師縣",
"葉城縣",
"嶽普湖縣",
"疏勒縣",
"麥蓋提縣",
"英吉沙縣",
"莎車縣",
"疏附縣",
"塔什庫爾幹塔吉克自治縣",
"其他"
]
},
{
"name": "克孜勒蘇柯爾克孜自治州",
"area": [
"阿圖什市",
"阿合奇縣",
"烏恰縣",
"阿克陶縣",
"其他"
]
},
{
"name": "巴音郭楞蒙古自治州",
"area": [
"庫爾勒市",
"和靜縣",
"尉犁縣",
"和碩縣",
"且末縣",
"博湖縣",
"輪臺縣",
"若羌縣",
"焉耆回族自治縣",
"其他"
]
},
{
"name": "昌吉回族自治州",
"area": [
"昌吉市",
"阜康市",
"奇臺縣",
"瑪納斯縣",
"吉木薩爾縣",
"呼圖壁縣",
"木壘哈薩克自治縣",
"米泉市",
"其他"
]
},
{
"name": "博爾塔拉蒙古自治州",
"area": [
"博樂市",
"精河縣",
"溫泉縣",
"其他"
]
},
{
"name": "石河子",
"area": [
""
]
},
{
"name": "阿拉爾",
"area": [
""
]
},
{
"name": "圖木舒克",
"area": [
""
]
},
{
"name": "五家渠",
"area": [
""
]
},
{
"name": "伊犁哈薩克自治州",
"area": [
"伊寧市",
"奎屯市",
"伊寧縣",
"特克斯縣",
"尼勒克縣",
"昭蘇縣",
"新源縣",
"霍城縣",
"鞏留縣",
"察布查爾錫伯自治縣",
"塔城地區",
"阿勒泰地區",
"其他"
]
}
]
},
{
"name": "其他",
"city": [
{
"name": "",
"area": [
""
]
}
]
}
]
================================================
FILE: example/src/MainPage.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
TouchableOpacity,
Modal
} from 'react-native';
import {
BaseComponent,
BaseDialog,
AreaPicker,
CustomPicker,
DatePicker,
InputDialog,
PickerView,
SimpleChooseDialog,
SimpleItemsDialog,
AlertDialog,
DownloadDialog,
ToastComponent
} from 'react-native-pickers';
import AreaJson from './Area.json';
export default class MainPage extends BaseComponent {
constructor(props) {
super(props);
this.state = {
unit: ['年', '月', '日'],
startYear: 1900,
active: false,
modalVisible: false
}
}
startDownload() {
let count = 0;
this.setState({ active: false })
this.interval = setInterval(() => {
if (count > 100) {
//下载完成
this.setState({ active: true })
clearInterval(this.interval);
return;
}
this.DownloadDialog.setProcess(count / 100, '4.23MB');
count++;
count++;
}, 100);
}
renderButton(text, callback) {
return
{text}
}
render() {
return
{this.renderButton('AlertDialog', () => { this.AlertDialog.show() })}
{this.renderButton('SimpleItemsDialog', () => { this.SimpleItemsDialog.show() })}
{this.renderButton('SimpleChooseDialog', () => { this.SimpleChooseDialog.show() })}
{this.renderButton('InputDialog', () => { this.InputDialog.show() })}
{this.renderButton('最简单的自定义picker', () => { this.CustomPicker.show() })}
{this.renderButton('行政区域picker', () => { this.AreaPicker.show() })}
{this.renderButton('DatePicker', () => { this.DatePicker.show() })}
{this.renderButton('DatePicker1', () => { this.DatePicker1.show() })}
{this.renderButton('实现全屏覆盖', () => { console.log('xxxxx'); this.setState({modalVisible: true}, ()=>{this.SimpleChooseDialog1.show();}); })}
{this.renderButton('下载进度', () => {
this.DownloadDialog.show();
this.startDownload();
})}
{this.renderButton('showToast', () => {
this.ToastComponent.show('给个星星呗~')
})}
{
alert(isOK ? 'ok' : 'cancel');
}} ref={ref => this.AlertDialog = ref} />
this.SimpleItemsDialog = ref}
onPress={(which) => {
alert(which)
}} />
this.SimpleChooseDialog = ref}
onPress={(which) => { alert(which) }} />
this.InputDialog = ref}
onSubmit={(text) => { alert(text) }} />
this.CustomPicker = ref} />
{ }}
onPickerConfirm={(value) => {
alert(JSON.stringify(value));
}}
ref={ref => this.AreaPicker = ref} />
{
alert(JSON.stringify(value))
}}
onPickerCancel={() => {
alert('cancel')
}}
ref={ref => this.DatePicker = ref} />
{
alert(JSON.stringify(value))
}}
onPickerCancel={() => {
alert('cancel')
}}
ref={ref => this.DatePicker1 = ref} />
{ alert('打开') }}
onCoverPress={() => { this.interval && clearInterval(this.interval) }}
ref={ref => this.DownloadDialog = ref} />
this.ToastComponent = ref} />
{
}}
>
this.SimpleChooseDialog1 = ref}
onCoverPress={()=>{
this.setState({modalVisible: false});
}}
onPress={(which) => {
console.log(which);
this.setState({modalVisible: false});
}} />
}
}
================================================
FILE: index.js
================================================
import AlertDialog from './view/AlertDialog';
import AreaPicker from './view/AreaPicker';
import CustomPicker from './CustomPicker';
import DatePicker from './view/DatePicker';
import InputDialog from './view/InputDialog';
import SimpleChooseDialog from './view/SimpleChooseDialog';
import SimpleItemsDialog from './view/SimpleItemsDialog';
import BaseComponent from './view/BaseComponent';
import BaseDialog from './view/BaseDialog';
import PickerView from './view/PickerView';
import DownloadDialog from './view/DownloadDialog';
import ToastComponent from './view/ToastComponent';
export {
BaseComponent,
BaseDialog,
AreaPicker,
CustomPicker,
DatePicker,
InputDialog,
PickerView,
SimpleChooseDialog,
SimpleItemsDialog,
AlertDialog,
DownloadDialog,
ToastComponent
};
================================================
FILE: package.json
================================================
{
"name": "react-native-pickers",
"version": "2.0.0",
"description": "纯JS实现的React-Native 各种弹窗、日期选择控件、地址选择控件等",
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://github.com/iberHK/react-native-picker.git"
},
"bugs": {
"url": "https://github.com/iberHK/react-native-picker/issues"
},
"homepage": "https://github.com/iberHK/react-native-picker",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"React Native",
"picker",
"pickers",
"dialog"
],
"author": "iBerHK",
"license": "ISC"
}
================================================
FILE: utils/TimeUtils.js
================================================
function getDaysInOneMonth(year, month) {
var d = new Date(year, month, 0);
return d.getDate();
}
export default module.export = {
getDaysInOneMonth
}
================================================
FILE: view/AlertDialog.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
TouchableOpacity
} from 'react-native';
import BaseDialog from './BaseDialog';
class AlertDialog extends BaseDialog {
static defaultProps = {
messageText: 'Alert Message',
messageTextColor: '#444444',
messageTextSize: 14,
negativeText: 'cancel',
negativeColor: '#666666',
negativeSize: 16,
positiveText: 'ok',
positiveColor: '#1097D5',
positiveSize: 16,
onPress: null
}
constructor(props) {
super(props);
}
_getContentPosition() {
return { justifyContent: 'center', alignItems: 'center' }
}
renderContent() {
return
{this.props.messageText}
{
this.dismiss(() => {
if (this.props.onPress) {
this.props.onPress(true);
}
});
}}
style={{
flex: 1, height: this.getSize(45),
alignItems: 'center', justifyContent: 'center'
}}>
{this.props.positiveText}
{
this.dismiss(() => {
if (this.props.onPress) {
this.props.onPress(false);
}
});
}}
style={{
flex: 1, height: this.getSize(45),
alignItems: 'center', justifyContent: 'center'
}}>
{this.props.negativeText}
}
}
export default AlertDialog;
================================================
FILE: view/AreaPicker.js
================================================
import React, { Component, UIManager } from 'react';
import {
Text,
View,
Animated,
TouchableOpacity
} from 'react-native';
import PickerView from './PickerView';
import BaseDialog from './BaseDialog';
class AreaPicker extends BaseDialog {
static defaultProps = {
removeSubviews: false,
selectedValue: ['香港', '香港', '中西區'],
areaJson: null,
confirmText: '确定',
confirmTextSize: 14,
confirmTextColor: '#333333',
cancelText: '取消',
cancelTextSize: 14,
cancelTextColor: '#333333',
itemTextColor: 0x333333ff,
itemSelectedColor: 0x1097D5ff,
itemHeight: 40,
onPickerCancel: null,
onPickerConfirm: null
}
constructor(props) {
super(props);
this.state = {
areaData: this.getAreaData(),
path: new Animated.Value(0),
...this.formatPickerData(props.selectedValue)
};
}
_getContentPosition() {
return { justifyContent: 'flex-end', alignItems: 'center' }
}
getAreaData() {
let area = this.props.areaJson;
let data = [];
let len = area.length;
for (let i = 0; i < len; i++) {
let city = [];
for (let j = 0, cityLen = area[i]['city'].length; j < cityLen; j++) {
let _city = {};
_city[area[i]['city'][j]['name']] = area[i]['city'][j]['area'];
city.push(_city);
}
let _data = {};
_data[area[i]['name']] = city;
data.push(_data);
}
return data;
}
formatPickerData() {
let province = [];
let city = [];
let county = [];
let firstCity = null;
let firstCountry = null;
let areaData = this.getAreaData();
areaData.map((pitem) => {
for (let pname in pitem) {
province.push(pname)
if (pname == this.props.selectedValue[0]) {
pitem[pname].map(citem => {
for (let cname in citem) {
if (firstCity == null) {
firstCity = cname;
}
city.push(cname);
if (cname == this.props.selectedValue[1]) {
county = citem[cname];
if (firstCountry == null) {
firstCountry = citem[cname][0];
}
}
}
});
}
}
});
if (county.indexOf(this.props.selectedValue[2]) == -1) {
this.props.selectedValue[2] = firstCountry;
}
if (county.length == 0 && firstCity != null) {
this.props.selectedValue[1] = firstCity;
return this.formatPickerData();
}
return {
pickerData: [province, city, county], visible: true
};
}
renderPicker() {
return this.state.pickerData.map((item, pickerId) => {
let selectedIndex = 0;
let length = item.length;
for (let i = 0; i < length; i++) {
if (item[i] == this.props.selectedValue[pickerId]) {
selectedIndex = i;
break;
}
}
if (item && length > 0) {
return {
this.props.selectedValue[pickerId] = toValue;
this.setState({ ...this.formatPickerData(this.props.selectedValue) });
}}
selectedIndex={selectedIndex}
fontSize={this.getSize(14)}
itemWidth={this.mScreenWidth / this.state.pickerData.length}
itemHeight={this.props.itemHeight} />
} else {
return null;
}
});
}
renderContent() {
return
{this.renderPicker()}
{
this.dismiss(() => {
this.props.onPickerCancel && this.props.onPickerCancel();
});
}}
style={{ width: this.getSize(60), height: this.getSize(44), justifyContent: 'center', alignItems: 'center' }}>
{this.props.cancelText}
{
this.dismiss(() => {
this.props.onPickerConfirm && this.props.onPickerConfirm(this.props.selectedValue);
});
}}
style={{ width: this.getSize(60), height: this.getSize(44), justifyContent: 'center', alignItems: 'center' }}>
{this.props.confirmText}
}
}
export default AreaPicker;
================================================
FILE: view/BaseComponent.js
================================================
import React, { Component } from 'react';
import {
Dimensions,
PixelRatio
} from 'react-native';
class BaseComponent extends Component {
mScreenWidth = Dimensions.get('window').width;
mScreenHeight = Dimensions.get('window').height;
//最小显示单位
mOnePixel = (PixelRatio.get() == 3 ? 2 : 1) / PixelRatio.get();
constructor(props) {
super(props);
}
/**
* return 當前分辨率下的數值
* @param {*} size 375标注图下的值
*/
getSize(size) {
return parseInt(this.mScreenWidth * size / 375);
}
}
export default BaseComponent;
================================================
FILE: view/BaseDialog.js
================================================
import React, { Component } from 'react';
import {
Animated,
TouchableOpacity,
Platform
} from 'react-native';
import BaseComponent from './BaseComponent';
export default class BaseDialog extends BaseComponent {
static defaultProps = {
removeSubviews: true, //隐藏时,是否回收前景控件,false 更流畅,true:初始化更快,dismiss后就回收
coverClickable: true,
onCoverPress: null,
showAnimationType: 'spring'
}
_path = new Animated.Value(0);
constructor(props) {
super(props);
this.state = {
_isShow: false
}
}
isShowing() {
return this.state._isShow;
}
show(callback, state = {}) {
this.setState({ _isShow: true, ...state }, () => {
if (!this.props.showAnimationType || this.props.showAnimationType == 'spring') {
Animated.spring(this._path, { toValue: 1 }).start(() => {
callback && callback();
});
} else {
Animated.timing(this._path, { toValue: 1 }).start(() => {
callback && callback();
});
}
});
}
dismiss(callback) {
Animated.timing(this._path, { toValue: 0, duration: 200 }).start(() => {
this.setState({ _isShow: false }, () => {
callback && callback();
});
});
}
/**
* 重写前景动画效果
* @param {*} path
*/
_getContentInterpolate(path) {
return [
{
translateY: path.interpolate(
{
inputRange: [0, 0.5, 1],
outputRange: [this.getSize(200), this.getSize(200), 0]
}
)
}
]
}
/**
* 前景位置
*/
_getContentPosition() {
return { justifyContent: 'center', alignItems: 'center' }
}
/**
* 绘制前景控件
*/
renderContent() {
return null;
}
render() {
if (this.state._isShow || (this.props && this.props.removeSubviews === false)) {
return
{
if (!this.props || (this.props.coverClickable || this.props.coverClickable == null)) {
this.dismiss(this.props.onCoverPress);
}
}}
style={{ position: 'absolute', width: this.mScreenWidth, height: this.mScreenHeight }} />
{this.renderContent()}
} else {
return null;
}
}
}
================================================
FILE: view/DatePicker.js
================================================
import React, { Component, UIManager } from 'react';
import {
Text,
View,
TouchableOpacity
} from 'react-native';
import PickerView from './PickerView';
import BaseDialog from './BaseDialog';
import TimeUtils from '../utils/TimeUtils';
class DatePicker extends BaseDialog {
static defaultProps = {
removeSubviews: false,
itemTextColor: 0x333333ff,
itemSelectedColor: 0x1097D5ff,
onPickerCancel: null,
onPickerConfirm: null,
unit: ['年', '月', '日'],
selectedValue: [new Date().getFullYear() + '年', new Date().getMonth() + 1 + '月', new Date().getDate() + '日'],
startYear: 1990,
endYear: new Date().getFullYear(),
confirmText: '确定',
confirmTextSize: 14,
confirmTextColor: '#333333',
cancelText: '取消',
cancelTextSize: 14,
cancelTextColor: '#333333',
itemHeight: 40,
HH: true,
mm: true,
ss: false
}
constructor(props) {
super(props);
this.state = this.getDateList();
}
getDateList() {
console.log(this.props)
let unit = this.props.unit;
let years = [];
let months = [];
let days = [];
let startYear = this.props.startYear;
let endYear = this.props.endYear;
for (let i = 0; i < endYear + 1 - startYear; i++) {
years.push(i + startYear + unit[0]);
}
let selectedYear = years[0];
if (this.props.selectedValue) {
selectedYear = this.props.selectedValue[0];
}
selectedYear = selectedYear.substr(0, selectedYear.length - unit[0].length);
for (let i = 1; i < 13; i++) {
months.push(i + unit[1]);
}
let selectedMonth = months[0];
if (this.props.selectedValue) {
selectedMonth = this.props.selectedValue[1];
}
selectedMonth = selectedMonth.substr(0, selectedMonth.length - unit[1].length);
let dayCount = TimeUtils.getDaysInOneMonth(selectedYear, selectedMonth);
for (let i = 1; i <= dayCount; i++) {
days.push(i + unit[2]);
}
let selectedDay = days[0];
if (this.props.selectedValue) {
selectedDay = this.props.selectedValue[2];
}
selectedDay = selectedDay.substr(0, selectedDay.length - unit[2].length);
pickerData = [years, months, days];
selectedIndex = [
years.indexOf(selectedYear + unit[0]) == -1 ? years.length - 1 : years.indexOf(selectedYear + unit[0]),
months.indexOf(selectedMonth + unit[1]),
days.indexOf(selectedDay + unit[2]) == -1 ? days.length - 1 : days.indexOf(selectedDay + unit[2])];
this.props.selectedValue[0] = years[selectedIndex[0]];
this.props.selectedValue[1] = months[selectedIndex[1]];
this.props.selectedValue[2] = days[selectedIndex[2]];
if (this.props.HH) {
let hours = [];
for (let i = 0; i < 24; i++) {
hours.push((i + 1) + '时');
}
pickerData.push(hours);
if (this.props.selectedValue) {
selectedIndex.push((this.props.selectedValue[3] ? parseInt(this.props.selectedValue[3]) : new Date().getHours()) - 1);
} else {
selectedIndex.push((new Date().getHours() - 1));
}
this.props.selectedValue[3] = (selectedIndex[3] + 1) + '时';
if (this.props.mm) {
let minutes = [];
for (let i = 0; i < 60; i++) {
minutes.push((i + 1) + '分');
}
pickerData.push(minutes);
if (this.props.selectedValue) {
selectedIndex.push((this.props.selectedValue[4] ? parseInt(this.props.selectedValue[4]) : new Date().getMinutes()) - 1);
} else {
selectedIndex.push((new Date().getMinutes() - 1));
}
this.props.selectedValue[4] = (selectedIndex[4] + 1) + '分';
if (this.props.ss) {
let seconds = [];
for (let i = 0; i < 60; i++) {
seconds.push((i + 1) + '秒');
}
pickerData.push(seconds);
if (this.props.selectedValue) {
selectedIndex.push((this.props.selectedValue[5] ? parseInt(this.props.selectedValue[5]) : 1) - 1);
} else {
selectedIndex.push(1);
}
this.props.selectedValue[5] = (selectedIndex[5] + 1) + '秒';
}
}
}
let data = {
pickerData: pickerData,
selectedIndex: selectedIndex,
};
return data;
}
_getContentPosition() {
return { justifyContent: 'flex-end', alignItems: 'center' }
}
renderPicker() {
return this.state.pickerData.map((item, pickerId) => {
if (item) {
return {
//是否联动的实现位置
this.props.selectedValue[pickerId] = toValue;
console.log('====')
this.setState({ ...this.getDateList() });
}}
selectedIndex={this.state.selectedIndex[pickerId]}
fontSize={this.getSize(14)}
itemWidth={this.mScreenWidth / this.state.pickerData.length}
itemHeight={this.props.itemHeight} />
}
});
}
renderContent() {
// let data = this.getDateList();
// this.state.pickerData = data.pickerData;
// this.state.selectedIndex = data.selectedIndex;
return
{this.renderPicker()}
{
this.dismiss(() => this.props.onPickerCancel && this.props.onPickerCancel(this.props.selectedValue));
}}
style={{ width: this.getSize(60), height: this.getSize(44), justifyContent: 'center', alignItems: 'center' }}>
{this.props.cancelText}
{
this.dismiss(() => this.props.onPickerConfirm && this.props.onPickerConfirm(this.props.selectedValue));
}}
style={{ width: this.getSize(60), height: this.getSize(44), justifyContent: 'center', alignItems: 'center' }}>
{this.props.confirmText}
}
}
export default DatePicker;
================================================
FILE: view/DownloadDialog.js
================================================
import React, { Component } from 'react';
import {
View,
Animated,
Text,
TouchableOpacity,
} from 'react-native';
import BaseDialog from './BaseDialog';
class DownloadDialog extends BaseDialog {
static defaultProps = {
title: '视频下载',
titleColor: '#333333',
titleSize: 14,
active: false,
actionText: '打开',
onAction: null,
totalTextColor: '#666666',
totalTextSize: 12
}
process = new Animated.Value(0);
constructor(props) {
super(props);
this.state = {
}
}
/**
*
* @param {*} process [0, 1]
* @param {*} total
*/
setProcess(process, total) {
if (this.state.total != total) {
this.setState({ total });
}
Animated.spring(this.process, { toValue: process }).start();
}
renderContent() {
return
{this.props.title}
{this.state.total}
{
if (this.props.active) {
this.dismiss(() => {
this.process.setValue(0);
this.props.active = false;
this.props.onAction && this.props.onAction()
});
}
}}
style={{
width: this.getSize(307), height: this.getSize(40),
alignItems: 'center', justifyContent: 'center',
}}>
{this.props.actionText}
}
}
module.exports = DownloadDialog;
================================================
FILE: view/InputDialog.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
TouchableOpacity,
TextInput,
Keyboard
} from 'react-native';
import BaseDialog from './BaseDialog';
import KeyboardSpacer from './KeyboardSpacer';
class InputDialog extends BaseDialog {
static defaultProps = {
removeSubviews: false,
title: '我要举报',
titleSize: 16,
titleColor: '#333333',
cancelText: '返回',
cancelSize: 14,
cancelColor: '#333333',
btnText: '提交',
btnTextSize: 12,
btnTextColor: '#ffffff',
btnBgColor: '#1097D5',
placeholder: '请尽量说明问题,我们将尽快处理...',
onSubmit: null
}
constructor(props) {
super(props);
}
_getContentPosition() {
return { justifyContent: 'flex-end', alignItems: 'center' }
}
show(text) {
super.show(null, { text: text });
this.textInput.focus();
}
dismiss(callback) {
this.textInput.blur();
super.dismiss(callback);
}
renderContent() {
return
this.dismiss()}
style={{
position: 'absolute', left: this.getSize(10),
height: this.getSize(40), flexDirection: 'row',
justifyContent: 'center', alignItems: 'center', marginLeft: this.getSize(5)
}}>
{this.props.cancelText}
{this.props.title}
this.textInput = ref}
style={{
width: this.getSize(345), marginLeft: this.getSize(15),
height: this.getSize(100), color: '#333333', fontSize: this.getSize(14),
borderWidth: 1, borderColor: '#E8EEF0', backgroundColor: '#ffffff', borderRadius: this.getSize(4),
paddingLeft: this.getSize(15), paddingRight: this.getSize(15), paddingTop: this.getSize(10)
}}
numberOfLines={4}
multiline={true}
value={this.state.text}
underlineColorAndroid={'transparent'}
placeholder={this.props.placeholder}
placeholderTextColor='#999999'
onChangeText={(text) => {
this.inputText = text;
}} />
this.dismiss(() => {
this.props.onSubmit && this.props.onSubmit(this.inputText);
})}
style={{
width: this.getSize(60), height: this.getSize(28),
justifyContent: 'center', alignItems: 'center',
backgroundColor: this.props.btnBgColor, borderRadius: this.getSize(4)
}}>
{this.props.btnText}
}
}
export default InputDialog;
================================================
FILE: view/KeyboardSpacer.js
================================================
/**
* Created by andrewhurst on 10/5/15.
*/
import React, { Component } from 'react';
import {
Keyboard,
LayoutAnimation,
View,
Dimensions,
Platform,
StyleSheet
} from 'react-native';
const styles = StyleSheet.create({
container: {
left: 0,
right: 0,
bottom: 0,
},
});
// From: https://medium.com/man-moon/writing-modern-react-native-ui-e317ff956f02
const defaultAnimation = {
duration: 500,
create: {
duration: 300,
type: LayoutAnimation.Types.easeInEaseOut,
property: LayoutAnimation.Properties.opacity
},
update: {
type: LayoutAnimation.Types.spring,
springDamping: 200
}
};
export default class KeyboardSpacer extends Component {
static defaultProps = {
topSpacing: 0,
onToggle: () => null,
};
constructor(props, context) {
super(props, context);
this.state = {
keyboardSpace: 0,
isKeyboardOpened: false
};
this._listeners = null;
this.updateKeyboardSpace = this.updateKeyboardSpace.bind(this);
this.resetKeyboardSpace = this.resetKeyboardSpace.bind(this);
}
componentDidMount() {
const updateListener = Platform.OS === 'android' ? 'keyboardDidShow' : 'keyboardWillShow';
const resetListener = Platform.OS === 'android' ? 'keyboardDidHide' : 'keyboardWillHide';
this._listeners = [
Keyboard.addListener(updateListener, this.updateKeyboardSpace),
Keyboard.addListener(resetListener, this.resetKeyboardSpace)
];
}
componentWillUnmount() {
this._listeners.forEach(listener => listener.remove());
}
updateKeyboardSpace(event) {
if (!event.endCoordinates) {
return;
}
let animationConfig = defaultAnimation;
if (Platform.OS === 'ios') {
animationConfig = LayoutAnimation.create(
event.duration,
LayoutAnimation.Types[event.easing],
LayoutAnimation.Properties.opacity,
);
}
LayoutAnimation.configureNext(animationConfig);
// get updated on rotation
const screenHeight = Dimensions.get('window').height;
// when external physical keyboard is connected
// event.endCoordinates.height still equals virtual keyboard height
// however only the keyboard toolbar is showing if there should be one
const keyboardSpace = (screenHeight - event.endCoordinates.screenY) + this.props.topSpacing;
this.setState({
keyboardSpace,
isKeyboardOpened: true
}, this.props.onToggle(true, keyboardSpace));
}
resetKeyboardSpace(event) {
let animationConfig = defaultAnimation;
if (Platform.OS === 'ios') {
animationConfig = LayoutAnimation.create(
event.duration,
LayoutAnimation.Types[event.easing],
LayoutAnimation.Properties.opacity,
);
}
LayoutAnimation.configureNext(animationConfig);
this.setState({
keyboardSpace: 0,
isKeyboardOpened: false
}, this.props.onToggle(false, 0));
}
render() {
return (
);
}
}
================================================
FILE: view/PickerView.js
================================================
import React, { Component } from 'react';
import {
View,
Animated,
PanResponder
} from 'react-native';
import BaseComponent from './BaseComponent';
import Svg, {
LinearGradient,
Rect,
Stop
} from 'react-native-svg';
class PickerView extends BaseComponent {
static defaultProps = {
itemTextColor: 0x333333ff,
itemSelectedColor: 0x1097D5ff,
itemHeight: 40,
onPickerSelected: null,
selectedIndex: 0
}
_previousTop = 0;
lastTop = 0;
constructor(props) {
super(props);
list = ['', ''].concat(props.list).concat(['', '']);
this.colorPath = [];
let length = list.length;
for (let i = 0; i < length; i++) {
this.colorPath.push(new Animated.Value(i == (this.props.selectedIndex + 2) ? 1 : 0));
}
this.path = new Animated.Value(-props.itemHeight * this.props.selectedIndex);
this.state = {
list: list,
selectedIndex: props.selectedIndex,
};
this.maxTop = 0;
this.maxBottom = -props.itemHeight * (list.length - 5);
this.onStartShouldSetPanResponder = this.onStartShouldSetPanResponder.bind(this);
this.onMoveShouldSetPanResponder = this.onMoveShouldSetPanResponder.bind(this);
this.onPanResponderGrant = this.onPanResponderGrant.bind(this);
this.onPanResponderMove = this.onPanResponderMove.bind(this);
this.onPanResponderEnd = this.onPanResponderEnd.bind(this);
//這裏固定在屏幕底部,所以直接寫死touch區域即可。
this.parentTopY = this.mScreenHeight - props.itemHeight * 5 - this.getSize(15);
this.parentBottomY = this.mScreenHeight - this.getSize(15);
}
shouldComponentUpdate(nextProps, nextState) {
if (nextProps) {
list = ['', ''].concat(nextProps.list).concat(['', '']);
listChange = JSON.stringify(list) != JSON.stringify(this.state.list);
indexChange = nextProps.selectedIndex != this.state.selectedIndex;
if (listChange || indexChange) {
console.log('shouldComponentUpdate');
this.path.setValue(-this.props.itemHeight * nextProps.selectedIndex);
if (listChange) {
this.colorPath = [];
let length = list.length;
for (let i = 0; i < length; i++) {
this.colorPath.push(new Animated.Value(i == (nextProps.selectedIndex + 2) ? 1 : 0));
}
}
nextState.list = list;
nextState.selectedIndex = nextProps.selectedIndex;
this.maxTop = 0;
this.maxBottom = -this.props.itemHeight * (list.length - 5);
return true;
}
}
return false;
}
//用户开始触摸屏幕的时候,是否愿意成为响应者;
onStartShouldSetPanResponder(evt, gestureState) {
if (evt.nativeEvent.pageY < this.parentTopY || evt.nativeEvent.pageY > this.parentBottomY) {
return false;
} else {
this.path && this.path.removeAllListeners();
this.path.stopAnimation();
this.keyDown = Date.now();
return true;
}
}
//在每一个触摸点开始移动的时候,再询问一次是否响应触摸交互;
onMoveShouldSetPanResponder(evt, gestureState) {
if (evt.nativeEvent.pageY < this.parentTopY || evt.nativeEvent.pageY > this.parentBottomY) {
return false;
} else {
this.path && this.path.removeAllListeners();
this.path.stopAnimation();
return true;
}
}
// 开始手势操作。给用户一些视觉反馈,让他们知道发生了什么事情!
onPanResponderGrant(evt, gestureState) {
this.lastTop = this.path._value;
}
// 最近一次的移动距离为gestureState.move{X,Y}
onPanResponderMove(evt, gestureState) {
if (global.timer != null) {
global.timer.map(item => {
clearTimeout(item);
});
}
this._previousTop = this.lastTop + gestureState.dy;
if (this._previousTop > 0) {
this._previousTop = Math.min(this._previousTop, this.maxTop + this.props.itemHeight);
} else {
this._previousTop = Math.max(this._previousTop, this.maxBottom - this.props.itemHeight);
}
this.path.setValue(this._previousTop);
if (this.previousTop) {
this.velocity = gestureState.dy - this.previousTop;
} else {
this.velocity = 0;
}
this.previousTop = gestureState.dy;
}
lastEvent = null;
lastTwoEvent = null;
onPanResponderEnd(evt, gestureState) {
let actionTime = Date.now() - this.keyDown;
if (actionTime < 300 && Math.abs(gestureState.vy) < 0.1) {
let clickPosition = -(parseInt((gestureState.y0 - this.parentTopY) / this.props.itemHeight) - 2);
let toValue = this.path._value;
let number = Math.round(toValue / this.props.itemHeight);
toValue = this.props.itemHeight * number;
toValue = toValue + (this.props.itemHeight * clickPosition);
if (toValue > 0) {
toValue = Math.min(toValue, this.maxTop);
} else {
toValue = Math.max(toValue, this.maxBottom);
}
if (isNaN(toValue)) {
} else {
//onSeleted
Animated.timing(this.path, { toValue: toValue, duration: 200 }).start(() => {
this.onSeleted(Math.abs(toValue / this.props.itemHeight - 2));
});
}
} else {
this.lastTop = this._previousTop;
let toValue = this._previousTop + gestureState.vy * this.props.itemHeight * 2;
let number = Math.round(toValue / this.props.itemHeight);
toValue = this.props.itemHeight * number;
if (toValue > 0) {
toValue = Math.min(toValue, this.maxTop);
} else {
toValue = Math.max(toValue, this.maxBottom);
}
Animated.decay(this.path, {
velocity: gestureState.vy, //通过手势设置相关速度
deceleration: 0.995,
}).start(() => {
if (this.path._value % this.props.itemHeight == 0) {
this.path.removeListener(this.pathListener);
this.pathListener = null;
} else {
//慣性動畫
if (this.pathListener) {
this.path.removeListener(this.pathListener);
this.pathListener = null;
let toValue = Math.round(this.path._value / this.props.itemHeight) * this.props.itemHeight;
Animated.timing(this.path, {
toValue: toValue,
duration: 50
}).start(() => {
//onSeleted
this.onSeleted(Math.abs(toValue / this.props.itemHeight - 2));
});
}
}
});
//當滾動超出上限或者下限時,接管慣性動畫
this.pathListener = this.path.addListener((listener) => {
if (listener.value < this.maxBottom && this.pathListener) {
this.path.removeListener(this.pathListener);
this.pathListener = null;
Animated.timing(this.path, { toValue: this.maxBottom }).start(() => {
//onSeleted
this.onSeleted(Math.abs(this.maxBottom / this.props.itemHeight - 2));
});
} else if (listener.value > this.maxTop - this.props.itemHeight && this.pathListener) {
this.path.removeListener(this.pathListener);
this.pathListener = null;
Animated.timing(this.path, { toValue: this.maxTop }).start(() => {
//onSeleted
this.onSeleted(Math.abs(this.maxTop / this.props.itemHeight - 2));
});
}
});
}
}
onSeleted(selectedIndex) {
if (global.timer == null) {
global.timer = [];
}
global.timer.push(setTimeout(() => {
this.colorPath.map((item, index) => {
if (item._value == 0 && selectedIndex == index) {
item.setValue(1);
} else if (item._value == 1 && selectedIndex != index) {
item.setValue(0);
}
})
this.props.onPickerSelected && this.props.onPickerSelected(this.state.list[selectedIndex]);
}, 20));
}
componentWillMount(evt, gestureState) {
this._panResponder = PanResponder.create({
onStartShouldSetPanResponder: this.onStartShouldSetPanResponder,
onMoveShouldSetPanResponder: this.onMoveShouldSetPanResponder,
onPanResponderGrant: this.onPanResponderGrant,
onPanResponderMove: this.onPanResponderMove,
onPanResponderRelease: this.onPanResponderEnd,
onPanResponderTerminate: this.onPanResponderEnd,
});
}
renderList() {
return this.state.list.map((item, index) => {
return this.renderItem(item, index);
});
}
renderItem(item, index) {
return
{item}
}
render() {
return
this.ref = ref}
{...this._panResponder.panHandlers}
style={{
overflow: 'hidden',
width: this.props.itemWidth, height: this.props.itemHeight * 5 + this.getSize(15), backgroundColor: '#ffffff'
}}>
{this.renderList()}
}
}
export default PickerView;
================================================
FILE: view/SimpleChooseDialog.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
Animated,
TouchableOpacity,
FlatList
} from 'react-native';
import BaseDialog from './BaseDialog';
/**
* 用于不跳转页面的选择
*/
class SimpleChooseDialog extends BaseDialog {
static defaultProps = {
items: ['a', 'b', 'c'],
itemKey: 'key',
itemStyle: {
fontSize: 14,
fontWeight: '400',
color: '#333333'
},
selectColor: '#1097D5',
normalColor: '#666666',
pointSize: 18,
pointBorderRadius: 9,
confirmText: '确定',
confirmBtnColor: '#1097D5',
confirmTextColor: '#ffffff',
onPress: null,
}
constructor(props) {
super(props);
}
renderItems() {
return this.props.items.map((item, index) => {
return {
this.setState({ seleted: index })
}}
key={this.key ? item[this.key] : item}
style={{
paddingLeft: this.getSize(20), paddingRight: this.getSize(20),
width: this.getSize(307), height: this.getSize(49),
justifyContent: 'flex-start', alignItems: 'center', flexDirection: 'row'
}}>
{this.state.seleted == index ? : null}
{typeof item == 'string' ? item : item[this.props.itemKey]}
})
}
_getContentPosition() {
return { justifyContent: 'center', alignItems: 'center' }
}
renderContent() {
return
{this.renderItems()}
{
this.dismiss(() => {
if (this.props.onPress) {
this.props.onPress(this.state.seleted != null ? this.state.seleted : -1);
}
});
}}
style={{
width: this.getSize(200), height: this.getSize(44),
backgroundColor: this.props.confirmBtnColor, borderRadius: this.getSize(5),
justifyContent: 'center', alignItems: 'center', marginTop: this.getSize(13), marginBottom: this.getSize(20)
}}>
{this.props.confirmText}
}
}
export default SimpleChooseDialog;
================================================
FILE: view/SimpleItemsDialog.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
Animated,
TouchableOpacity,
FlatList
} from 'react-native';
import BaseDialog from './BaseDialog';
class SimpleItemsDialog extends BaseDialog {
static defaultProps = {
items: ['a', 'b', 'c'],
itemKey: 'key',
itemStyle: {
fontSize: 14,
fontWeight: '400',
color: '#333333'
},
cancel: true,
cancelText: '取消',
cancelTextStyle: {
fontSize: 14,
fontWeight: '400',
color: '#999999'
},
onPress: null,
}
constructor(props) {
super(props);
}
_getContentPosition() {
return { justifyContent: 'flex-end', alignItems: 'center' }
}
renderItems() {
return this.props.items.map((item, index) => {
return {
this.dismiss(() => {
if (this.props.onPress) {
this.props.onPress(index);
}
});
}}
key={index}
style={{ width: this.mScreenWidth, height: this.getSize(49), justifyContent: 'center', alignItems: 'center' }}>
{typeof item == 'string' ? item : item[this.props.itemKey]}
})
}
renderCancel() {
return this.dismiss()}
style={{ width: this.mScreenWidth, height: this.getSize(49), justifyContent: 'center', alignItems: 'center' }}>
{this.props.cancelText}
}
renderContent() {
return
{this.renderItems()}
{this.props.cancel ? this.renderCancel() : null}
}
}
export default SimpleItemsDialog;
================================================
FILE: view/ToastComponent.js
================================================
import React, { Component } from 'react';
import {
View,
Text,
Animated
} from 'react-native';
import BaseComponent from '../view/BaseComponent';
export default class ToastComponent extends BaseComponent {
static defaultProps = {
duration: 1500,
textColor: '#ffffff',
fontSize: 14,
lineHeight: 20,
paddingH: 10,
paddingV: 5,
borderRadius: 5,
backgroundColor: 0x00000099,
}
opacity = new Animated.Value(0);
leftPath = new Animated.Value(0);
constructor(props) {
super(props);
this.state = {
toastVisiable: false,
toastText: ''
}
}
show(message) {
this.timeoutId && clearTimeout(this.timeoutId);
this.opacity.setValue(0)
this.setState({ toastText: message, toastVisiable: true });
Animated.timing(this.opacity, { toValue: 1, duration: 200 }).start();
this.timeoutId = setTimeout(() => {
Animated.timing(this.opacity, { toValue: 0, duration: 200 }).start(() => {
this.setState({ toastVisiable: false });
});
}, this.props.duration);
}
componentWillUnmount() {
this.timeoutId && clearTimeout(this.timeoutId);
}
render() {
if (this.state.toastVisiable) {
return {
//如果依靠父容器来定位Toast居中,
//在配合react-navigation设置全局单例Toast,会导致StackNavigator布局异常
this.leftPath.setValue((this.mScreenWidth - e.nativeEvent.layout.width) / 2);
}}
style={{
opacity: this.opacity, alignItems: 'center',
position: 'absolute',
top: this.mScreenHeight - this.getSize(300),
left: this.leftPath
}}>
{this.state.toastText}
} else {
return null;
}
}
}