├── cone_lib ├── lib │ ├── parse.dart │ ├── cone_lib.dart │ ├── pad_zeros.dart │ └── src │ │ └── pad_zeros.dart ├── example │ ├── Makefile │ ├── CHANGELOG.md │ ├── .gitignore │ ├── pubspec.yaml │ └── bin │ │ └── main.dart ├── pubspec.yaml ├── .gitignore ├── Makefile └── test │ └── pad_zeros_test.dart ├── cone_flutter ├── ios │ ├── Gemfile │ ├── Runner │ │ ├── Runner-Bridging-Header.h │ │ ├── AppDelegate.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ └── Contents.json │ │ ├── main.m │ │ ├── AppDelegate.swift │ │ ├── AppDelegate.m │ │ ├── Info.plist │ │ └── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner.xcodeproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── fastlane │ │ ├── Appfile │ │ ├── Gymfile │ │ └── Fastfile │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── .gitignore │ ├── Podfile │ └── Podfile.lock ├── android │ ├── Gemfile │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── ic_launcher-web.png │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ │ ├── values │ │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ │ │ ├── ic_launcher.xml │ │ │ │ │ │ └── ic_launcher_round.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── kotlin │ │ │ │ │ └── info │ │ │ │ │ │ └── tangential │ │ │ │ │ │ ├── cone │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ │ └── cone_flutter │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle.properties │ ├── .gitignore │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ ├── build.gradle │ └── fastlane │ │ └── Fastfile ├── web │ ├── icons │ │ ├── Icon-192.png │ │ └── Icon-512.png │ ├── manifest.json │ └── index.html ├── macos │ ├── Runner │ │ ├── Configs │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ ├── Warnings.xcconfig │ │ │ └── AppInfo.xcconfig │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ ├── app_icon_1024.png │ │ │ │ ├── app_icon_128.png │ │ │ │ ├── app_icon_16.png │ │ │ │ ├── app_icon_256.png │ │ │ │ ├── app_icon_32.png │ │ │ │ ├── app_icon_512.png │ │ │ │ ├── app_icon_64.png │ │ │ │ └── Contents.json │ │ ├── AppDelegate.swift │ │ ├── Release.entitlements │ │ ├── MainFlutterWindow.swift │ │ ├── DebugProfile.entitlements │ │ └── Info.plist │ ├── .gitignore │ ├── Flutter │ │ ├── Flutter-Debug.xcconfig │ │ ├── Flutter-Release.xcconfig │ │ └── GeneratedPluginRegistrant.swift │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Runner.xcodeproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Podfile.lock │ └── Podfile ├── fonts │ └── IBM_Plex_Mono │ │ ├── IBMPlexMono-Regular.ttf │ │ └── OFL.txt ├── lib │ ├── src │ │ ├── types.dart │ │ ├── transaction.dart │ │ ├── localizations.dart │ │ ├── services.dart │ │ └── redux │ │ │ ├── actions.dart │ │ │ └── state.dart │ └── main.dart ├── .metadata ├── Makefile ├── .gitignore ├── test │ ├── services_test.dart │ ├── unit_test.dart │ └── redux_test.dart ├── test_driver │ ├── screenshots.dart │ └── screenshots_test.dart └── pubspec.yaml ├── uri_picker ├── example │ ├── ios │ │ ├── Runner │ │ │ ├── Runner-Bridging-Header.h │ │ │ ├── Assets.xcassets │ │ │ │ ├── LaunchImage.imageset │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ ├── README.md │ │ │ │ │ └── Contents.json │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ │ └── Contents.json │ │ │ ├── AppDelegate.swift │ │ │ ├── Base.lproj │ │ │ │ ├── Main.storyboard │ │ │ │ └── LaunchScreen.storyboard │ │ │ └── Info.plist │ │ ├── Flutter │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── AppFrameworkInfo.plist │ │ ├── Runner.xcodeproj │ │ │ ├── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── .gitignore │ │ ├── Podfile.lock │ │ └── Podfile │ ├── web │ │ ├── favicon.png │ │ ├── icons │ │ │ ├── Icon-192.png │ │ │ ├── Icon-512.png │ │ │ ├── Icon-maskable-192.png │ │ │ └── Icon-maskable-512.png │ │ ├── manifest.json │ │ └── index.html │ ├── android │ │ ├── gradle.properties │ │ ├── app │ │ │ ├── src │ │ │ │ ├── main │ │ │ │ │ ├── res │ │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── drawable │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── values │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ │ └── values-night │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── kotlin │ │ │ │ │ │ └── info │ │ │ │ │ │ │ └── tangential │ │ │ │ │ │ │ └── uri_picker_example │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── debug │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ └── profile │ │ │ │ │ └── AndroidManifest.xml │ │ │ └── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ ├── .gitignore │ │ ├── settings.gradle │ │ └── build.gradle │ ├── macos │ │ ├── Runner │ │ │ ├── Configs │ │ │ │ ├── Debug.xcconfig │ │ │ │ ├── Release.xcconfig │ │ │ │ ├── Warnings.xcconfig │ │ │ │ └── AppInfo.xcconfig │ │ │ ├── Assets.xcassets │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── app_icon_128.png │ │ │ │ │ ├── app_icon_16.png │ │ │ │ │ ├── app_icon_256.png │ │ │ │ │ ├── app_icon_32.png │ │ │ │ │ ├── app_icon_512.png │ │ │ │ │ ├── app_icon_64.png │ │ │ │ │ ├── app_icon_1024.png │ │ │ │ │ └── Contents.json │ │ │ ├── AppDelegate.swift │ │ │ ├── Release.entitlements │ │ │ ├── MainFlutterWindow.swift │ │ │ ├── DebugProfile.entitlements │ │ │ └── Info.plist │ │ ├── .gitignore │ │ ├── Flutter │ │ │ ├── Flutter-Debug.xcconfig │ │ │ ├── Flutter-Release.xcconfig │ │ │ └── GeneratedPluginRegistrant.swift │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Runner.xcodeproj │ │ │ ├── project.xcworkspace │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ ├── Podfile.lock │ │ └── Podfile │ ├── .metadata │ ├── README.md │ ├── .gitignore │ ├── test │ │ └── widget_test.dart │ ├── analysis_options.yaml │ ├── lib │ │ └── main.dart │ └── pubspec.yaml ├── analysis_options.yaml ├── README.md ├── CHANGELOG.md ├── .metadata ├── .gitignore ├── test │ └── uri_picker_test.dart ├── LICENSE └── pubspec.yaml ├── README.md ├── issue_template.md ├── .travis.yml ├── DEPLOY.md └── ci-script.sh /cone_lib/lib/parse.dart: -------------------------------------------------------------------------------- 1 | library parse; 2 | 3 | export 'src/parse.dart'; 4 | -------------------------------------------------------------------------------- /cone_flutter/ios/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /cone_lib/lib/cone_lib.dart: -------------------------------------------------------------------------------- 1 | library cone_lib; 2 | 3 | export 'src/types.dart'; 4 | -------------------------------------------------------------------------------- /cone_flutter/android/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /cone_lib/lib/pad_zeros.dart: -------------------------------------------------------------------------------- 1 | library pad_zeros; 2 | 3 | export 'src/pad_zeros.dart'; 4 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /cone_flutter/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/web/icons/Icon-192.png -------------------------------------------------------------------------------- /cone_flutter/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/web/icons/Icon-512.png -------------------------------------------------------------------------------- /uri_picker/example/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/web/favicon.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_lib/example/Makefile: -------------------------------------------------------------------------------- 1 | executable: 2 | pub global activate --source path . 3 | 4 | version: 5 | pub run build_runner build 6 | -------------------------------------------------------------------------------- /uri_picker/example/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/web/icons/Icon-192.png -------------------------------------------------------------------------------- /uri_picker/example/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/web/icons/Icon-512.png -------------------------------------------------------------------------------- /cone_flutter/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/xcuserdata/ 7 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /uri_picker/example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /uri_picker/example/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /uri_picker/example/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /cone_flutter/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /uri_picker/example/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /cone_flutter/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /cone_flutter/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_flutter/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf -------------------------------------------------------------------------------- /uri_picker/example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /cone_flutter/lib/src/types.dart: -------------------------------------------------------------------------------- 1 | enum Spacing { 2 | zero, 3 | one, 4 | } 5 | 6 | enum ConeBrightness { 7 | auto, 8 | light, 9 | dark, 10 | } 11 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /cone_lib/example/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.1.0 2 | 3 | - Initial version of cone cli example, modified from Stagehand template 4 | 5 | - Provides commands help, accounts, payees 6 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cone_flutter/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_flutter/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /uri_picker/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | 3 | # Additional information about this file can be found at 4 | # https://dart.dev/guides/language/analysis-options 5 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/kotlin/info/tangential/cone/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package info.tangential.cone 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradyt/cone/HEAD/uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/kotlin/info/tangential/cone_flutter/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package info.tangential.cone_flutter 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Welcome to the cone project. 2 | 3 | This project is a contribution to the ecosystem of tools compatible 4 | with ledger-cli and ledger-likes. 5 | 6 | Please see the [cone website](https://cone.tangential.info) for more 7 | information. 8 | -------------------------------------------------------------------------------- /uri_picker/README.md: -------------------------------------------------------------------------------- 1 | # uri_picker 2 | 3 | Flutter plugin for Android URI picker. 4 | 5 | Uses Android's Storage Access Framework and `ACTION_OPEN_DOCUMENT`. 6 | 7 | Provides persistent access to local and cloud files for reading and 8 | writing. 9 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/kotlin/info/tangential/uri_picker_example/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package info.tangential.uri_picker_example 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /cone_flutter/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | /Gemfile.lock 10 | /vendor/bundle/ 11 | 12 | /fastlane/report.xml 13 | /fastlane/README.md -------------------------------------------------------------------------------- /cone_flutter/ios/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier("info.tangential.cone") # The bundle identifier of your app 2 | apple_id("mail@bradyt.com") # Your Apple email address 3 | 4 | 5 | # For more information about the Appfile, see: 6 | # https://docs.fastlane.tools/advanced/#appfile 7 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /cone_flutter/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uri_picker/example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip 7 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_lib/example/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | # Remove the following pattern if you wish to check in your lock file 5 | pubspec.lock 6 | 7 | # Conventional directory for build outputs 8 | build/ 9 | 10 | # Directory created by dartdoc 11 | doc/api/ 12 | 13 | lib/src/version.dart -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_lib/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: cone_lib 2 | description: Library for cone app 3 | homepage: https://github.com/bradyt/cone 4 | 5 | environment: 6 | sdk: '>=2.4.0 <3.0.0' 7 | 8 | dependencies: 9 | built_value: 10 | intl: 11 | petitparser: 12 | 13 | dev_dependencies: 14 | build_runner: 15 | built_value_generator: 16 | test: 17 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /cone_flutter/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 1ad9baa8b99a2897c20f9e6e54d3b9b359ade314 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /cone_lib/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | # Remove the following pattern if you wish to check in your lock file 5 | pubspec.lock 6 | 7 | # Conventional directory for build outputs 8 | build/ 9 | 10 | # Directory created by dartdoc 11 | doc/api/ 12 | 13 | # Coverage 14 | coverage/ 15 | test/.test_coverage.dart 16 | -------------------------------------------------------------------------------- /uri_picker/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.0.1 2 | 3 | * Initial release to public repo. 4 | 5 | * Code factored out of cone app, to present plugin. 6 | 7 | * Provides functionality on Android to pick URI from local or cloud 8 | storage, and read and write to. iOS is currently not supported. 9 | 10 | * Uses Android's Storage Access Framework and `ACTION_OPEN_DOCUMENT`. 11 | -------------------------------------------------------------------------------- /uri_picker/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 77d935af4db863f6abd0b9c31c7e6df2a13de57b 8 | channel: stable 9 | 10 | project_type: package 11 | -------------------------------------------------------------------------------- /uri_picker/example/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 77d935af4db863f6abd0b9c31c7e6df2a13de57b 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /uri_picker/example/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /issue_template.md: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | 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. -------------------------------------------------------------------------------- /cone_flutter/ios/fastlane/Gymfile: -------------------------------------------------------------------------------- 1 | # -*- ruby -*- 2 | # For more information about this configuration visit 3 | # https://docs.fastlane.tools/actions/gym/#gymfile 4 | 5 | # In general, you can use the options available 6 | # fastlane gym --help 7 | 8 | destination("generic/platform=iOS") 9 | sdk("iphoneos") 10 | include_symbols(true) 11 | include_bitcode(false) 12 | export_xcargs("-allowProvisioningUpdates") 13 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | 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. -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /cone_lib/example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: cone_cli 2 | description: A sample command-line application for cone. 3 | version: 0.1.0 4 | homepage: https://github.com/bradyt/cone/tree/master/cone_lib/example/ 5 | author: Brady Trainor 6 | 7 | environment: 8 | sdk: '>=2.4.0 <3.0.0' 9 | 10 | dependencies: 11 | cone_lib: 12 | path: .. 13 | 14 | executables: 15 | cone: main 16 | 17 | dev_dependencies: 18 | build_runner: 19 | build_version: 20 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController.init() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import file_picker_writable 9 | import path_provider_macos 10 | 11 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 12 | FilePickerWritablePlugin.register(with: registry.registrar(forPlugin: "FilePickerWritablePlugin")) 13 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 14 | } 15 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController.init() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | com.apple.security.network.server 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | com.apple.security.network.server 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /uri_picker/example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /cone_flutter/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import file_picker_writable 9 | import path_provider_macos 10 | import shared_preferences_macos 11 | 12 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 13 | FilePickerWritablePlugin.register(with: registry.registrar(forPlugin: "FilePickerWritablePlugin")) 14 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 15 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) 16 | } 17 | -------------------------------------------------------------------------------- /uri_picker/example/README.md: -------------------------------------------------------------------------------- 1 | # uri_picker_example 2 | 3 | Demonstrates how to use the uri_picker plugin. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /uri_picker/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. 25 | /pubspec.lock 26 | **/doc/api/ 27 | .dart_tool/ 28 | .packages 29 | build/ 30 | -------------------------------------------------------------------------------- /cone_flutter/ios/fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | # This file contains the fastlane.tools configuration 2 | # You can find the documentation at https://docs.fastlane.tools 3 | # 4 | # For a list of all available actions, check out 5 | # 6 | # https://docs.fastlane.tools/actions 7 | # 8 | # For a list of all available plugins, check out 9 | # 10 | # https://docs.fastlane.tools/plugins/available-plugins 11 | # 12 | 13 | # Uncomment the line if you want fastlane to automatically update itself 14 | # update_fastlane 15 | 16 | default_platform(:ios) 17 | 18 | platform :ios do 19 | desc "Put app on TestFlight" 20 | lane :beta do 21 | gym 22 | pilot 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /uri_picker/test/uri_picker_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:uri_picker/uri_picker.dart'; 4 | 5 | void main() { 6 | const MethodChannel channel = MethodChannel('tangential.info/uri_picker'); 7 | 8 | TestWidgetsFlutterBinding.ensureInitialized(); 9 | 10 | setUp(() { 11 | channel.setMockMethodCallHandler((MethodCall methodCall) async { 12 | return '42'; 13 | }); 14 | }); 15 | 16 | tearDown(() { 17 | channel.setMockMethodCallHandler(null); 18 | }); 19 | 20 | test('getPlatformVersion', () async { 21 | expect(await UriPicker.pickUri(), '42'); 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /cone_flutter/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cone", 3 | "short_name": "cone", 4 | "start_url": ".", 5 | "display": "minimal-ui", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = cone 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = info.tangential.cone 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2020 info.tangential. All rights reserved. 15 | -------------------------------------------------------------------------------- /cone_flutter/android/settings.gradle: -------------------------------------------------------------------------------- 1 | // Copyright 2014 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | include ':app' 6 | 7 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 8 | def properties = new Properties() 9 | 10 | assert localPropertiesFile.exists() 11 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 12 | 13 | def flutterSdkPath = properties.getProperty("flutter.sdk") 14 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 15 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 16 | -------------------------------------------------------------------------------- /cone_flutter/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | cone 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = uri_picker_example 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = info.tangential.uriPickerExample 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2021 info.tangential. All rights reserved. 15 | -------------------------------------------------------------------------------- /cone_lib/Makefile: -------------------------------------------------------------------------------- 1 | PUBSPECLOCK=pubspec.lock 2 | TYPESGDART=lib/src/types.g.dart 3 | 4 | $(PUBSPECLOCK): 5 | pub get 6 | 7 | $(TYPESGDART): $(PUBSPECLOCK) 8 | pub run build_runner build 9 | 10 | build: $(TYPESGDART) 11 | 12 | watch: 13 | pub run build_runner watch 14 | 15 | analyze: 16 | ls lib/**/*.dart test/*.dart | entr -s 'dartanalyzer .' 17 | 18 | docs: 19 | ls lib/**/*.dart | entr dartdoc 20 | 21 | .PHONY: test 22 | 23 | test: 24 | ls lib/**/*.dart test/*.dart | entr -s 'pub run test' 25 | 26 | parse_test: 27 | ls lib/**/*.dart test/*.dart | entr -s 'pub run test test/parse_test.dart' 28 | 29 | test_coverage: 30 | ls lib/**/*.dart test/*.dart | entr -s 'pub run test_coverage && genhtml -o coverage coverage/lcov.info' 31 | -------------------------------------------------------------------------------- /cone_flutter/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /uri_picker/example/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /uri_picker/example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.1.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /cone_flutter/ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | 34 | /Gemfile.lock 35 | /vendor/bundle/ 36 | 37 | /fastlane/report.xml 38 | /fastlane/README.md -------------------------------------------------------------------------------- /cone_flutter/Makefile: -------------------------------------------------------------------------------- 1 | PACKAGES=.packages 2 | STATEGDART=lib/src/redux/state.g.dart 3 | 4 | $(PACKAGES): 5 | flutter pub get 6 | 7 | get: $(PACKAGES) 8 | 9 | $(STATEGDART): $(PACKAGES) 10 | cd ../cone_lib && make build 11 | flutter pub run build_runner build 12 | 13 | build: $(STATEGDART) 14 | 15 | watch: $(PACKAGES) 16 | flutter pub run build_runner watch 17 | 18 | analyze: 19 | flutter analyze --watch 20 | 21 | .PHONY: coverage build 22 | coverage: 23 | flutter test --coverage 24 | genhtml -o coverage coverage/lcov.info 25 | reload-browser 'Google Chrome' 26 | 27 | install: 28 | flutter build apk --flavor=play --target-platform android-arm,android-arm64,android-x64 --split-per-abi 29 | 30 | test_android_build: $(STATEGDART) 31 | flutter build apk --flavor=dev --target-platform android-x64 --split-per-abi 32 | 33 | test_ios_build: $(STATEGDART) 34 | flutter build ios 35 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - file_picker_writable (0.0.1): 3 | - Flutter 4 | - Flutter (1.0.0) 5 | - path_provider_ios (0.0.1): 6 | - Flutter 7 | 8 | DEPENDENCIES: 9 | - file_picker_writable (from `.symlinks/plugins/file_picker_writable/ios`) 10 | - Flutter (from `Flutter`) 11 | - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) 12 | 13 | EXTERNAL SOURCES: 14 | file_picker_writable: 15 | :path: ".symlinks/plugins/file_picker_writable/ios" 16 | Flutter: 17 | :path: Flutter 18 | path_provider_ios: 19 | :path: ".symlinks/plugins/path_provider_ios/ios" 20 | 21 | SPEC CHECKSUMS: 22 | file_picker_writable: 67959f5c516feb5121693a14eda63fcbe6cbb6dc 23 | Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a 24 | path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5 25 | 26 | PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c 27 | 28 | COCOAPODS: 1.10.1 29 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | os: 2 | - linux 3 | sudo: true 4 | addons: 5 | apt: 6 | sources: 7 | - ubuntu-toolchain-r-test 8 | packages: 9 | - libstdc++6 10 | 11 | before_script: 12 | # Install the standalone Dart SDK 13 | - sudo apt-get update 14 | - sudo apt-get install apt-transport-https 15 | - sudo sh -c 'curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' 16 | - sudo sh -c 'curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list' 17 | - sudo apt-get update 18 | - sudo apt-get install dart 19 | - export PATH="$PATH:/usr/lib/dart/bin" 20 | 21 | # Install Flutter 22 | - git clone https://github.com/flutter/flutter.git -b stable --depth 1 23 | - export PATH="$PATH:`pwd`/flutter/bin" 24 | - flutter doctor 25 | 26 | script: 27 | - ./ci-script.sh 28 | 29 | cache: 30 | directories: 31 | - $HOME/.pub-cache 32 | -------------------------------------------------------------------------------- /cone_flutter/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /uri_picker/example/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | -------------------------------------------------------------------------------- /cone_flutter/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Exceptions to above rules. 43 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 44 | 45 | # Coverage 46 | coverage/ 47 | test/.test_coverage.dart 48 | -------------------------------------------------------------------------------- /uri_picker/example/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:uri_picker_example/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Verify Platform version', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that platform version is retrieved. 19 | expect( 20 | find.byWidgetPredicate( 21 | (Widget widget) => 22 | widget is Text && widget.data.startsWith('Running on:'), 23 | ), 24 | findsOneWidget, 25 | ); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /cone_flutter/android/fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | # This file contains the fastlane.tools configuration 2 | # You can find the documentation at https://docs.fastlane.tools 3 | # 4 | # For a list of all available actions, check out 5 | # 6 | # https://docs.fastlane.tools/actions 7 | # 8 | # For a list of all available plugins, check out 9 | # 10 | # https://docs.fastlane.tools/plugins/available-plugins 11 | # 12 | 13 | # Uncomment the line if you want fastlane to automatically update itself 14 | # update_fastlane 15 | 16 | default_platform(:android) 17 | 18 | platform :android do 19 | desc "Validate that the Google Play Store `json_key` works" 20 | lane :validate do 21 | validate_play_store_json_key 22 | end 23 | 24 | desc "Download metadata and binaries from Google Play (via _supply_)" 25 | lane :download do 26 | download_from_play_store 27 | end 28 | 29 | desc "Retrieves version codes for a Google Play track" 30 | lane :version do 31 | # https://github.com/fastlane/fastlane/issues/16593 32 | google_play_track_version_codes 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - file_picker_writable (0.0.1): 3 | - FlutterMacOS 4 | - FlutterMacOS (1.0.0) 5 | - path_provider_macos (0.0.1): 6 | - FlutterMacOS 7 | 8 | DEPENDENCIES: 9 | - file_picker_writable (from `Flutter/ephemeral/.symlinks/plugins/file_picker_writable/macos`) 10 | - FlutterMacOS (from `Flutter/ephemeral`) 11 | - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) 12 | 13 | EXTERNAL SOURCES: 14 | file_picker_writable: 15 | :path: Flutter/ephemeral/.symlinks/plugins/file_picker_writable/macos 16 | FlutterMacOS: 17 | :path: Flutter/ephemeral 18 | path_provider_macos: 19 | :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos 20 | 21 | SPEC CHECKSUMS: 22 | file_picker_writable: 91694d55c22f8430d4be119f0afb49755e65cd0c 23 | FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424 24 | path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f 25 | 26 | PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c 27 | 28 | COCOAPODS: 1.10.1 29 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /DEPLOY.md: -------------------------------------------------------------------------------- 1 | 2 | Notes for deploying. 3 | 4 | # Prep 5 | 6 | ``` 7 | git clean -dffx 8 | cd cone_flutter 9 | make build 10 | ``` 11 | 12 | # Installing fastlane 13 | 14 | See . 15 | 16 | ``` 17 | gem install --user-install bundler 18 | bundle config set path 'vendor/bundle' 19 | ``` 20 | 21 | # Android 22 | 23 | # iOS 24 | 25 | ``` 26 | flutter build ios --build-name 0.0.1 --build-number 0.0.3 27 | cd ios 28 | ``` 29 | 30 | ## Manually, via Xcode 31 | 32 | See . 33 | 34 | ``` 35 | open Runner.xcworkspace 36 | ``` 37 | 38 | Build iOS 8.0. Use automatic provisioning signing. 39 | 40 | Product > Archive 41 | 42 | Validate App 43 | 44 | Strip Swift symbols 45 | 46 | Upload your app's symbols to receive symbolicated reports from Apple 47 | 48 | Automatically manage signing 49 | 50 | Symbols: Included 51 | Bitcode: Not included 52 | 53 | Distribute app 54 | 55 | ## Automatically, via fastlane 56 | 57 | ``` 58 | bundle update 59 | bundle exec fastlane ios beta 60 | ``` 61 | 62 | See `./cone_flutter/ios/fastlane/Gymfile`. 63 | -------------------------------------------------------------------------------- /uri_picker/example/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uri_picker_example", 3 | "short_name": "uri_picker_example", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "Demonstrates how to use the uri_picker plugin.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /uri_picker/LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /cone_lib/lib/src/pad_zeros.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_as 2 | // ignore_for_file: public_member_api_docs 3 | 4 | import 'package:intl/intl.dart' show NumberFormat; 5 | 6 | String padZeros({String locale, String quantity, String commodity}) { 7 | if (locale == null || quantity == null) { 8 | throw Exception('Please use explicit locale with padZeros'); 9 | } 10 | final int decimalDigits = 11 | NumberFormat.currency(name: commodity).decimalDigits; 12 | final NumberFormat parser = NumberFormat.decimalPattern(locale); 13 | NumberFormat formatter; 14 | 15 | if (quantity.length >= 16) { 16 | return quantity; 17 | } else { 18 | try { 19 | final num parsed = parser.parse(quantity); 20 | final int integerDigits = parsed.round().toString().length; 21 | 22 | formatter = NumberFormat( 23 | '0.${'0' * decimalDigits}' 24 | '${'#' * (15 - integerDigits - decimalDigits)}', 25 | locale); 26 | final String result = formatter.format(parsed); 27 | if (parser.parse(quantity) == parser.parse(result)) { 28 | return result; 29 | } else { 30 | return quantity; 31 | } 32 | } on FormatException catch (_) {} 33 | return quantity; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /cone_flutter/lib/src/transaction.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Transaction { 4 | Transaction(this.date, this.description, this.postings); 5 | 6 | String date; 7 | String description; 8 | List postings; 9 | 10 | @override 11 | String toString() { 12 | String result = '$date $description'; 13 | if (postings.isNotEmpty) { 14 | result += '\n ' + 15 | postings 16 | .map((Posting ps) => ps.toString()) 17 | .where((String it) => it != null) 18 | .join('\n '); 19 | } 20 | return result.trimRight(); 21 | } 22 | } 23 | 24 | class Posting { 25 | Posting({ 26 | this.key, 27 | this.account, 28 | this.amount, 29 | this.currency, 30 | this.currencyOnLeft, 31 | }); 32 | 33 | String account; 34 | String amount; 35 | String currency; 36 | bool currencyOnLeft; 37 | Key key; 38 | 39 | @override 40 | String toString() { 41 | if (account == null) { 42 | return null; 43 | } else if (amount == '') { 44 | return '$account'; 45 | } else if (currencyOnLeft) { 46 | return '$account $currency $amount'.trimRight(); 47 | } else { 48 | return '$account $amount $currency'.trimRight(); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /cone_flutter/test/services_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:shared_preferences/shared_preferences.dart'; 4 | 5 | import 'package:cone/src/services.dart'; 6 | 7 | void main() { 8 | test('Test PersistentSettings.', () async { 9 | SharedPreferences.setMockInitialValues({ 10 | 'brightness': 0, 11 | }); 12 | 13 | final PersistentSettings settings = await PersistentSettings.getSettings(); 14 | 15 | expect( 16 | settings.brightness, 17 | 0, 18 | ); 19 | }); 20 | test('Test appendFile.', () async { 21 | String mockFile = ''; 22 | TestWidgetsFlutterBinding.ensureInitialized(); 23 | const MethodChannel('tangential.info/uri_picker') 24 | .setMockMethodCallHandler((MethodCall methodCall) async { 25 | if (methodCall.method == 'readTextfromuri') { 26 | return mockFile; 27 | } else if (methodCall.method == 'alterDocument') { 28 | mockFile += methodCall.arguments['newContents'] as String; 29 | } 30 | return ''; 31 | }); 32 | await appendFile('foo', 'bar'); 33 | expect(mockFile, 'bar\n'); 34 | await appendFile('foo', 'baz'); 35 | expect(mockFile, 'bar\nbaz\n'); 36 | }); 37 | } 38 | -------------------------------------------------------------------------------- /cone_flutter/macos/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FlutterMacOS (1.0.0) 3 | - shared_preferences (0.0.1) 4 | - shared_preferences_macos (0.0.1): 5 | - FlutterMacOS 6 | - uri_picker (0.0.1): 7 | - FlutterMacOS 8 | 9 | DEPENDENCIES: 10 | - FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64`) 11 | - shared_preferences (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos`) 12 | - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) 13 | - uri_picker (from `Flutter/ephemeral/.symlinks/plugins/uri_picker/macos`) 14 | 15 | EXTERNAL SOURCES: 16 | FlutterMacOS: 17 | :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64 18 | shared_preferences: 19 | :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos 20 | shared_preferences_macos: 21 | :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos 22 | uri_picker: 23 | :path: Flutter/ephemeral/.symlinks/plugins/uri_picker/macos 24 | 25 | SPEC CHECKSUMS: 26 | FlutterMacOS: 15bea8a44d2fa024068daa0140371c020b4b6ff9 27 | shared_preferences: 9fec34d1bd906196a4da48fcf6c3ad521cc00b8d 28 | shared_preferences_macos: 5e5c2839894accb56b7d23328905b757f2bafaf6 29 | uri_picker: 7351182baa8b0ab0422961d14b10aa11bf63490c 30 | 31 | PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7 32 | 33 | COCOAPODS: 1.8.4 34 | -------------------------------------------------------------------------------- /cone_flutter/test_driver/screenshots.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart' show WidgetsApp; 2 | import 'package:flutter/services.dart' show MethodCall, MethodChannel; 3 | import 'package:flutter_driver/driver_extension.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | 6 | import 'package:cone/main.dart' as app; 7 | 8 | void main() { 9 | enableFlutterDriverExtension(); 10 | 11 | WidgetsApp.debugAllowBannerOverride = false; 12 | 13 | String bufferContents; 14 | 15 | const MethodChannel('tangential.info/uri_picker') 16 | .setMockMethodCallHandler((MethodCall methodCall) async { 17 | if (methodCall.method == 'pickUri') { 18 | bufferContents = ''' 19 | account assets:cash 20 | account assets:bs:checking 21 | account assets:bs:savings 22 | account expenses:groceries 23 | account expenses:miscellaneous 24 | account liabilities:moneybank 25 | account liabilities:viza 26 | account income:snpp 27 | 28 | 1995-05-05 Springfield Power Company 29 | assets:bs:checking 362.19 USD 30 | income:snpp 31 | '''; 32 | return Future.value('Google Drive - ledger.txt'); 33 | } else if (methodCall.method == 'readTextFromUri') { 34 | return bufferContents; 35 | } else if (methodCall.method == 'alterDocument') { 36 | bufferContents = methodCall.arguments['newContents'] as String; 37 | } 38 | return null; 39 | }); 40 | 41 | app.main( 42 | snapshots: true, 43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.11' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def flutter_root 13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) 14 | unless File.exist?(generated_xcode_build_settings_path) 15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" 16 | end 17 | 18 | File.foreach(generated_xcode_build_settings_path) do |line| 19 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 20 | return matches[1].strip if matches 21 | end 22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" 23 | end 24 | 25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 26 | 27 | flutter_macos_podfile_setup 28 | 29 | target 'Runner' do 30 | use_frameworks! 31 | use_modular_headers! 32 | 33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 34 | end 35 | 36 | post_install do |installer| 37 | installer.pods_project.targets.each do |target| 38 | flutter_additional_macos_build_settings(target) 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /ci-script.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | # Run dartfmt 8 | echo "--- Running dart format in cone_lib... ---" 9 | (cd cone_lib && dart format --set-exit-if-changed . >/dev/null) 10 | 11 | echo "--- Running dart format in cone_flutter... ---" 12 | (cd cone_flutter && dart format --set-exit-if-changed . >/dev/null) 13 | 14 | echo "--- Running dart format in uri_picker... ---" 15 | (cd uri_picker && dart format --set-exit-if-changed . >/dev/null) 16 | 17 | # Get all packages 18 | (cd cone_lib && dart pub get) 19 | 20 | (cd cone_flutter && flutter pub get) 21 | 22 | (cd uri_picker && flutter pub get) 23 | 24 | # Build runner 25 | (cd cone_lib && dart pub run build_runner build) 26 | (cd cone_flutter && flutter pub run build_runner build --delete-conflicting-outputs) 27 | 28 | # Analyze 29 | echo "--- Running dartanalyzer in cone_lib... ---" 30 | (cd cone_lib && dartanalyzer ./ --fatal-infos --fatal-warnings) 31 | 32 | echo "--- Running dartanalyzer in cone_flutter... ---" 33 | (cd cone_flutter && dartanalyzer ./ --fatal-infos --fatal-warnings) 34 | 35 | echo "--- Running dartanalyzer in uri_picker... ---" 36 | (cd uri_picker && dartanalyzer ./ --fatal-infos --fatal-warnings) 37 | 38 | # Run tests 39 | echo "--- Running tests in cone_lib... ---" 40 | (cd cone_lib && pub run test) 41 | 42 | echo "--- Running tests in cone_flutter... ---" 43 | (cd cone_flutter && flutter test) 44 | 45 | echo "--- Running tests in uri_picker... ---" 46 | (cd uri_picker && flutter test) 47 | -------------------------------------------------------------------------------- /cone_flutter/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /cone_flutter/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - file_picker_writable (0.0.1): 3 | - Flutter 4 | - Flutter (1.0.0) 5 | - flutter_keyboard_visibility (0.0.1): 6 | - Flutter 7 | - path_provider_ios (0.0.1): 8 | - Flutter 9 | - shared_preferences_ios (0.0.1): 10 | - Flutter 11 | 12 | DEPENDENCIES: 13 | - file_picker_writable (from `.symlinks/plugins/file_picker_writable/ios`) 14 | - Flutter (from `Flutter`) 15 | - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) 16 | - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) 17 | - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) 18 | 19 | EXTERNAL SOURCES: 20 | file_picker_writable: 21 | :path: ".symlinks/plugins/file_picker_writable/ios" 22 | Flutter: 23 | :path: Flutter 24 | flutter_keyboard_visibility: 25 | :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" 26 | path_provider_ios: 27 | :path: ".symlinks/plugins/path_provider_ios/ios" 28 | shared_preferences_ios: 29 | :path: ".symlinks/plugins/shared_preferences_ios/ios" 30 | 31 | SPEC CHECKSUMS: 32 | file_picker_writable: 67959f5c516feb5121693a14eda63fcbe6cbb6dc 33 | Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a 34 | flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 35 | path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5 36 | shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32 37 | 38 | PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c 39 | 40 | COCOAPODS: 1.10.1 41 | -------------------------------------------------------------------------------- /uri_picker/example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | cone 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Uri Picker 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | uri_picker_example 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 15 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /uri_picker/example/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:async'; 3 | 4 | import 'package:flutter/services.dart'; 5 | import 'package:uri_picker/uri_picker.dart'; 6 | 7 | void main() { 8 | runApp(const MyApp()); 9 | } 10 | 11 | class MyApp extends StatefulWidget { 12 | const MyApp({Key key}) : super(key: key); 13 | 14 | @override 15 | State createState() => _MyAppState(); 16 | } 17 | 18 | class _MyAppState extends State { 19 | String _uri; 20 | 21 | // Platform messages are asynchronous, so we initialize in an async method. 22 | Future pickUri() async { 23 | String uri; 24 | // Platform messages may fail, so we use a try/catch PlatformException. 25 | try { 26 | uri = await UriPicker.pickUri(); 27 | } on PlatformException { 28 | rethrow; 29 | } 30 | 31 | // If the widget was removed from the tree while the asynchronous platform 32 | // message was in flight, we want to discard the reply rather than calling 33 | // setState to update our non-existent appearance. 34 | if (!mounted || uri == null) return; 35 | 36 | setState(() { 37 | _uri = uri; 38 | }); 39 | } 40 | 41 | @override 42 | Widget build(BuildContext context) { 43 | return MaterialApp( 44 | home: Scaffold( 45 | appBar: AppBar( 46 | title: const Text('Uri Picker example app'), 47 | ), 48 | body: Center( 49 | child: SingleChildScrollView( 50 | child: Column( 51 | children: [ 52 | Text(_uri ?? 'No uri yet'), 53 | ElevatedButton( 54 | child: const Text('Pick URI'), 55 | onPressed: () async { 56 | await pickUri(); 57 | }, 58 | ), 59 | ], 60 | ), 61 | ), 62 | ), 63 | ), 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /uri_picker/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: uri_picker 2 | description: Flutter plugin for Android URI picker. 3 | version: 0.0.4 4 | homepage: https://github.com/bradyt/cone/uri_picker 5 | 6 | publish_to: none 7 | 8 | environment: 9 | sdk: ^2.9.0 10 | flutter: ">=1.17.0" 11 | 12 | dependencies: 13 | file_picker_writable: 14 | git: 15 | url: https://github.com/bradyt/file_picker_writable.git 16 | ref: cone/text/plain.2 17 | intl: 18 | path_provider: 19 | uuid: 20 | flutter: 21 | sdk: flutter 22 | 23 | dev_dependencies: 24 | flutter_test: 25 | sdk: flutter 26 | flutter_lints: 27 | 28 | # For information on the generic Dart part of this file, see the 29 | # following page: https://dart.dev/tools/pub/pubspec 30 | 31 | # The following section is specific to Flutter. 32 | flutter: 33 | 34 | # To add assets to your package, add an assets section, like this: 35 | # assets: 36 | # - images/a_dot_burr.jpeg 37 | # - images/a_dot_ham.jpeg 38 | # 39 | # For details regarding assets in packages, see 40 | # https://flutter.dev/assets-and-images/#from-packages 41 | # 42 | # An image asset can refer to one or more resolution-specific "variants", see 43 | # https://flutter.dev/assets-and-images/#resolution-aware. 44 | 45 | # To add custom fonts to your package, add a fonts section here, 46 | # in this "flutter" section. Each entry in this list should have a 47 | # "family" key with the font family name, and a "fonts" key with a 48 | # list giving the asset and other descriptors for the font. For 49 | # example: 50 | # fonts: 51 | # - family: Schyler 52 | # fonts: 53 | # - asset: fonts/Schyler-Regular.ttf 54 | # - asset: fonts/Schyler-Italic.ttf 55 | # style: italic 56 | # - family: Trajan Pro 57 | # fonts: 58 | # - asset: fonts/TrajanPro.ttf 59 | # - asset: fonts/TrajanPro_Bold.ttf 60 | # weight: 700 61 | # 62 | # For details regarding fonts in packages, see 63 | # https://flutter.dev/custom-fonts/#from-packages 64 | -------------------------------------------------------------------------------- /uri_picker/example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion flutter.compileSdkVersion 30 | 31 | compileOptions { 32 | sourceCompatibility JavaVersion.VERSION_1_8 33 | targetCompatibility JavaVersion.VERSION_1_8 34 | } 35 | 36 | kotlinOptions { 37 | jvmTarget = '1.8' 38 | } 39 | 40 | sourceSets { 41 | main.java.srcDirs += 'src/main/kotlin' 42 | } 43 | 44 | defaultConfig { 45 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 46 | applicationId "info.tangential.uri_picker_example" 47 | minSdkVersion 19 48 | targetSdkVersion flutter.targetSdkVersion 49 | versionCode flutterVersionCode.toInteger() 50 | versionName flutterVersionName 51 | } 52 | 53 | buildTypes { 54 | release { 55 | // TODO: Add your own signing config for the release build. 56 | // Signing with the debug keys for now, so `flutter run --release` works. 57 | signingConfig signingConfigs.debug 58 | } 59 | } 60 | } 61 | 62 | flutter { 63 | source '../..' 64 | } 65 | 66 | dependencies { 67 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 68 | } 69 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /cone_flutter/test/unit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:test/test.dart'; 2 | 3 | // import 'package:cone/src/add_transaction.dart' 4 | 5 | // import 'package:cone/src/state_management/suggestions_model.dart' 6 | // show fuzzyMatch; 7 | import 'package:cone/src/services.dart' 8 | show MeasureNewlines, combineContentsWithLinebreak; 9 | 10 | void main() { 11 | group('Number of new lines to add', () { 12 | test('Empty', () { 13 | expect(MeasureNewlines('').numberOfNewlinesToAddBetween(), 0); 14 | }); 15 | test('Nonempty', () { 16 | expect(MeasureNewlines('Hello').numberOfNewlinesToAddBetween(), 2); 17 | }); 18 | test('Nonempty with one trailing newline', () { 19 | expect(MeasureNewlines('Hello\n').numberOfNewlinesToAddBetween(), 1); 20 | }); 21 | test('Nonempty with two trailing newlines', () { 22 | expect(MeasureNewlines('Hello' + '\n' * 2).numberOfNewlinesToAddBetween(), 23 | 0); 24 | }); 25 | }); 26 | 27 | group('Needs new line', () { 28 | test('Nonempty', () { 29 | expect(MeasureNewlines('Hello').needsNewline(), true); 30 | }); 31 | test('Nonempty with one trailing newline', () { 32 | expect(MeasureNewlines('Hello\n').needsNewline(), false); 33 | }); 34 | }); 35 | 36 | group('Append file', () { 37 | void testAppendFile( 38 | String oldContents, String contentsToAdd, String expectedNewContents) { 39 | final String actualNewContents = 40 | combineContentsWithLinebreak(oldContents, contentsToAdd); 41 | expect(actualNewContents, expectedNewContents); 42 | } 43 | 44 | test('Original is empty', () { 45 | testAppendFile('', 'Taco Time!', 'Taco Time!\n'); 46 | }); 47 | test('Original is one linebreak', () { 48 | testAppendFile('\n', 'Taco Time!', '\nTaco Time!\n'); 49 | }); 50 | test('Original is nonempty', () { 51 | testAppendFile( 52 | 'hello world', 'Taco Time!', 'hello world\n\nTaco Time!\n'); 53 | }); 54 | test('Original is nonempty with one linebreak', () { 55 | testAppendFile( 56 | 'hello world\n', 'Taco Time!', 'hello world\n\nTaco Time!\n'); 57 | }); 58 | test('Original is nonempty with two linebreaks', () { 59 | testAppendFile( 60 | 'hello world\n\n', 'Taco Time!', 'hello world\n\nTaco Time!\n'); 61 | }); 62 | }); 63 | // group('Test fuzzy match', () { 64 | // test('Test fuzzy match', () { 65 | // expect(fuzzyMatch('as', ['assets']), ['assets']); 66 | // expect(fuzzyMatch('as', ['Assets']), ['Assets']); 67 | // expect(fuzzyMatch('As', ['assets']), ['assets']); 68 | // expect(fuzzyMatch('As', ['Assets']), ['Assets']); 69 | // }); 70 | // }); 71 | } 72 | -------------------------------------------------------------------------------- /cone_flutter/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 27 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /cone_flutter/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 28 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | applicationId "info.tangential.cone" 41 | minSdkVersion 19 42 | targetSdkVersion 28 43 | versionCode 28 44 | versionName "0.2.20" 45 | } 46 | 47 | buildTypes { 48 | release { 49 | // TODO: Add your own signing config for the release build. 50 | // Signing with the debug keys for now, so `flutter run --release` works. 51 | signingConfig signingConfigs.debug 52 | } 53 | } 54 | 55 | flavorDimensions "deploy" 56 | 57 | productFlavors { 58 | dev { 59 | dimension "deploy" 60 | signingConfig signingConfigs.debug 61 | applicationIdSuffix ".dev" 62 | resValue "string", "app_name", "cone.dev" 63 | } 64 | play { 65 | dimension "deploy" 66 | signingConfig signingConfigs.debug 67 | resValue "string", "app_name", "cone" 68 | } 69 | fdroid { 70 | dimension "deploy" 71 | signingConfig null 72 | resValue "string", "app_name", "cone" 73 | } 74 | } 75 | 76 | android.applicationVariants.all { variant -> 77 | if (variant.flavorName == "fdroid") { 78 | variant.outputs.all { output -> 79 | output.outputFileName = "app-fdroid-release.apk" 80 | } 81 | } 82 | } 83 | } 84 | 85 | flutter { 86 | source '../..' 87 | } 88 | 89 | dependencies { 90 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 91 | } 92 | -------------------------------------------------------------------------------- /cone_flutter/lib/src/localizations.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart' show SynchronousFuture; 2 | import 'package:flutter/material.dart'; 3 | import 'package:intl/intl.dart' show NumberFormat; 4 | 5 | import 'package:cone/src/localized_values.dart' show localizedValues; 6 | 7 | class ConeLocalizations { 8 | ConeLocalizations(this.locale); 9 | 10 | final Locale locale; 11 | 12 | static ConeLocalizations of(BuildContext context) { 13 | return Localizations.of(context, ConeLocalizations); 14 | } 15 | 16 | NumberFormat get numberFormat { 17 | return NumberFormat( 18 | '0.00########', 19 | locale.toString(), 20 | ); 21 | } 22 | 23 | String get currencyName { 24 | return NumberFormat.currency( 25 | locale: locale.toString(), 26 | ).currencyName; 27 | } 28 | 29 | static final Map> _localizedValues = 30 | localizedValues; 31 | 32 | String get addTransaction { 33 | return _localizedValues[locale.languageCode]['addTransaction']; 34 | } 35 | 36 | String get currencyOnLeft { 37 | return _localizedValues[locale.languageCode]['currencyOnLeft']; 38 | } 39 | 40 | String get defaultCurrency { 41 | return _localizedValues[locale.languageCode]['defaultCurrency']; 42 | } 43 | 44 | String get enterDefaultCurrency { 45 | return _localizedValues[locale.languageCode]['enterDefaultCurrency']; 46 | } 47 | 48 | String get ledgerFile { 49 | return _localizedValues[locale.languageCode]['ledgerFile']; 50 | } 51 | 52 | String get numberLocale { 53 | return _localizedValues[locale.languageCode]['numberLocale']; 54 | } 55 | 56 | String get reverseSort { 57 | return _localizedValues[locale.languageCode]['reverseSort']; 58 | } 59 | 60 | String get settings { 61 | return _localizedValues[locale.languageCode]['settings']; 62 | } 63 | 64 | String get spacing { 65 | return _localizedValues[locale.languageCode]['spacing']; 66 | } 67 | 68 | String get submit { 69 | return _localizedValues[locale.languageCode]['submit']; 70 | } 71 | } 72 | 73 | class ConeLocalizationsDelegate 74 | extends LocalizationsDelegate { 75 | const ConeLocalizationsDelegate(); 76 | 77 | @override 78 | bool isSupported(Locale locale) => [ 79 | 'de', 80 | 'en', 81 | 'es', 82 | 'fil', 83 | 'fr', 84 | 'hi', 85 | 'in', 86 | 'it', 87 | 'ja', 88 | 'pt', 89 | 'ru', 90 | 'th', 91 | 'zh', 92 | ].contains(locale.languageCode); 93 | 94 | @override 95 | Future load(Locale locale) { 96 | return SynchronousFuture(ConeLocalizations(locale)); 97 | } 98 | 99 | @override 100 | bool shouldReload(ConeLocalizationsDelegate old) => false; 101 | } 102 | -------------------------------------------------------------------------------- /cone_flutter/macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.11' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def parse_KV_file(file, separator='=') 13 | file_abs_path = File.expand_path(file) 14 | if !File.exists? file_abs_path 15 | return []; 16 | end 17 | pods_ary = [] 18 | skip_line_start_symbols = ["#", "/"] 19 | File.foreach(file_abs_path) { |line| 20 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 21 | plugin = line.split(pattern=separator) 22 | if plugin.length == 2 23 | podname = plugin[0].strip() 24 | path = plugin[1].strip() 25 | podpath = File.expand_path("#{path}", file_abs_path) 26 | pods_ary.push({:name => podname, :path => podpath}); 27 | else 28 | puts "Invalid plugin specification: #{line}" 29 | end 30 | } 31 | return pods_ary 32 | end 33 | 34 | def pubspec_supports_macos(file) 35 | file_abs_path = File.expand_path(file) 36 | if !File.exists? file_abs_path 37 | return false; 38 | end 39 | File.foreach(file_abs_path) { |line| 40 | return true if line =~ /^\s*macos:/ 41 | } 42 | return false 43 | end 44 | 45 | target 'Runner' do 46 | use_frameworks! 47 | use_modular_headers! 48 | 49 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 50 | # referring to absolute paths on developers' machines. 51 | ephemeral_dir = File.join('Flutter', 'ephemeral') 52 | symlink_dir = File.join(ephemeral_dir, '.symlinks') 53 | symlink_plugins_dir = File.join(symlink_dir, 'plugins') 54 | system("rm -rf #{symlink_dir}") 55 | system("mkdir -p #{symlink_plugins_dir}") 56 | 57 | # Flutter Pods 58 | generated_xcconfig = parse_KV_file(File.join(ephemeral_dir, 'Flutter-Generated.xcconfig')) 59 | if generated_xcconfig.empty? 60 | puts "Flutter-Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." 61 | end 62 | generated_xcconfig.map { |p| 63 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 64 | symlink = File.join(symlink_dir, 'flutter') 65 | File.symlink(File.dirname(p[:path]), symlink) 66 | pod 'FlutterMacOS', :path => File.join(symlink, File.basename(p[:path])) 67 | end 68 | } 69 | 70 | # Plugin Pods 71 | plugin_pods = parse_KV_file('../.flutter-plugins') 72 | plugin_pods.map { |p| 73 | symlink = File.join(symlink_plugins_dir, p[:name]) 74 | File.symlink(p[:path], symlink) 75 | if pubspec_supports_macos(File.join(symlink, 'pubspec.yaml')) 76 | pod p[:name], :path => File.join(symlink, 'macos') 77 | end 78 | } 79 | end 80 | 81 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. 82 | install! 'cocoapods', :disable_input_output_paths => true 83 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /cone_flutter/test_driver/screenshots_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter_driver/flutter_driver.dart'; 4 | import 'package:test/test.dart'; 5 | 6 | void main() { 7 | group('cone app', () { 8 | FlutterDriver driver; 9 | 10 | Future takeScreenshot(int index) async => 11 | File('./android/fastlane/screenshots/screenshot-$index.png') 12 | .writeAsBytes(await driver.screenshot()); 13 | 14 | setUpAll(() async { 15 | driver = await FlutterDriver.connect(); 16 | }); 17 | 18 | tearDownAll(() async { 19 | if (driver != null) { 20 | await driver.close(); 21 | } 22 | }); 23 | 24 | test('first screenshot', () async { 25 | await Future.delayed(const Duration(seconds: 2)); 26 | await Directory('./android/fastlane/screenshots/') 27 | .create(recursive: true); 28 | await takeScreenshot(1); 29 | }); 30 | 31 | test('navigate to settings', () async { 32 | await driver.tap(find.byValueKey('Settings')); 33 | await takeScreenshot(2); 34 | }); 35 | 36 | test('set desired settings', () async { 37 | await driver.tap(find.byValueKey('Pick ledger file')); 38 | await driver.tap(find.byValueKey('Toggle reverse sort')); 39 | await driver.tap(find.byValueKey('Formatting')); 40 | await driver.tap(find.byValueKey('Currency on left')); 41 | await driver.tap(find.byValueKey('Spacing')); 42 | await driver.tap(find.text('5.00 USD')); 43 | await takeScreenshot(3); 44 | }); 45 | 46 | test('go back', () async { 47 | await driver.tap(find.pageBack()); 48 | await takeScreenshot(4); 49 | }); 50 | 51 | test('press add button', () async { 52 | await driver.tap(find.byType('FloatingActionButton')); 53 | }); 54 | 55 | test('update field values', () async { 56 | await driver.enterText('Springfield Grocery Store'); 57 | }); 58 | 59 | test('focus on first account name', () async { 60 | await driver.tap(find.byValueKey('Account 0')); 61 | }); 62 | 63 | test('update field values', () async { 64 | await driver.enterText('g'); 65 | await driver.tap(find.text('g')); 66 | await takeScreenshot(5); 67 | }); 68 | 69 | test('click groceries', () async { 70 | await driver.tap(find.text('expenses:groceries')); 71 | }); 72 | 73 | test('fill a few more', () async { 74 | await driver.tap(find.byValueKey('Amount 0')); 75 | await driver.enterText('37.58'); 76 | await driver.tap(find.byValueKey('Account 1')); 77 | await driver.enterText('assets:cash'); 78 | await driver.tap(find.byValueKey('Amount 1')); 79 | await driver.enterText('20'); 80 | await driver.tap(find.byValueKey('Account 2')); 81 | await driver.enterText('bs ch'); 82 | }); 83 | 84 | test('finish', () async { 85 | await driver.enterText('bs ch'); 86 | await driver.tap(find.text('bs ch')); 87 | await takeScreenshot(6); 88 | }); 89 | 90 | test('press save button', () async { 91 | await driver.tap(find.text('assets:bs:checking')); 92 | await driver.tap(find.byType('FloatingActionButton')); 93 | await takeScreenshot(7); 94 | }); 95 | }); 96 | } 97 | -------------------------------------------------------------------------------- /cone_flutter/lib/src/services.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart' show PlatformException; 2 | import 'package:shared_preferences/shared_preferences.dart'; 3 | import 'package:uri_picker/uri_picker.dart'; 4 | 5 | class PersistentSettings { 6 | const PersistentSettings({ 7 | this.brightness, 8 | this.currencyOnLeft, 9 | this.debugMode, 10 | this.defaultCurrency, 11 | this.ledgerFileDisplayName, 12 | this.ledgerFileUri, 13 | this.numberLocale, 14 | this.reverseSort, 15 | this.spacing, 16 | }); 17 | 18 | final String defaultCurrency; 19 | final String ledgerFileDisplayName; 20 | final String ledgerFileUri; 21 | final String numberLocale; 22 | final bool currencyOnLeft; 23 | final bool debugMode; 24 | final bool reverseSort; 25 | final int brightness; 26 | final int spacing; 27 | 28 | static Future getSettings() async { 29 | final SharedPreferences prefs = await SharedPreferences.getInstance(); 30 | return PersistentSettings( 31 | brightness: prefs.getInt('brightness'), 32 | currencyOnLeft: prefs.getBool('currency_on_left'), 33 | debugMode: prefs.getBool('debug_mode'), 34 | defaultCurrency: prefs.getString('default_currency'), 35 | ledgerFileDisplayName: prefs.getString('ledger_file_display_name'), 36 | ledgerFileUri: prefs.getString('ledger_file_uri'), 37 | numberLocale: prefs.getString('number_locale'), 38 | reverseSort: prefs.getBool('reverse_sort'), 39 | spacing: prefs.getInt('spacing'), 40 | ); 41 | } 42 | } 43 | 44 | Future appendFile(String uri, String contentsToAppend) async { 45 | await UriPicker.isUriOpenable(uri); 46 | final String originalContents = await UriPicker.readTextFromUri(uri); 47 | final String newContents = 48 | combineContentsWithLinebreak(originalContents, contentsToAppend); 49 | try { 50 | await UriPicker.alterDocument(uri, newContents); 51 | } on PlatformException catch (_) { 52 | rethrow; 53 | } 54 | } 55 | 56 | String combineContentsWithLinebreak(String firstPart, String secondPart) { 57 | return firstPart + 58 | '\n' * MeasureNewlines(firstPart).numberOfNewlinesToAddBetween() + 59 | secondPart + 60 | ((MeasureNewlines(secondPart).needsNewline()) ? '\n' : ''); 61 | } 62 | 63 | class MeasureNewlines { 64 | MeasureNewlines(String contents) { 65 | listOfCleanLines = 66 | contents.split(re).map((String line) => line.trim()).toList(); 67 | lastLine = listOfCleanLines.length - 1; 68 | lastNonEmptyLine = 69 | listOfCleanLines.lastIndexWhere((String line) => line.isNotEmpty); 70 | distance = lastLine - lastNonEmptyLine; 71 | } 72 | 73 | static final RegExp re = RegExp(r'\r\n?|\n'); 74 | List listOfCleanLines; 75 | int lastLine; 76 | int lastNonEmptyLine; 77 | int distance; 78 | 79 | int numberOfNewlinesToAddBetween() { 80 | int result; 81 | if (lastNonEmptyLine == -1) { 82 | result = 0; 83 | } else if (distance == 0) { 84 | result = 2; 85 | } else if (distance == 1) { 86 | result = 1; 87 | } else if (distance > 1) { 88 | result = 0; 89 | } 90 | return result; 91 | } 92 | 93 | bool needsNewline() { 94 | return distance == 0; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /cone_flutter/lib/src/redux/actions.dart: -------------------------------------------------------------------------------- 1 | import 'package:cone_lib/cone_lib.dart' show Journal; 2 | 3 | import 'package:cone/src/types.dart'; 4 | import 'package:cone/src/services.dart'; 5 | 6 | enum Actions { 7 | addPosting, 8 | cancelRefresh, 9 | getPersistentSettings, 10 | markInitialized, 11 | parse, 12 | pickLedgerFileUri, 13 | putEmptyFile, 14 | refreshFileContents, 15 | resetTransaction, 16 | snackBar, 17 | snackBarProcessing, 18 | submitTransaction, 19 | today, 20 | updateHintTransaction, 21 | } 22 | 23 | class UpdateTransactionIndexAction { 24 | UpdateTransactionIndexAction({ 25 | this.index, 26 | }); 27 | 28 | final int index; 29 | } 30 | 31 | class InitializeSettingsAction { 32 | InitializeSettingsAction({ 33 | this.settings, 34 | }); 35 | 36 | final PersistentSettings settings; 37 | } 38 | 39 | class UpdateSettingsAction { 40 | UpdateSettingsAction(this.key, this.value); 41 | 42 | final String key; 43 | final dynamic value; 44 | 45 | @override 46 | String toString() { 47 | if (value is String) { 48 | return 'UpdateSettingsAction($key, \'$value\')'; 49 | } else { 50 | return 'UpdateSettingsAction($key, $value)'; 51 | } 52 | } 53 | } 54 | 55 | class UpdateUriAction { 56 | UpdateUriAction(this.uri); 57 | 58 | final String uri; 59 | } 60 | 61 | class UpdateSystemLocaleAction { 62 | UpdateSystemLocaleAction(this.systemLocale); 63 | 64 | final String systemLocale; 65 | } 66 | 67 | class UpdateJournalAction { 68 | UpdateJournalAction(this.journal); 69 | 70 | final Journal journal; 71 | 72 | // @override 73 | // String toString() { 74 | // return 'UpdateJournalAction(\'${journal.split('\n')[0]}...\')'; 75 | // } 76 | } 77 | 78 | class UpdateContentsAction { 79 | UpdateContentsAction(this.contents); 80 | 81 | final String contents; 82 | 83 | @override 84 | String toString() { 85 | return 'UpdateContentsAction(\'${contents.split('\n')[0]}...\')'; 86 | } 87 | } 88 | 89 | class UpdateTodayAction { 90 | UpdateTodayAction(this.today); 91 | 92 | final DateTime today; 93 | } 94 | 95 | class UpdateDateAction { 96 | UpdateDateAction(this.date); 97 | 98 | final String date; 99 | } 100 | 101 | class UpdateDescriptionAction { 102 | UpdateDescriptionAction(this.description); 103 | 104 | final String description; 105 | } 106 | 107 | class UpdateAccountAction { 108 | UpdateAccountAction({this.index, this.account}); 109 | 110 | final int index; 111 | final String account; 112 | } 113 | 114 | class UpdateQuantityAction { 115 | UpdateQuantityAction({this.index, this.quantity}); 116 | 117 | final int index; 118 | final String quantity; 119 | } 120 | 121 | class UpdateCommodityAction { 122 | UpdateCommodityAction({this.index, this.commodity}); 123 | 124 | final int index; 125 | final String commodity; 126 | } 127 | 128 | class RemovePostingAtAction { 129 | RemovePostingAtAction(this.index); 130 | 131 | final int index; 132 | } 133 | 134 | class SetBrightness { 135 | SetBrightness(this.brightness); 136 | 137 | final ConeBrightness brightness; 138 | 139 | @override 140 | String toString() { 141 | return 'SetBrightness($brightness)'; 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /cone_lib/test/pad_zeros_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:test/test.dart'; 2 | 3 | import 'package:cone_lib/pad_zeros.dart'; 4 | 5 | void main() { 6 | test( 7 | 'We want padZeros to throw an exception if the locale ' 8 | 'or quantity arguments are null.', () { 9 | expect(() => padZeros(commodity: 'EUR'), throwsException); 10 | }); 11 | test('Provoke exception.', () { 12 | expect(padZeros(locale: 'en', quantity: 'EUR'), 'EUR'); 13 | }); 14 | group('Try many combinations.', () { 15 | final Map, String> outputs = , String>{ 16 | ['de', '0', 'EUR']: '0,00', 17 | ['de', '0', 'JPY']: '0', 18 | ['de', '0', 'USD']: '0,00', 19 | ['de', '0', null]: '0,00', 20 | ['de', '1,234', 'EUR']: '1,234', 21 | ['de', '1,234', 'JPY']: '1,234', 22 | ['de', '1,234', 'USD']: '1,234', 23 | ['de', '1,234', null]: '1,234', 24 | ['de', '1.234', 'EUR']: '1234,00', 25 | ['de', '1.234', 'JPY']: '1234', 26 | ['de', '1.234', 'USD']: '1234,00', 27 | ['de', '1.234', null]: '1234,00', 28 | ['en', '0', 'EUR']: '0.00', 29 | ['en', '0', 'JPY']: '0', 30 | ['en', '0', 'USD']: '0.00', 31 | ['en', '0', null]: '0.00', 32 | ['en', '1,234', 'EUR']: '1234.00', 33 | ['en', '1,234', 'JPY']: '1234', 34 | ['en', '1,234', 'USD']: '1234.00', 35 | ['en', '1,234', null]: '1234.00', 36 | ['en', '1.234', 'EUR']: '1.234', 37 | ['en', '1.234', 'JPY']: '1.234', 38 | ['en', '1.234', 'USD']: '1.234', 39 | ['en', '1.234', null]: '1.234', 40 | ['ja', '0', 'EUR']: '0.00', 41 | ['ja', '0', 'JPY']: '0', 42 | ['ja', '0', 'USD']: '0.00', 43 | ['ja', '0', null]: '0.00', 44 | ['ja', '1,234', 'EUR']: '1234.00', 45 | ['ja', '1,234', 'JPY']: '1234', 46 | ['ja', '1,234', 'USD']: '1234.00', 47 | ['ja', '1,234', null]: '1234.00', 48 | ['ja', '1.234', 'EUR']: '1.234', 49 | ['ja', '1.234', 'JPY']: '1.234', 50 | ['ja', '1.234', 'USD']: '1.234', 51 | ['ja', '1.234', null]: '1.234', 52 | }; 53 | for (final String locale in [ 54 | 'de', 55 | 'en', 56 | 'ja', 57 | ]) { 58 | for (final String quantity in [ 59 | '0', 60 | '1,234', 61 | '1.234', 62 | ]) { 63 | for (final String commodity in [ 64 | 'EUR', 65 | 'JPY', 66 | 'USD', 67 | null, 68 | ]) { 69 | test('Test padZeros with $locale, $quantity, $commodity.', () { 70 | expect( 71 | padZeros( 72 | locale: locale, quantity: quantity, commodity: commodity), 73 | outputs.entries 74 | .firstWhere((MapEntry, String> entry) => 75 | entry.key[0] == locale && 76 | entry.key[1] == quantity && 77 | entry.key[2] == commodity) 78 | .value); 79 | }); 80 | } 81 | } 82 | } 83 | }); 84 | } 85 | -------------------------------------------------------------------------------- /cone_flutter/lib/src/redux/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:built_value/built_value.dart'; 2 | import 'package:cone_lib/cone_lib.dart' 3 | show Journal, JournalBuilder, Posting, Transaction, TransactionBuilder; 4 | import 'package:redux/redux.dart'; 5 | // ignore: unused_import 6 | import 'package:redux_logging/redux_logging.dart' show LoggingMiddleware; 7 | 8 | import 'package:cone/src/redux/middleware.dart'; 9 | import 'package:cone/src/redux/reducers.dart'; 10 | import 'package:cone/src/types.dart' show ConeBrightness, Spacing; 11 | 12 | part 'state.g.dart'; 13 | 14 | abstract class ConeState implements Built { 15 | factory ConeState([void Function(ConeStateBuilder) updates]) = _$ConeState; 16 | ConeState._(); 17 | 18 | @nullable 19 | ConeBrightness get brightness; 20 | @nullable 21 | DateTime get today; 22 | @nullable 23 | Journal get journal; 24 | Spacing get spacing; 25 | @nullable 26 | String get contents; 27 | @nullable 28 | String get ledgerFileDisplayName; 29 | @nullable 30 | String get ledgerFileUri; 31 | String get numberLocale; 32 | @nullable 33 | String get systemLocale; 34 | Transaction get transaction; 35 | Transaction get hintTransaction; 36 | bool get currencyOnLeft; 37 | @nullable 38 | bool get debugMode; 39 | bool get initialized; 40 | bool get isRefreshing; 41 | @nullable 42 | bool get reverseSort; 43 | bool get saveInProgress; 44 | int get postingKey; 45 | int get refreshCount; 46 | int get transactionIndex; 47 | 48 | static void _initializeBuilder(ConeStateBuilder b) => b 49 | ..initialized = false 50 | ..isRefreshing = false 51 | ..postingKey = 0 52 | ..refreshCount = 0 53 | ..saveInProgress = false 54 | ..transactionIndex = -1 55 | ..spacing = Spacing.one 56 | ..currencyOnLeft = false 57 | ..numberLocale = 'en_US'; 58 | } 59 | 60 | List> coneMiddleware = >[ 61 | firstConeMiddleware, 62 | isolateRefreshConeMiddleware, 63 | // LoggingMiddleware.printer( 64 | // // formatter: coneLogFormatter, 65 | // ), 66 | ]; 67 | 68 | List> widgetTestConeMiddleware = >[ 69 | firstConeMiddleware, 70 | widgetTestRefreshConeMiddleware, 71 | // LoggingMiddleware.printer( 72 | // // formatter: coneLogFormatter, 73 | // ), 74 | ]; 75 | 76 | String coneLogFormatter( 77 | dynamic state, 78 | dynamic action, 79 | DateTime timestamp, 80 | ) { 81 | return '{\n' 82 | ' Action: $action,\n' 83 | // ' State: $state,\n' 84 | ' Transaction: Transaction(\n' 85 | ' date: ${state.transaction.date},\n' 86 | ' description: ${state.transaction.description},\n' 87 | ' postings: [\n' 88 | // ignore: lines_longer_than_80_chars 89 | '${state.transaction.postings.map((Posting posting) => ' Posting(\n' 90 | ' account: ${posting.account}\n' 91 | ' amount: Amount(\n' 92 | ' quantity: ${posting.amount?.quantity}\n' 93 | ' commodity: ${posting.amount?.commodity}\n' 94 | ' ),\n' 95 | ' ),\n').join('')}' 96 | ' ],\n' 97 | ' );\n' 98 | ' Timestamp: $timestamp\n' 99 | '}'; 100 | } 101 | 102 | ConeState coneReducer(ConeState state, dynamic action) { 103 | return firstConeReducer(state, action); 104 | } 105 | -------------------------------------------------------------------------------- /uri_picker/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /uri_picker/example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: uri_picker_example 2 | description: Demonstrates how to use the uri_picker plugin. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | environment: 9 | sdk: ^2.9.0 10 | 11 | # Dependencies specify other packages that your package needs in order to work. 12 | # To automatically upgrade your package dependencies to the latest versions 13 | # consider running `flutter pub upgrade --major-versions`. Alternatively, 14 | # dependencies can be manually updated by changing the version numbers below to 15 | # the latest version available on pub.dev. To see which dependencies have newer 16 | # versions available, run `flutter pub outdated`. 17 | dependencies: 18 | flutter: 19 | sdk: flutter 20 | 21 | uri_picker: 22 | # When depending on this package from a real application you should use: 23 | # uri_picker: ^x.y.z 24 | # See https://dart.dev/tools/pub/dependencies#version-constraints 25 | # The example app is bundled with the plugin so we use a path dependency on 26 | # the parent directory to use the current plugin's version. 27 | path: ../ 28 | 29 | # The following adds the Cupertino Icons font to your application. 30 | # Use with the CupertinoIcons class for iOS style icons. 31 | cupertino_icons: 32 | 33 | dev_dependencies: 34 | flutter_test: 35 | sdk: flutter 36 | 37 | # The "flutter_lints" package below contains a set of recommended lints to 38 | # encourage good coding practices. The lint set provided by the package is 39 | # activated in the `analysis_options.yaml` file located at the root of your 40 | # package. See that file for information about deactivating specific lint 41 | # rules and activating additional ones. 42 | flutter_lints: ^1.0.0 43 | 44 | # For information on the generic Dart part of this file, see the 45 | # following page: https://dart.dev/tools/pub/pubspec 46 | 47 | # The following section is specific to Flutter. 48 | flutter: 49 | 50 | # The following line ensures that the Material Icons font is 51 | # included with your application, so that you can use the icons in 52 | # the material Icons class. 53 | uses-material-design: true 54 | 55 | # To add assets to your application, add an assets section, like this: 56 | # assets: 57 | # - images/a_dot_burr.jpeg 58 | # - images/a_dot_ham.jpeg 59 | 60 | # An image asset can refer to one or more resolution-specific "variants", see 61 | # https://flutter.dev/assets-and-images/#resolution-aware. 62 | 63 | # For details regarding adding assets from package dependencies, see 64 | # https://flutter.dev/assets-and-images/#from-packages 65 | 66 | # To add custom fonts to your application, add a fonts section here, 67 | # in this "flutter" section. Each entry in this list should have a 68 | # "family" key with the font family name, and a "fonts" key with a 69 | # list giving the asset and other descriptors for the font. For 70 | # example: 71 | # fonts: 72 | # - family: Schyler 73 | # fonts: 74 | # - asset: fonts/Schyler-Regular.ttf 75 | # - asset: fonts/Schyler-Italic.ttf 76 | # style: italic 77 | # - family: Trajan Pro 78 | # fonts: 79 | # - asset: fonts/TrajanPro.ttf 80 | # - asset: fonts/TrajanPro_Bold.ttf 81 | # weight: 700 82 | # 83 | # For details regarding fonts from package dependencies, 84 | # see https://flutter.dev/custom-fonts/#from-packages 85 | -------------------------------------------------------------------------------- /uri_picker/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /cone_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /cone_flutter/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: cone 2 | description: A mobile ledger-like. 3 | homepage: https://github.com/bradyt/cone 4 | 5 | # The following line prevents the package from being accidentally published to 6 | # pub.dev using `pub publish`. This is preferred for private packages. 7 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 8 | 9 | # The following defines the version and build number for your application. 10 | # A version number is three numbers separated by dots, like 1.2.43 11 | # followed by an optional build number separated by a +. 12 | # Both the version and the builder number may be overridden in flutter 13 | # build by specifying --build-name and --build-number, respectively. 14 | # In Android, build-name is used as versionName while build-number used as versionCode. 15 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 16 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 17 | # Read more about iOS versioning at 18 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 19 | version: 0.2.20+28 20 | 21 | environment: 22 | sdk: ^2.9.0 23 | 24 | dependencies: 25 | built_collection: 26 | built_value: 27 | cone_lib: 28 | path: ../cone_lib 29 | cupertino_icons: 30 | datetime_picker_formfield: 31 | edit_distance: 32 | flutter: 33 | sdk: flutter 34 | flutter_localizations: 35 | sdk: flutter 36 | flutter_redux: 37 | flutter_typeahead: 38 | provider: 39 | redux: 40 | redux_logging: 41 | reselect: 42 | shared_preferences: 43 | uri_picker: 44 | path: ../uri_picker 45 | 46 | dev_dependencies: 47 | build_runner: 48 | built_value_generator: 49 | flutter_driver: 50 | sdk: flutter 51 | flutter_redux_dev_tools: 52 | flutter_test: 53 | sdk: flutter 54 | redux_dev_tools: 55 | test: 56 | 57 | 58 | # For information on the generic Dart part of this file, see the 59 | # following page: https://dart.dev/tools/pub/pubspec 60 | 61 | # The following section is specific to Flutter. 62 | flutter: 63 | 64 | # The following line ensures that the Material Icons font is 65 | # included with your application, so that you can use the icons in 66 | # the material Icons class. 67 | uses-material-design: true 68 | 69 | # To add assets to your application, add an assets section, like this: 70 | # assets: 71 | # - images/a_dot_burr.jpeg 72 | # - images/a_dot_ham.jpeg 73 | 74 | # An image asset can refer to one or more resolution-specific "variants", see 75 | # https://flutter.dev/assets-and-images/#resolution-aware. 76 | 77 | # For details regarding adding assets from package dependencies, see 78 | # https://flutter.dev/assets-and-images/#from-packages 79 | 80 | # To add custom fonts to your application, add a fonts section here, 81 | # in this "flutter" section. Each entry in this list should have a 82 | # "family" key with the font family name, and a "fonts" key with a 83 | # list giving the asset and other descriptors for the font. For 84 | # example: 85 | fonts: 86 | - family: IBMPlexMono 87 | fonts: 88 | - asset: fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf 89 | # fonts: 90 | # - family: Schyler 91 | # fonts: 92 | # - asset: fonts/Schyler-Regular.ttf 93 | # - asset: fonts/Schyler-Italic.ttf 94 | # style: italic 95 | # - family: Trajan Pro 96 | # fonts: 97 | # - asset: fonts/TrajanPro.ttf 98 | # - asset: fonts/TrajanPro_Bold.ttf 99 | # weight: 700 100 | # 101 | # For details regarding fonts from package dependencies, 102 | # see https://flutter.dev/custom-fonts/#from-packages 103 | -------------------------------------------------------------------------------- /cone_lib/example/bin/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:args/args.dart'; 4 | import 'package:args/command_runner.dart'; 5 | 6 | import 'package:cone_lib/cone_lib.dart'; 7 | 8 | import 'package:cone_cli/src/version.dart'; 9 | 10 | void main(List arguments) { 11 | final CommandRunner runner = ConeCommandRunner(); 12 | 13 | runner.run(arguments).catchError((Error error) { 14 | if (error is! UsageException) { 15 | throw error; 16 | } 17 | print(error); 18 | exit(64); // Exit code 64 indicates a usage error. 19 | }); 20 | } 21 | 22 | class ConeCommandRunner extends CommandRunner { 23 | ConeCommandRunner() : super('cone', 'Prototype cli for flutter functions.') { 24 | argParser 25 | ..addOption( 26 | 'file', 27 | abbr: 'f', 28 | help: 'Specify the file for input.', 29 | valueHelp: 'FILE', 30 | ) 31 | ..addFlag( 32 | 'version', 33 | abbr: 'v', 34 | help: 'Show version.', 35 | negatable: false, 36 | ); 37 | addCommand(AccountsCommand()); 38 | addCommand(PayeesCommand()); 39 | // addCommand(TestingCommand()); 40 | } 41 | 42 | @override 43 | String get invocation => '$executableName [arguments] '; 44 | 45 | @override 46 | Future run(Iterable args) async { 47 | final ArgResults results = super.parse(args); 48 | if (results['version'] != null) { 49 | print('cone $packageVersion'); 50 | } else { 51 | await super.run(args); 52 | } 53 | } 54 | } 55 | 56 | String getFileContentsForCommands(ArgResults res) { 57 | // ignore: avoid_as 58 | final String filename = 59 | // ignore: avoid_as 60 | res['file'] as String ?? Platform.environment['CONE_LEDGER_FILE']; 61 | if (filename == null) { 62 | print('Error: No journal file was specified' 63 | ' (please use -f or CONE_LEDGER_FILE)'); 64 | exit(64); 65 | } 66 | return File(filename).readAsStringSync(); 67 | } 68 | 69 | class AccountsCommand extends Command { 70 | @override 71 | final String name = 'accounts'; 72 | 73 | @override 74 | final String description = 'List accounts.'; 75 | 76 | @override 77 | final List aliases = ['a']; 78 | 79 | @override 80 | void run() { 81 | final String fileContents = getFileContentsForCommands(globalResults); 82 | // ignore: prefer_foreach 83 | for (final String account in getAccounts(fileContents)) { 84 | print(account); 85 | } 86 | } 87 | } 88 | 89 | class PayeesCommand extends Command { 90 | @override 91 | final String name = 'payees'; 92 | 93 | @override 94 | final String description = 'List payees.'; 95 | 96 | @override 97 | final List aliases = ['p']; 98 | 99 | @override 100 | void run() { 101 | final String fileContents = getFileContentsForCommands(globalResults); 102 | // ignore: prefer_foreach 103 | for (final String payee in getPayees(fileContents)) { 104 | print(payee); 105 | } 106 | } 107 | } 108 | 109 | // class TestingCommand extends Command { 110 | // @override 111 | // final String name = 'testing'; 112 | 113 | // @override 114 | // final String description = 'Debugging'; 115 | 116 | // @override 117 | // final List aliases = ['t']; 118 | 119 | // @override 120 | // void run() { 121 | // String fileContents = getFileContentsForCommands(globalResults); 122 | // for (var it in parser.parse(fileContents).value) { 123 | // print('-'); 124 | // print('Line ${it.line}'); 125 | // print(it.input); 126 | // } 127 | // for (String chunk in getChunks(fileContents)) { 128 | // print('-' * 80); 129 | // print(chunk); 130 | // } 131 | // } 132 | // } 133 | -------------------------------------------------------------------------------- /cone_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /cone_flutter/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart' hide Actions; 2 | import 'package:flutter_localizations/flutter_localizations.dart'; 3 | import 'package:flutter_redux/flutter_redux.dart'; 4 | import 'package:intl/intl.dart'; 5 | import 'package:provider/provider.dart'; 6 | import 'package:redux/redux.dart'; 7 | 8 | import 'package:cone/src/add_transaction.dart'; 9 | import 'package:cone/src/home.dart'; 10 | import 'package:cone/src/localizations.dart'; 11 | import 'package:cone/src/redux/actions.dart'; 12 | import 'package:cone/src/redux/state.dart'; 13 | import 'package:cone/src/settings.dart'; 14 | 15 | class ConeWidgetTest extends InheritedWidget { 16 | const ConeWidgetTest({Key key, this.widgetTest, Widget child}) 17 | : super(key: key, child: child); 18 | 19 | final bool widgetTest; 20 | 21 | static bool of(BuildContext context) { 22 | return context 23 | .dependOnInheritedWidgetOfExactType() 24 | .widgetTest; 25 | } 26 | 27 | @override 28 | bool updateShouldNotify(ConeWidgetTest oldWidget) => 29 | widgetTest != oldWidget.widgetTest; 30 | } 31 | 32 | void main({bool widgetTest = false, bool snapshots = false}) { 33 | final Store store = Store( 34 | coneReducer, 35 | initialState: ConeState(), 36 | middleware: coneMiddleware, 37 | ); 38 | 39 | WidgetsFlutterBinding.ensureInitialized(); 40 | store 41 | ..dispatch(UpdateSystemLocaleAction(Intl.systemLocale)) 42 | ..dispatch(Actions.getPersistentSettings); 43 | 44 | runApp( 45 | ConeWidgetTest( 46 | widgetTest: widgetTest, 47 | child: Provider>.value( 48 | value: store, 49 | child: StoreProvider( 50 | store: store, 51 | child: ConeInitializing(), 52 | ), 53 | ), 54 | ), 55 | ); 56 | } 57 | 58 | class ConeInitializing extends StatelessWidget { 59 | @override 60 | Widget build(BuildContext context) { 61 | return StoreConnector( 62 | converter: (Store store) => store.state.initialized, 63 | builder: (BuildContext context, bool stateInitialized) { 64 | return stateInitialized ? ConeApp() : Container(); 65 | }, 66 | ); 67 | } 68 | } 69 | 70 | class ConeApp extends StatelessWidget { 71 | @override 72 | Widget build(BuildContext context) { 73 | return StoreConnector( 74 | converter: (Store store) => store.state.brightness, 75 | builder: (BuildContext context, dynamic brightness) { 76 | final ThemeData theme = ThemeData( 77 | floatingActionButtonTheme: const FloatingActionButtonThemeData( 78 | foregroundColor: Colors.black, 79 | ), 80 | ); 81 | return MaterialApp( 82 | debugShowCheckedModeBanner: false, 83 | title: 'cone', 84 | localizationsDelegates: const >[ 85 | ConeLocalizationsDelegate(), 86 | GlobalMaterialLocalizations.delegate, 87 | GlobalWidgetsLocalizations.delegate, 88 | ], 89 | supportedLocales: const [ 90 | Locale('en', 'US'), 91 | Locale('de'), 92 | Locale('es', 'MX'), 93 | Locale('fil'), 94 | Locale('fr'), 95 | Locale('hi'), 96 | Locale('in'), 97 | Locale('it'), 98 | Locale('ja'), 99 | Locale('pt', 'BR'), 100 | Locale('ru', 'RU'), 101 | Locale('th'), 102 | Locale('zh'), 103 | ], 104 | theme: theme.copyWith( 105 | colorScheme: theme.colorScheme.copyWith( 106 | primary: Colors.green, 107 | secondary: Colors.amberAccent, 108 | ), 109 | ), 110 | darkTheme: ThemeData.dark(), 111 | routes: { 112 | '/': (BuildContext context) => Home(), 113 | '/add-transaction': (BuildContext context) => AddTransaction(), 114 | '/settings': (BuildContext context) => Settings(), 115 | }, 116 | ); 117 | }, 118 | ); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /uri_picker/example/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | uri_picker_example 33 | 34 | 35 | 36 | 39 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /cone_flutter/fonts/IBM_Plex_Mono/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /cone_flutter/test/redux_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:redux/redux.dart'; 4 | import 'package:shared_preferences/shared_preferences.dart'; 5 | 6 | import 'package:cone/src/redux/actions.dart'; 7 | import 'package:cone/src/redux/reducers.dart'; 8 | import 'package:cone/src/redux/state.dart'; 9 | import 'package:cone/src/services.dart'; 10 | import 'package:cone/src/types.dart'; 11 | 12 | void main() { 13 | group('Test state.dart.', () { 14 | test('Test ConeState.', () { 15 | expect(ConeState() is ConeState, true); 16 | }); 17 | test('Test coneMiddleWare.', () { 18 | expect(coneMiddleware is List, true); 19 | }); 20 | test('Test coneReducer.', () { 21 | expect( 22 | coneReducer(ConeState(), Actions.markInitialized) is ConeState, true); 23 | }); 24 | }); 25 | group('Test action.dart.', () { 26 | test('Test InitializeSettingsAction.', () { 27 | expect(InitializeSettingsAction() is InitializeSettingsAction, true); 28 | }); 29 | test('Test UpdateSettingsAction.', () { 30 | expect( 31 | UpdateSettingsAction('key', 'value').toString(), 32 | 'UpdateSettingsAction(key, \'value\')', 33 | ); 34 | expect( 35 | UpdateSettingsAction('key', true).toString(), 36 | 'UpdateSettingsAction(key, true)', 37 | ); 38 | expect(UpdateUriAction('uri').uri, 'uri'); 39 | expect(UpdateSystemLocaleAction('zh').systemLocale, 'zh'); 40 | expect(UpdateContentsAction('account a').toString(), 41 | 'UpdateContentsAction(\'account a...\')'); 42 | expect(UpdateDateAction('2000-01-01').date, '2000-01-01'); 43 | expect(UpdateDescriptionAction('tacos').description, 'tacos'); 44 | expect( 45 | UpdateAccountAction(index: 0, account: 'assets').account, 46 | 'assets', 47 | ); 48 | expect(UpdateQuantityAction(quantity: '0').quantity, '0'); 49 | expect(UpdateCommodityAction(commodity: 'EUR').commodity, 'EUR'); 50 | expect(RemovePostingAtAction(0).index, 0); 51 | expect( 52 | SetBrightness(ConeBrightness.auto).toString(), 53 | 'SetBrightness(ConeBrightness.auto)', 54 | ); 55 | }); 56 | }); 57 | group('Test reducers.dart.', () { 58 | const PersistentSettings settings = PersistentSettings(); 59 | final ConeState coneFinalState = [ 60 | UpdateSystemLocaleAction('en'), 61 | InitializeSettingsAction(settings: settings), 62 | Actions.addPosting, 63 | RemovePostingAtAction(0), 64 | Actions.resetTransaction, 65 | Actions.addPosting, 66 | Actions.addPosting, 67 | UpdateDateAction('2000-01-01'), 68 | UpdateDescriptionAction('example'), 69 | UpdateAccountAction(index: 0, account: 'assets'), 70 | UpdateQuantityAction(index: 0, quantity: '0'), 71 | UpdateCommodityAction(index: 0, commodity: 'EUR'), 72 | UpdateSettingsAction('debug_mode', true), 73 | UpdateSettingsAction('default_currency', 'EUR'), 74 | UpdateSettingsAction('ledger_file_uri', '/tmp/blah.dat'), 75 | UpdateSettingsAction('number_locale', 'en'), 76 | UpdateSettingsAction('currency_on_left', true), 77 | UpdateSettingsAction('spacing', Spacing.zero), 78 | UpdateSettingsAction('reverse_sort', true), 79 | Actions.refreshFileContents, 80 | UpdateContentsAction(''), 81 | SetBrightness(ConeBrightness.auto), 82 | ].fold(ConeState(), firstConeReducer); 83 | 84 | test('Test reduction is a state.', () { 85 | expect(coneFinalState is ConeState, true); 86 | }); 87 | }); 88 | group('Test middleware.dart.', () { 89 | final Store store = Store( 90 | coneReducer, 91 | initialState: ConeState(), 92 | middleware: coneMiddleware, 93 | ); 94 | 95 | SharedPreferences.setMockInitialValues({ 96 | 'brightness': 0, 97 | }); 98 | 99 | TestWidgetsFlutterBinding.ensureInitialized(); 100 | const MethodChannel('tangential.info/uri_picker') 101 | .setMockMethodCallHandler((MethodCall methodCall) async { 102 | if (methodCall.method == 'pickUri') { 103 | return 'some-filename.dat'; 104 | } else if (methodCall.method == 'readTextfromuri') { 105 | if (methodCall.arguments['uri'] == 'some-filename.dat') { 106 | return '2000-01-01 example\n a 0 EUR\n b\n'; 107 | } 108 | } 109 | return ''; 110 | }); 111 | 112 | test('Test one.', () { 113 | store 114 | ..dispatch(UpdateSystemLocaleAction('en')) 115 | ..dispatch(Actions.getPersistentSettings) 116 | ..dispatch(UpdateSettingsAction('key', true)) 117 | ..dispatch(UpdateSettingsAction('key', 0)) 118 | ..dispatch(UpdateSettingsAction('key', Spacing.zero)) 119 | ..dispatch(UpdateSettingsAction('key', 'value')) 120 | ..dispatch(SetBrightness(ConeBrightness.auto)) 121 | ..dispatch(Actions.pickLedgerFileUri) 122 | ..dispatch(Actions.refreshFileContents) 123 | ..dispatch(Actions.submitTransaction); 124 | }); 125 | }); 126 | } 127 | --------------------------------------------------------------------------------