Commit 6dc64a08 by Rizal

first commit

parents
.DS_Store
.atom/
.idea/
.vscode/
.packages
.pub/
.dart_tool/
pubspec.lock
Podfile
Podfile.lock
Pods/
.symlinks/
**/Flutter/App.framework/
**/Flutter/Flutter.framework/
**/Flutter/Generated.xcconfig
**/Flutter/flutter_assets/
ServiceDefinitions.json
xcuserdata/
local.properties
.gradle/
gradlew
gradlew.bat
gradle-wrapper.jar
*.iml
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
GeneratedPluginRegistrant.java
build/
.flutter-plugins
/example/android/keystore.properties
/example/ios/Flutter/flutter_export_environment.sh
\ No newline at end of file
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: c7ea3ca377e909469c68f2ab878a5bc53d3cf66b
channel: beta
## 1.0.26+2
- Update pt_br language.
## 1.0.26+1
- Update pt_br language.
## 1.0.26
- Modify the button widget of the custom title bar to support hidden title and button widget:
```dart
DatePicker.showDatePicker(
pickerTheme: DateTimePickerTheme(
showTitle: true,
confirm: Text('custom Done', style: TextStyle(color: Colors.red)),
cancel: null, // If a custom title bar is set, the widget(title/confirm/cancel) will not be displayed when the value is null
),
);
```
## 1.0.25
- Fixed bug: [Issues #89](https://github.com/dylanwuzh/flutter-cupertino-date-picker/issues/89)
## 1.0.24
- Added language support: Dutch (NL).
## 1.0.23+1
- Remove `keystore.properties`.
## 1.0.23
- Added date format separator: `/`.
- `DatePicker.showDatePicker`: check pickerMode is legal or not by date format.
## 1.0.22
- Support `onMonthChangeStartWithFirstDate` for DatePicker: When the selected month changes, whether to set the selected date as the first day of the month.
## 1.0.21
- Added language support: Bosnian (BS) and Croatian (HR).
## 1.0.20
- Added language support: Ukraine (UK).
## 1.0.19+1
- Update LICENSE file.
## 1.0.19
- Added language support: Serbia Cyrillic(DateTimePickerLocale.sr_cyrl) and Latin(DateTimePickerLocale.sr_latn).
## 1.0.18
- Added language support: Turkish (DateTimePickerLocale.tr).
## 1.0.17
- Added language support: Vietnamese (DateTimePickerLocale.vi).
## 1.0.16
- Added language support: French (DateTimePickerLocale.fr).
## 1.0.15+1
- Modified Indonesia's subtag: DateTimePickerLocale.in_id -> DateTimePickerLocale.id
## 1.0.15
- Added language support: Bahasa Indonesia (DateTimePickerLocale.in_id).
## 1.0.14
- Added language support: Arabic Egypt (DateTimePickerLocale.ar_eg).
## 1.0.13+1
- Fixed bug: `DateTimePickerMode.datetime` mode display error. Issues: [#91](https://github.com/dylanwuzh/flutter-cupertino-date-picker/issues/91)
## 1.0.13
- Compatible with Flutter `dev` channel.
## 1.0.12
- Fixed bug: when `onClose` is null, catch exception `Unhandled Exception: NoSuchMethodError: The method 'call' was called on null. Receiver: null`. Issues: [#40](https://github.com/wuzhendev/flutter-cupertino-date-picker/issues/40) and [#43](https://github.com/wuzhendev/flutter-cupertino-date-picker/issues/43).
## 1.0.11
- Added `minuteDivider` parameter.
## 1.0.10
- Added `onClose` callback.
## 1.0.9
- Added language support: Hungarian (DateTimePickerLocale.hu).
## 1.0.8
- Refactor i18n codes.
## 1.0.7
- Added language support: Italian (DateTimePickerLocale.it).
## 1.0.6
- Added language support: Korea (DateTimePickerLocale.ko).
## 1.0.5
- Added language support: German (DateTimePickerLocale.de).
## 1.0.4
- Added language support: Russian (DateTimePickerLocale.ru).
## 1.0.3
- Added language support: Japanese (DateTimePickerLocale.jp).
## 1.0.2
- Added language support: Arabic (DateTimePickerLocale.ar).
## 1.0.1
- Added language support: Bengali (DateTimePickerLocale.bn).
## 1.0.0
- Refactor code.
- Support `DatePicker``TimePicker``DateTimePicker`.
- Support `DatePickerWidget``TimePickerWidget``DateTimePickerWidget`.
- Upgrade date format.
- Add `DateTimePickerTheme`.
- Add `DateTimePickerLocale` for locale.
## 0.8.0
- Support set the value of minimum DateTime and maximum DateTime.
## 0.7.0
- Change days in a month when moth changes.
## 0.6.0
- Add `DatePickerWidget` widget for display DatePicker in page.
## 0.5.0
- Add `onChanged2(DateTime dateTime, List<int> selectedIndex)` callback.
- Add `onConfirm2(DateTime dateTime, List<int> selectedIndex)` callback.
- Add `minDateTime`.
- Add `maxDateTime`.
- Add `initialDateTime`.
## 0.4.0
- Add `onCancel` callback.
## 0.3.0
- Support Flutter v1.0.
## 0.2.0
- Add custom cancel and confirm button.
## 0.1.0
- Refactor locale message.
## 0.0.7
- Support language support: Portuguese Brazil (DateTimePickerLocale.pt_br).
## 0.0.6
- Support English months.
## 0.0.5
- Fix month and day in zh locale.
## 0.0.4
- Support i18n.
## 0.0.2
- Complete README file.
## 0.0.1
- Initial Release.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
*.iml
*.class
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
GeneratedPluginRegistrant.java
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 27
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.flutter.flutterdatepicker"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flutter.flutterdatepicker">
<!-- The INTERNET permission is required for development. Specifically,
flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="flutter_date_picker"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
package com.flutter.flutterdatepicker;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
</resources>
buildscript {
repositories {
google()
jcenter()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
org.gradle.jvmargs=-Xmx1536M
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}
.DS_Store
.dart_tool/
.packages
.pub/
build/
.flutter-plugins
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: c7ea3ca377e909469c68f2ab878a5bc53d3cf66b
channel: beta
# Date Picker Example
A Flutter application example of DatePicker.
## Getting Started
For help getting started with Flutter, view our online
[documentation](https://flutter.io/).
*.iml
*.class
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
GeneratedPluginRegistrant.java
/keystore.properties
/key.properties
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
applicationId "com.flutter.datepicker.example"
minSdkVersion 16
targetSdkVersion 28
versionCode 2
versionName "1.0.8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flutter.datepicker.example">
<!-- The INTERNET permission is required for development. Specifically,
flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="DatePicker"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
package com.flutter.datepicker.example;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
</resources>
buildscript {
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
}
}
allprojects {
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/app.flx
/Flutter/app.zip
/Flutter/flutter_assets/
/Flutter/App.framework
/Flutter/Flutter.framework
/Flutter/Generated.xcconfig
/ServiceDefinitions.json
Pods/
.symlinks/
flutter_export_environment.sh
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>
#include "Generated.xcconfig"
#include "Generated.xcconfig"
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0910"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildSystemType</key>
<string>Original</string>
</dict>
</plist>
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
@end
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>datepickerexample</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char* argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
import 'package:flutter/material.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
class DatePickerBottomSheet extends StatefulWidget {
DatePickerBottomSheet({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _DatePickerBottomSheetState();
}
const String MIN_DATETIME = '2010-05-12';
const String MAX_DATETIME = '2021-11-25';
const String INIT_DATETIME = '2019-05-17';
class _DatePickerBottomSheetState extends State<DatePickerBottomSheet> {
bool _showTitle = true;
DateTimePickerLocale _locale = DateTimePickerLocale.en_us;
List<DateTimePickerLocale> _locales = DateTimePickerLocale.values;
String _format = 'yyyy-MMMM-dd';
TextEditingController _formatCtrl = TextEditingController();
DateTime _dateTime;
@override
void initState() {
super.initState();
_formatCtrl.text = _format;
_dateTime = DateTime.parse(INIT_DATETIME);
}
@override
Widget build(BuildContext context) {
// create locale radio list
List<Widget> radios = List<Widget>();
_locales.forEach((locale) {
radios.add(Container(
margin: EdgeInsets.only(right: 8.0),
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Radio(
value: locale,
groupValue: _locale,
onChanged: (value) {
setState(() {
_locale = value;
});
},
),
Text(locale
.toString()
.substring(locale.toString().indexOf('.') + 1)),
],
),
));
});
TextStyle hintTextStyle =
Theme.of(context).textTheme.subhead.apply(color: Color(0xFF999999));
return Scaffold(
appBar: AppBar(title: Text('DatePicker Bottom Sheet')),
body: Container(
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
// min datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('min DateTime:', style: hintTextStyle),
),
Text(MIN_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// max datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('max DateTime:', style: hintTextStyle)),
Text(MAX_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// init datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('init DateTime:', style: hintTextStyle)),
Text(INIT_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// show title widget checkbox
Row(
children: <Widget>[
Text('show title'),
Checkbox(
value: _showTitle,
onChanged: (value) {
setState(() {
_showTitle = value;
});
},
)
],
),
// date format input field
TextField(
controller: _formatCtrl,
keyboardType: TextInputType.url,
decoration: InputDecoration(
labelText: 'Date Format',
hintText: 'yyyy-MM-dd',
hintStyle: TextStyle(color: Colors.black26),
),
onChanged: (value) {
_format = value;
},
),
// locale check radio group
Container(
width: double.infinity,
margin: EdgeInsets.only(top: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Locale: '),
Wrap(direction: Axis.horizontal, children: radios)
],
),
),
// selected date
Container(
margin: EdgeInsets.only(top: 40.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text('Selected Date:',
style: Theme.of(context).textTheme.subhead),
Container(
padding: EdgeInsets.only(left: 12.0),
child: Text(
'${_dateTime.year}-${_dateTime.month.toString().padLeft(2, '0')}-${_dateTime.day.toString().padLeft(2, '0')}',
style: Theme.of(context).textTheme.title,
),
),
],
),
),
],
),
),
// display DatePicker floating action button
floatingActionButton: FloatingActionButton(
onPressed: _showDatePicker,
tooltip: 'Show DatePicker',
child: Icon(Icons.date_range),
),
);
}
/// Display date picker.
void _showDatePicker() {
DatePicker.showDatePicker(
context,
onMonthChangeStartWithFirstDate: true,
pickerTheme: DateTimePickerTheme(
showTitle: _showTitle,
confirm: Text('custom Done', style: TextStyle(color: Colors.red)),
),
minDateTime: DateTime.parse(MIN_DATETIME),
maxDateTime: DateTime.parse(MAX_DATETIME),
initialDateTime: _dateTime,
dateFormat: _format,
locale: _locale,
onClose: () => print("----- onClose -----"),
onCancel: () => print('onCancel'),
onChange: (dateTime, List<int> index) {
setState(() {
_dateTime = dateTime;
});
},
onConfirm: (dateTime, List<int> index) {
setState(() {
_dateTime = dateTime;
});
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
///
/// @author dylan wu
/// @since 2019-05-10
class DatePickerInPage extends StatefulWidget {
DatePickerInPage({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _DatePickerInPageState();
}
const String MIN_DATETIME = '2010-05-12';
const String MAX_DATETIME = '2021-11-25';
const String INIT_DATETIME = '2019-05-17';
const String DATE_FORMAT = 'MM月|d日,yyyy年';
class _DatePickerInPageState extends State<DatePickerInPage> {
DateTime _dateTime;
@override
void initState() {
super.initState();
_dateTime = DateTime.parse(INIT_DATETIME);
}
@override
Widget build(BuildContext context) {
TextStyle hintTextStyle =
Theme.of(context).textTheme.subhead.apply(color: Color(0xFF999999));
return Scaffold(
appBar: AppBar(title: Text("DatePicker In Page")),
body: Container(
decoration: BoxDecoration(color: Colors.white),
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
// min datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('min DateTime:', style: hintTextStyle),
),
Text(MIN_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// max datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('max DateTime:', style: hintTextStyle)),
Text(MAX_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// init datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('init DateTime:', style: hintTextStyle),
),
Text(INIT_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// date format
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('Date Format:', style: hintTextStyle),
),
Text(DATE_FORMAT, style: Theme.of(context).textTheme.subhead),
],
),
),
// date picker theme
GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (_) => new AlertDialog(
titlePadding: EdgeInsets.only(left: 16.0, top: 16.0),
title: new Text("DateTimePickerTheme"),
contentPadding: EdgeInsets.all(16.0),
content: new Text(
'''
DateTimePickerTheme(
backgroundColor: Color(0xFF80cbc4),
cancelTextStyle: TextStyle(color: Colors.white),
confirmTextStyle: TextStyle(color: Colors.black),
itemTextStyle: TextStyle(color: Colors.deepOrange),
pickerHeight: 300.0,
titleHeight: 24.0,
itemHeight: 30.0,
)
''',
style: TextStyle(fontSize: 14.0),
),
actions: <Widget>[
new FlatButton(
child: new Text("OK"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
),
);
},
child: Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
child:
Text('DateTimePickerTheme ', style: hintTextStyle),
),
Icon(Icons.remove_red_eye, color: Color(0xFF03a9f4)),
],
),
),
),
// date picker widget
Container(
margin: EdgeInsets.only(top: 24.0, bottom: 40.0),
child: DatePickerWidget(
minDateTime: DateTime.parse(MIN_DATETIME),
maxDateTime: DateTime.parse(MAX_DATETIME),
initialDateTime: DateTime.parse(INIT_DATETIME),
dateFormat: DATE_FORMAT,
pickerTheme: DateTimePickerTheme(
backgroundColor: Color(0xFFb2dfdb),
cancelTextStyle: TextStyle(color: Colors.white),
confirmTextStyle: TextStyle(color: Colors.black),
itemTextStyle: TextStyle(color: Colors.deepOrange),
pickerHeight: 300.0,
titleHeight: 24.0,
itemHeight: 30.0,
),
onChange: (dateTime, selectedIndex) {
setState(() {
_dateTime = dateTime;
});
},
),
),
// selected date
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text('Selected Date:',
style: Theme.of(context).textTheme.subhead),
Container(
padding: EdgeInsets.only(left: 12.0),
child: Text(
_dateTime != null
? '${_dateTime.year}-${_dateTime.month.toString().padLeft(2, '0')}-${_dateTime.day.toString().padLeft(2, '0')}'
: '',
style: Theme.of(context).textTheme.title,
),
),
],
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
class DateTimePickerBottomSheet extends StatefulWidget {
DateTimePickerBottomSheet({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _DateTimePickerBottomSheetState();
}
const String MIN_DATETIME = '2019-05-15 09:23:10';
const String MAX_DATETIME = '2019-06-03 21:11:00';
const String INIT_DATETIME = '2019-05-16 09:00:00';
class _DateTimePickerBottomSheetState extends State<DateTimePickerBottomSheet> {
bool _showTitle = true;
String _format = 'yy年M月d日 EEE,H时:m分';
TextEditingController _formatCtrl = TextEditingController();
DateTimePickerLocale _locale = DateTimePickerLocale.zh_cn;
List<DateTimePickerLocale> _locales = DateTimePickerLocale.values;
DateTime _dateTime;
@override
void initState() {
super.initState();
_formatCtrl.text = _format;
_dateTime = DateTime.parse(INIT_DATETIME);
}
/// Display time picker.
void _showDateTimePicker() {
DatePicker.showDatePicker(
context,
minDateTime: DateTime.parse(MIN_DATETIME),
maxDateTime: DateTime.parse(MAX_DATETIME),
initialDateTime: DateTime.parse(INIT_DATETIME),
dateFormat: _format,
locale: _locale,
pickerTheme: DateTimePickerTheme(
showTitle: _showTitle,
),
pickerMode: DateTimePickerMode.datetime, // show TimePicker
onCancel: () {
debugPrint('onCancel');
},
onChange: (dateTime, List<int> index) {
setState(() {
_dateTime = dateTime;
});
},
onConfirm: (dateTime, List<int> index) {
setState(() {
_dateTime = dateTime;
});
},
);
}
@override
Widget build(BuildContext context) {
List<Widget> radios = List<Widget>();
_locales.forEach((locale) {
radios.add(Container(
margin: EdgeInsets.only(right: 8.0),
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Radio(
value: locale,
groupValue: _locale,
onChanged: (value) {
setState(() {
_locale = value;
});
}),
Text(locale
.toString()
.substring(locale.toString().indexOf('.') + 1)),
],
),
));
});
TextStyle hintTextStyle =
Theme.of(context).textTheme.subhead.apply(color: Color(0xFF999999));
return Scaffold(
appBar: AppBar(title: Text('DateTimePicker Bottom Sheet')),
body: Container(
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
// min datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('min DateTime:', style: hintTextStyle),
),
Text(MIN_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// max datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('max DateTime:', style: hintTextStyle),
),
Text(MAX_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// init datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('init DateTime:', style: hintTextStyle),
),
Text(INIT_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// show title widget checkbox
Container(
height: 30.0,
margin: EdgeInsets.only(top: 16.0),
child: Row(
children: <Widget>[
Text('show title actions', style: TextStyle(fontSize: 16.0)),
Checkbox(
value: _showTitle,
onChanged: (value) {
setState(() {
_showTitle = value;
});
})
],
),
),
// date format input field
TextField(
controller: _formatCtrl,
keyboardType: TextInputType.url,
decoration: InputDecoration(
labelText: 'Date Format: ',
hintText: 'yyyyMMdd HH:mm:ss / H:m / H时:m分',
hintStyle: TextStyle(color: Colors.black26),
),
onChanged: (value) => _format = value,
),
// locale check radio group
Container(
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Locale: '),
Wrap(direction: Axis.horizontal, children: radios)
],
),
),
// selected date time
Container(
width: double.infinity,
margin: EdgeInsets.only(top: 40.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Selected DateTime:',
style: Theme.of(context).textTheme.subhead),
Container(
padding: EdgeInsets.only(top: 4.0),
child: Text(
'${_dateTime.year}-${_dateTime.month.toString().padLeft(2, '0')}-${_dateTime.day.toString().padLeft(2, '0')} ${_dateTime.hour.toString().padLeft(2, '0')}:${_dateTime.minute.toString().padLeft(2, '0')}:${_dateTime.second.toString().padLeft(2, '0')}',
style: Theme.of(context).textTheme.title,
),
),
],
),
),
],
),
),
// display DateTimePicker floating action button
floatingActionButton: FloatingActionButton(
onPressed: _showDateTimePicker,
tooltip: 'Show DateTimePicker',
child: Icon(Icons.access_time),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
///
/// @author dylan wu
/// @since 2019-05-10
class DateTimePickerInPage extends StatefulWidget {
DateTimePickerInPage({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _DateTimePickerInPageState();
}
const String MIN_DATETIME = '2019-05-15 20:10:55';
const String MAX_DATETIME = '2019-07-01 12:30:40';
const String INIT_DATETIME = '2019-05-16 09:00:58';
const String DATE_FORMAT = 'yyyy-MM-dd,H时:m分';
class _DateTimePickerInPageState extends State<DateTimePickerInPage> {
DateTime _dateTime;
@override
void initState() {
super.initState();
_dateTime = DateTime.parse(INIT_DATETIME);
}
@override
Widget build(BuildContext context) {
TextStyle hintTextStyle =
Theme.of(context).textTheme.subhead.apply(color: Color(0xFF999999));
return Scaffold(
appBar: AppBar(title: Text("DateTimePicker In Page")),
body: Container(
decoration: BoxDecoration(color: Colors.white),
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
// min datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('min DateTime:', style: hintTextStyle),
),
Text(MIN_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// max datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('max DateTime:', style: hintTextStyle),
),
Text(MAX_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// init datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('init DateTime:', style: hintTextStyle),
),
Text(INIT_DATETIME,
style: Theme.of(context).textTheme.subhead),
],
),
),
// date format
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('Date Format:', style: hintTextStyle),
),
Text(DATE_FORMAT, style: Theme.of(context).textTheme.subhead),
],
),
),
// show custom title widget
Row(
children: <Widget>[
Text('show custom title', style: hintTextStyle),
Checkbox(value: true, onChanged: (value) {}),
],
),
// custom title height
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
margin: EdgeInsets.only(right: 8.0),
child: Text('custom title height:', style: hintTextStyle),
),
Text('40.0', style: Theme.of(context).textTheme.subhead),
],
),
),
// date time picker widget
Container(
margin: EdgeInsets.only(top: 8.0, bottom: 40.0),
child: DateTimePickerWidget(
minDateTime: DateTime.parse(MIN_DATETIME),
maxDateTime: DateTime.parse(MAX_DATETIME),
initDateTime: DateTime.parse(INIT_DATETIME),
dateFormat: DATE_FORMAT,
pickerTheme: DateTimePickerTheme(
showTitle: false,
title: Container(
width: double.infinity,
height: 40.0,
alignment: Alignment.center,
child: Text('Date Time Picker Title'),
decoration: BoxDecoration(color: Color(0xFFc0ca33)),
),
backgroundColor: Color(0xFFf0f4c3),
),
onChange: (dateTime, selectedIndex) {
setState(() {
_dateTime = dateTime;
});
},
),
),
// selected date time
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Selected DateTime:',
style: Theme.of(context).textTheme.subhead),
Container(
width: double.infinity,
padding: EdgeInsets.only(top: 4.0),
child: Text(
_dateTime != null
? '${_dateTime.year}-${_dateTime.month.toString().padLeft(2, '0')}-${_dateTime.day.toString().padLeft(2, '0')} ${_dateTime.hour.toString().padLeft(2, '0')}:${_dateTime.minute.toString().padLeft(2, '0')}:${_dateTime.second.toString().padLeft(2, '0')}'
: '',
style: Theme.of(context).textTheme.title,
),
),
],
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import './date_picker_bottom_sheet.dart';
import './date_picker_in_page.dart';
import './datetime_picker_bottom_sheet.dart';
import './datetime_picker_in_page.dart';
import './time_picker_bottom_sheet.dart';
import './time_picker_in_page.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Date Picker Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
MyHomePage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
TextStyle textStyle = TextStyle(color: Colors.white, fontSize: 16.0);
return Scaffold(
appBar: AppBar(title: Text('Date Picker Demo')),
body: Container(
width: double.infinity,
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
RaisedButton(
color: Colors.blue,
child: Text("DatePicker Bottom Sheet", style: textStyle),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return DatePickerBottomSheet();
}));
},
),
RaisedButton(
color: Colors.blue,
child: Text("DatePicker In Page", style: textStyle),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return DatePickerInPage();
}));
},
),
RaisedButton(
color: Colors.blue,
child: Text("TimePicker Bottom Sheet", style: textStyle),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return TimePickerBottomSheet();
}));
},
),
RaisedButton(
color: Colors.blue,
child: Text("TimePicker In Page", style: textStyle),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return TimePickerInPage();
}));
},
),
RaisedButton(
color: Colors.blue,
child: Text("DateTimePicker Bottom Sheet", style: textStyle),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return DateTimePickerBottomSheet();
}));
},
),
RaisedButton(
color: Colors.blue,
child: Text("DateTimePicker In Page", style: textStyle),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return DateTimePickerInPage();
}));
},
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
class TimePickerBottomSheet extends StatefulWidget {
TimePickerBottomSheet({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _TimePickerBottomSheetState();
}
const String MIN_DATETIME = '2010-05-12 10:47:00';
const String MAX_DATETIME = '2021-11-25 22:45:10';
const String INIT_DATETIME = '2019-05-17 18:13:15';
class _TimePickerBottomSheetState extends State<TimePickerBottomSheet> {
String _format = 'HH:mm';
TextEditingController _formatCtrl = TextEditingController();
DateTime _dateTime;
@override
void initState() {
super.initState();
_formatCtrl.text = _format;
_dateTime = DateTime.parse(INIT_DATETIME);
}
@override
Widget build(BuildContext context) {
TextStyle hintTextStyle =
Theme.of(context).textTheme.subhead.apply(color: Color(0xFF999999));
return Scaffold(
appBar: AppBar(title: Text('TimePicker Bottom Sheet')),
body: Container(
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
// min datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('min DateTime:', style: hintTextStyle),
),
Text(MIN_DATETIME.substring(11),
style: Theme.of(context).textTheme.subhead),
],
),
),
// max datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('max DateTime:', style: hintTextStyle),
),
Text(MAX_DATETIME.substring(11),
style: Theme.of(context).textTheme.subhead),
],
),
),
// init datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('init DateTime:', style: hintTextStyle),
),
Text(INIT_DATETIME.substring(11),
style: Theme.of(context).textTheme.subhead),
],
),
),
// show custom title widget
Row(
children: <Widget>[
Text('show custom title', style: hintTextStyle),
Checkbox(value: true, onChanged: (value) {}),
],
),
// custom title height
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
margin: EdgeInsets.only(right: 8.0),
child: Text('custom title height:', style: hintTextStyle),
),
Text('56.0', style: Theme.of(context).textTheme.subhead),
],
),
),
// date format input field
TextField(
controller: _formatCtrl,
keyboardType: TextInputType.url,
decoration: InputDecoration(
labelText: 'Formatter',
hintText: 'HH:mm:ss / H-m / H时.m分',
hintStyle: TextStyle(color: Colors.black26),
),
onChanged: (value) => _format = value,
),
// selected time
Container(
margin: EdgeInsets.only(top: 40.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text('Selected Time:',
style: Theme.of(context).textTheme.subhead),
Container(
padding: EdgeInsets.only(left: 12.0),
child: Text(
'${_dateTime.hour.toString().padLeft(2, '0')}:${_dateTime.minute.toString().padLeft(2, '0')}:${_dateTime.second.toString().padLeft(2, '0')}',
style: Theme.of(context).textTheme.title),
),
],
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _showTimePicker,
tooltip: 'Show TimePicker',
child: Icon(Icons.access_time),
),
);
}
/// Display time picker.
void _showTimePicker() {
DatePicker.showDatePicker(
context,
minDateTime: DateTime.parse(MIN_DATETIME),
maxDateTime: DateTime.parse(MAX_DATETIME),
initialDateTime: DateTime.parse(INIT_DATETIME),
dateFormat: _format,
pickerMode: DateTimePickerMode.time, // show TimePicker
pickerTheme: DateTimePickerTheme(
title: Container(
decoration: BoxDecoration(color: Color(0xFFEFEFEF)),
width: double.infinity,
height: 56.0,
alignment: Alignment.center,
child: Text(
'custom Title',
style: TextStyle(color: Colors.green, fontSize: 24.0),
),
),
titleHeight: 56.0,
),
onCancel: () {
debugPrint('onCancel');
},
onChange: (dateTime, List<int> index) {
setState(() {
_dateTime = dateTime;
});
},
onConfirm: (dateTime, List<int> index) {
setState(() {
_dateTime = dateTime;
});
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
///
/// @author dylan wu
/// @since 2019-05-10
class TimePickerInPage extends StatefulWidget {
TimePickerInPage({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _TimePickerInPageState();
}
const String MIN_DATETIME = '2010-05-12 05:15:20';
const String MAX_DATETIME = '2021-11-25 22:45:10';
const String INIT_DATETIME = '2019-05-17 18:13:15';
const String DATE_FORMAT = 'HH时:mm分:s';
class _TimePickerInPageState extends State<TimePickerInPage> {
DateTime _dateTime;
@override
void initState() {
super.initState();
_dateTime = DateTime.parse(INIT_DATETIME);
}
@override
Widget build(BuildContext context) {
TextStyle hintTextStyle =
Theme.of(context).textTheme.subhead.apply(color: Color(0xFF999999));
return Scaffold(
appBar: AppBar(title: Text("TimePicker In Page")),
body: Container(
decoration: BoxDecoration(color: Colors.white),
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
// min datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('min DateTime:', style: hintTextStyle),
),
Text(MIN_DATETIME.substring(11),
style: Theme.of(context).textTheme.subhead),
],
),
),
// max datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('max DateTime:', style: hintTextStyle),
),
Text(MAX_DATETIME.substring(11),
style: Theme.of(context).textTheme.subhead),
],
),
),
// init datetime hint
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('init DateTime:', style: hintTextStyle),
),
Text(INIT_DATETIME.substring(11),
style: Theme.of(context).textTheme.subhead),
],
),
),
// date format
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Row(
children: <Widget>[
Container(
width: 115.0,
child: Text('Date Format:', style: hintTextStyle),
),
Text(DATE_FORMAT, style: Theme.of(context).textTheme.subhead),
],
),
),
// date format input field
Container(
margin: EdgeInsets.only(top: 8.0, bottom: 40.0),
child: TimePickerWidget(
minDateTime: DateTime.parse(MIN_DATETIME),
maxDateTime: DateTime.parse(MAX_DATETIME),
initDateTime: DateTime.parse(INIT_DATETIME),
dateFormat: DATE_FORMAT,
minuteDivider: 15,
pickerTheme: DateTimePickerTheme(
showTitle: false, backgroundColor: Color(0xFFe1bee7)),
onChange: (dateTime, selectedIndex) {
setState(() {
_dateTime = dateTime;
});
},
),
),
// selected time
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text('Selected Time:',
style: Theme.of(context).textTheme.subhead),
Container(
padding: EdgeInsets.only(left: 12.0),
child: Text(
_dateTime != null
? '${_dateTime.hour.toString().padLeft(2, '0')}:${_dateTime.minute.toString().padLeft(2, '0')}:${_dateTime.second.toString().padLeft(2, '0')}'
: '',
style: Theme.of(context).textTheme.title,
),
),
],
),
],
),
),
);
}
}
name: example
description: A new Flutter application.
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
flutter_cupertino_date_picker:
path: ../
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://www.dartlang.org/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.io/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.io/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.io/custom-fonts/#from-packages
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/app.flx
/Flutter/app.zip
/Flutter/flutter_assets/
/Flutter/App.framework
/Flutter/Flutter.framework
/Flutter/Generated.xcconfig
/ServiceDefinitions.json
Pods/
.symlinks/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>
#include "Generated.xcconfig"
#include "Generated.xcconfig"
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0910"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
@end
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment