Compare commits
3 Commits
Author | SHA1 | Date |
---|---|---|
Benjamin Arhen | 26277765db | 2 years ago |
Benjamin Arhen | 6afe7d6b63 | 3 years ago |
Benjamin Arhen | d430cec0a9 | 3 years ago |
321 changed files with 3988 additions and 16524 deletions
Binary file not shown.
@ -0,0 +1,19 @@ |
|||||
|
<component name="libraryTable"> |
||||
|
<library name="Dart SDK"> |
||||
|
<CLASSES> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/async" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/collection" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/convert" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/core" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/developer" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/html" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/io" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/isolate" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/math" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/mirrors" /> |
||||
|
<root url="file://D:\flutter/bin/cache/dart-sdk/lib/typed_data" /> |
||||
|
</CLASSES> |
||||
|
<JAVADOC /> |
||||
|
<SOURCES /> |
||||
|
</library> |
||||
|
</component> |
@ -0,0 +1,15 @@ |
|||||
|
<component name="libraryTable"> |
||||
|
<library name="KotlinJavaRuntime"> |
||||
|
<CLASSES> |
||||
|
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-stdlib.jar!/" /> |
||||
|
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-reflect.jar!/" /> |
||||
|
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-test.jar!/" /> |
||||
|
</CLASSES> |
||||
|
<JAVADOC /> |
||||
|
<SOURCES> |
||||
|
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-stdlib-sources.jar!/" /> |
||||
|
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-reflect-sources.jar!/" /> |
||||
|
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-test-sources.jar!/" /> |
||||
|
</SOURCES> |
||||
|
</library> |
||||
|
</component> |
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="ProjectModuleManager"> |
||||
|
<modules> |
||||
|
<module fileurl="file://$PROJECT_DIR$/teso.iml" filepath="$PROJECT_DIR$/teso.iml" /> |
||||
|
<module fileurl="file://$PROJECT_DIR$/android/teso_android.iml" filepath="$PROJECT_DIR$/android/teso_android.iml" /> |
||||
|
</modules> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,6 @@ |
|||||
|
<component name="ProjectRunConfigurationManager"> |
||||
|
<configuration default="false" name="main.dart" type="FlutterRunConfigurationType" factoryName="Flutter"> |
||||
|
<option name="filePath" value="$PROJECT_DIR$/lib/main.dart" /> |
||||
|
<method /> |
||||
|
</configuration> |
||||
|
</component> |
@ -0,0 +1,36 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="FileEditorManager"> |
||||
|
<leaf> |
||||
|
<file leaf-file-name="main.dart" pinned="false" current-in-tab="true"> |
||||
|
<entry file="file://$PROJECT_DIR$/lib/main.dart"> |
||||
|
<provider selected="true" editor-type-id="text-editor"> |
||||
|
<state relative-caret-position="0"> |
||||
|
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> |
||||
|
</state> |
||||
|
</provider> |
||||
|
</entry> |
||||
|
</file> |
||||
|
</leaf> |
||||
|
</component> |
||||
|
<component name="ToolWindowManager"> |
||||
|
<editor active="true" /> |
||||
|
<layout> |
||||
|
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> |
||||
|
</layout> |
||||
|
</component> |
||||
|
<component name="ProjectView"> |
||||
|
<navigator currentView="ProjectPane" proportions="" version="1"> |
||||
|
</navigator> |
||||
|
<panes> |
||||
|
<pane id="ProjectPane"> |
||||
|
<option name="show-excluded-files" value="false" /> |
||||
|
</pane> |
||||
|
</panes> |
||||
|
</component> |
||||
|
<component name="PropertiesComponent"> |
||||
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" /> |
||||
|
<property name="dart.analysis.tool.window.force.activate" value="true" /> |
||||
|
<property name="show.migrate.to.gradle.popup" value="false" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,10 @@ |
|||||
|
# This file tracks properties of this Flutter project. |
||||
|
# Used by Flutter tool to assess capabilities and perform upgrades etc. |
||||
|
# |
||||
|
# This file should be version controlled and should not be manually edited. |
||||
|
|
||||
|
version: |
||||
|
revision: db747aa1331bd95bc9b3874c842261ca2d302cd5 |
||||
|
channel: stable |
||||
|
|
||||
|
project_type: app |
@ -0,0 +1,29 @@ |
|||||
|
# This file configures the analyzer, which statically analyzes Dart code to |
||||
|
# check for errors, warnings, and lints. |
||||
|
# |
||||
|
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled |
||||
|
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be |
||||
|
# invoked from the command line by running `flutter analyze`. |
||||
|
|
||||
|
# The following line activates a set of recommended lints for Flutter apps, |
||||
|
# packages, and plugins designed to encourage good coding practices. |
||||
|
#include: package:flutter_lints/flutter.yaml |
||||
|
|
||||
|
linter: |
||||
|
# The lint rules applied to this project can be customized in the |
||||
|
# section below to disable rules from the `package:flutter_lints/flutter.yaml` |
||||
|
# included above or to enable additional rules. A list of all available lints |
||||
|
# and their documentation is published at |
||||
|
# https://dart-lang.github.io/linter/lints/index.html. |
||||
|
# |
||||
|
# Instead of disabling a lint rule for the entire project in the |
||||
|
# section below, it can also be suppressed for a single line of code |
||||
|
# or a specific dart file by using the `// ignore: name_of_lint` and |
||||
|
# `// ignore_for_file: name_of_lint` syntax on the line or in the file |
||||
|
# producing the lint. |
||||
|
rules: |
||||
|
# avoid_print: false # Uncomment to disable the `avoid_print` rule |
||||
|
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule |
||||
|
|
||||
|
# Additional information about this file can be found at |
||||
|
# https://dart.dev/guides/language/analysis-options |
@ -1,66 +1,55 @@ |
|||||
{ |
{ |
||||
"project_info": { |
"project_info": { |
||||
"project_number": "280510379185", |
"project_number": "675860686596", |
||||
"firebase_url": "https://teso-ghana-default-rtdb.firebaseio.com", |
"project_id": "teso-test-6fc81", |
||||
"project_id": "teso-ghana", |
"storage_bucket": "teso-test-6fc81.appspot.com" |
||||
"storage_bucket": "teso-ghana.appspot.com" |
}, |
||||
}, |
"client": [ |
||||
"client": [{ |
{ |
||||
"client_info": { |
"client_info": { |
||||
"mobilesdk_app_id": "1:280510379185:android:b778de8dca1cf49219de90", |
"mobilesdk_app_id": "1:675860686596:android:8522b46df172af41cd9251", |
||||
"android_client_info": { |
"android_client_info": { |
||||
"package_name": "com.sparentechBacware.teso" |
"package_name": "com.sparentechBacware.teso" |
||||
} |
} |
||||
|
}, |
||||
|
"oauth_client": [ |
||||
|
{ |
||||
|
"client_id": "675860686596-in4piqob6d8nj42nguh06abpdrrhai0f.apps.googleusercontent.com", |
||||
|
"client_type": 1, |
||||
|
"android_info": { |
||||
|
"package_name": "com.sparentechBacware.teso", |
||||
|
"certificate_hash": "b50b0b74dfcde0a02336f00eae49428a517551b2" |
||||
|
} |
||||
}, |
}, |
||||
"oauth_client": [{ |
{ |
||||
"client_id": "280510379185-0shp8sia3i5m589bov645t3kuddb1032.apps.googleusercontent.com", |
"client_id": "675860686596-n32ta36ndmugfm1jj61mu2p1v197a1nn.apps.googleusercontent.com", |
||||
"client_type": 1, |
"client_type": 3 |
||||
"android_info": { |
} |
||||
"package_name": "com.sparentechBacware.teso", |
], |
||||
"certificate_hash": "40b68890dd51d72454ccdc7289623c4d56273248" |
"api_key": [ |
||||
} |
{ |
||||
}, |
"current_key": "AIzaSyDt05opA09hr9Y1pysllCsEE_6dT4CrhRM" |
||||
{ |
} |
||||
"client_id": "280510379185-87k85sksrd30mu9fjgfmacb3bkcjnmdq.apps.googleusercontent.com", |
], |
||||
"client_type": 1, |
"services": { |
||||
"android_info": { |
"appinvite_service": { |
||||
"package_name": "com.sparentechBacware.teso", |
"other_platform_oauth_client": [ |
||||
"certificate_hash": "4f655cf94cd94864838475611b711c2528e33601" |
|
||||
} |
|
||||
}, |
|
||||
{ |
{ |
||||
"client_id": "280510379185-ac7qjglm9cct9u0diqrns6om8t2mb9ug.apps.googleusercontent.com", |
"client_id": "675860686596-n32ta36ndmugfm1jj61mu2p1v197a1nn.apps.googleusercontent.com", |
||||
"client_type": 1, |
"client_type": 3 |
||||
"android_info": { |
|
||||
"package_name": "com.sparentechBacware.teso", |
|
||||
"certificate_hash": "063304c2da41f90c824fad163b5ad481edf6db11" |
|
||||
} |
|
||||
}, |
}, |
||||
{ |
{ |
||||
"client_id": "280510379185-58chj1fi4pts4p7p7sieq16miapvtepi.apps.googleusercontent.com", |
"client_id": "675860686596-8dsd5qf42n1gej04f2m2rmt27neft8vg.apps.googleusercontent.com", |
||||
"client_type": 3 |
"client_type": 2, |
||||
} |
"ios_info": { |
||||
], |
"bundle_id": "com.tesoapp", |
||||
"api_key": [{ |
"app_store_id": "1573175173" |
||||
"current_key": "AIzaSyAHBguF6oqPEq7em1vLrh_NP2LoPuabe6o" |
} |
||||
}], |
|
||||
"services": { |
|
||||
"appinvite_service": { |
|
||||
"other_platform_oauth_client": [{ |
|
||||
"client_id": "280510379185-58chj1fi4pts4p7p7sieq16miapvtepi.apps.googleusercontent.com", |
|
||||
"client_type": 3 |
|
||||
}, |
|
||||
{ |
|
||||
"client_id": "280510379185-67vianhh973klriv75ip2tb9cf8ibitl.apps.googleusercontent.com", |
|
||||
"client_type": 2, |
|
||||
"ios_info": { |
|
||||
"bundle_id": "com.tesoapp", |
|
||||
"app_store_id": "1573175173" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
} |
||||
|
] |
||||
} |
} |
||||
}], |
} |
||||
"configuration_version": "1" |
} |
||||
|
], |
||||
|
"configuration_version": "1" |
||||
} |
} |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
File diff suppressed because it is too large
Binary file not shown.
@ -1,127 +1,109 @@ |
|||||
<?xml version="1.0" encoding="UTF-8"?> |
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
<plist version="1.0"> |
<plist version="1.0"> |
||||
<dict> |
<dict> |
||||
<key>BGTaskSchedulerPermittedIdentifiers</key> |
<key>BGTaskSchedulerPermittedIdentifiers</key> |
||||
<array> |
<array> |
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
|
||||
</array> |
|
||||
<key>CFBundleDevelopmentRegion</key> |
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string> |
|
||||
<key>CFBundleDisplayName</key> |
|
||||
<string>Teso</string> |
|
||||
<key>CFBundleExecutable</key> |
|
||||
<string>$(EXECUTABLE_NAME)</string> |
|
||||
<key>CFBundleIdentifier</key> |
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
||||
<key>CFBundleInfoDictionaryVersion</key> |
</array> |
||||
<string>6.0</string> |
<key>CADisableMinimumFrameDurationOnPhone</key> |
||||
<key>CFBundleName</key> |
<true/> |
||||
<string>teso</string> |
<key>CFBundleDevelopmentRegion</key> |
||||
<key>CFBundlePackageType</key> |
<string>$(DEVELOPMENT_LANGUAGE)</string> |
||||
<string>APPL</string> |
<key>CFBundleDisplayName</key> |
||||
<key>CFBundleShortVersionString</key> |
<string>Teso</string> |
||||
<string>$(MARKETING_VERSION)</string> |
<key>CFBundleExecutable</key> |
||||
<key>CFBundleSignature</key> |
<string>$(EXECUTABLE_NAME)</string> |
||||
<string>????</string> |
<key>CFBundleIdentifier</key> |
||||
<key>CFBundleURLTypes</key> |
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
||||
<array> |
<key>CFBundleInfoDictionaryVersion</key> |
||||
<dict> |
<string>6.0</string> |
||||
<key>CFBundleTypeRole</key> |
<key>CFBundleName</key> |
||||
<string>Editor</string> |
<string>teso</string> |
||||
<key>CFBundleURLSchemes</key> |
<key>CFBundlePackageType</key> |
||||
<array> |
<string>APPL</string> |
||||
<string>com.googleusercontent.apps.280510379185-67vianhh973klriv75ip2tb9cf8ibitl</string> |
<key>CFBundleShortVersionString</key> |
||||
<string>fb1759156777594606</string> |
<string>$(MARKETING_VERSION)</string> |
||||
</array> |
<key>CFBundleSignature</key> |
||||
</dict> |
<string>????</string> |
||||
</array> |
<key>CFBundleURLTypes</key> |
||||
<key>CFBundleVersion</key> |
<array> |
||||
<string>$(CURRENT_PROJECT_VERSION)</string> |
|
||||
<key>LSApplicationQueriesSchemes</key> |
|
||||
<array> |
|
||||
<string>fbapi</string> |
|
||||
<string>fbapi20130214</string> |
|
||||
<string>fbapi20130410</string> |
|
||||
<string>fbapi20130702</string> |
|
||||
<string>fbapi20131010</string> |
|
||||
<string>fbapi20131219</string> |
|
||||
<string>fbapi20140410</string> |
|
||||
<string>fbapi20140116</string> |
|
||||
<string>fbapi20150313</string> |
|
||||
<string>fbapi20150629</string> |
|
||||
<string>fbapi20160328</string> |
|
||||
<string>fbauth</string> |
|
||||
<string>fb-messenger-share-api</string> |
|
||||
<string>fbauth2</string> |
|
||||
<string>fbshareextension</string> |
|
||||
</array> |
|
||||
<key>LSRequiresIPhoneOS</key> |
|
||||
<true /> |
|
||||
<key>NSAppTransportSecurity</key> |
|
||||
<dict> |
<dict> |
||||
<key>NSAllowsArbitraryLoads</key> |
<key>CFBundleTypeRole</key> |
||||
<true /> |
<string>Editor</string> |
||||
<key>NSAllowsArbitraryLoadsInWebContent</key> |
<key>CFBundleURLSchemes</key> |
||||
<true /> |
<array> |
||||
|
<string>com.googleusercontent.apps.280510379185-67vianhh973klriv75ip2tb9cf8ibitl</string> |
||||
|
<string>com.googleusercontent.apps.675860686596-8dsd5qf42n1gej04f2m2rmt27neft8vg</string> |
||||
|
<string>fb1759156777594606</string> |
||||
|
</array> |
||||
</dict> |
</dict> |
||||
<key>NSCameraUsageDescription</key> |
</array> |
||||
<string>This app needs camera access to scan QR codes and capture photos</string> |
<key>CFBundleVersion</key> |
||||
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> |
<string>$(CURRENT_PROJECT_VERSION)</string> |
||||
<string>Teso needs access to location.</string> |
<key>FUAllFilesUploadedMessage</key> |
||||
<key>NSLocationAlwaysUsageDescription</key> |
<string>Posts successfully published on Teso</string> |
||||
<string>Teso needs access to location.</string> |
<key>FUMaximumConnectionsPerHost</key> |
||||
<key>NSLocationWhenInUseUsageDescription</key> |
<integer>5</integer> |
||||
<string>Teso needs access to location.</string> |
<key>FUMaximumUploadOperation</key> |
||||
<key>NSMicrophoneUsageDescription</key> |
<integer>5</integer> |
||||
<string>Allow access to microphone</string> |
<key>FUTimeoutInSeconds</key> |
||||
<key>NSPhotoLibraryAddUsageDescription</key> |
<integer>3600</integer> |
||||
<string>Teso needs permission to write videos and photos</string> |
<key>LSApplicationQueriesSchemes</key> |
||||
<key>NSPhotoLibraryUsageDescription</key> |
<array> |
||||
<string>Teso needs permission to select videos and photos</string> |
<string>https</string> |
||||
<key>UIBackgroundModes</key> |
<string>http</string> |
||||
<array> |
</array> |
||||
<string>fetch</string> |
<key>LSRequiresIPhoneOS</key> |
||||
<string>location</string> |
<true/> |
||||
<string>processing</string> |
<key>NSAppTransportSecurity</key> |
||||
<string>remote-notification</string> |
<dict> |
||||
</array> |
<key>NSAllowsArbitraryLoads</key> |
||||
<key>UILaunchStoryboardName</key> |
<true/> |
||||
<string>LaunchScreen</string> |
<key>NSAllowsArbitraryLoadsInWebContent</key> |
||||
<key>UIMainStoryboardFile</key> |
<true/> |
||||
<string>Main</string> |
|
||||
<key>UISupportedInterfaceOrientations</key> |
|
||||
<array> |
|
||||
<string>UIInterfaceOrientationPortrait</string> |
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string> |
|
||||
<string>UIInterfaceOrientationLandscapeRight</string> |
|
||||
</array> |
|
||||
<key>UISupportedInterfaceOrientations~ipad</key> |
|
||||
<array> |
|
||||
<string>UIInterfaceOrientationPortrait</string> |
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string> |
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string> |
|
||||
<string>UIInterfaceOrientationLandscapeRight</string> |
|
||||
</array> |
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key> |
|
||||
<false /> |
|
||||
<key>io.flutter.embedded_views_preview</key> |
|
||||
<true /> |
|
||||
<!-- changes this number to configure the maximum number of concurrent tasks --> |
|
||||
<key>FUMaximumConnectionsPerHost</key> |
|
||||
<integer>5</integer> |
|
||||
<!-- changes this number to configure the maximum number of concurrent tasks --> |
|
||||
<key>FUMaximumUploadOperation</key> |
|
||||
<integer>5</integer> |
|
||||
<!-- changes this number to configure the request timeout --> |
|
||||
<key>FUTimeoutInSeconds</key> |
|
||||
<integer>3600</integer> |
|
||||
<key>FUAllFilesUploadedMessage</key> |
|
||||
<string>Posts successfully published on Teso</string> |
|
||||
<key>LSApplicationQueriesSchemes</key> |
|
||||
<array> |
|
||||
<string>https</string> |
|
||||
<string>http</string> |
|
||||
</array> |
|
||||
</dict> |
</dict> |
||||
</plist> |
<key>NSCameraUsageDescription</key> |
||||
|
<string>This app needs camera access to scan QR codes and capture photos</string> |
||||
|
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> |
||||
|
<string>Teso needs access to location.</string> |
||||
|
<key>NSLocationAlwaysUsageDescription</key> |
||||
|
<string>Teso needs access to location.</string> |
||||
|
<key>NSLocationWhenInUseUsageDescription</key> |
||||
|
<string>Teso needs access to location.</string> |
||||
|
<key>NSMicrophoneUsageDescription</key> |
||||
|
<string>Allow access to microphone</string> |
||||
|
<key>NSPhotoLibraryAddUsageDescription</key> |
||||
|
<string>Teso needs permission to write videos and photos</string> |
||||
|
<key>NSPhotoLibraryUsageDescription</key> |
||||
|
<string>Teso needs permission to select videos and photos</string> |
||||
|
<key>UIBackgroundModes</key> |
||||
|
<array> |
||||
|
<string>fetch</string> |
||||
|
<string>location</string> |
||||
|
<string>processing</string> |
||||
|
<string>remote-notification</string> |
||||
|
</array> |
||||
|
<key>UILaunchStoryboardName</key> |
||||
|
<string>LaunchScreen</string> |
||||
|
<key>UIMainStoryboardFile</key> |
||||
|
<string>Main</string> |
||||
|
<key>UISupportedInterfaceOrientations</key> |
||||
|
<array> |
||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||
|
</array> |
||||
|
<key>UISupportedInterfaceOrientations~ipad</key> |
||||
|
<array> |
||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string> |
||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||
|
</array> |
||||
|
<key>UIViewControllerBasedStatusBarAppearance</key> |
||||
|
<false/> |
||||
|
<key>io.flutter.embedded_views_preview</key> |
||||
|
<true/> |
||||
|
</dict> |
||||
|
</plist> |
||||
|
@ -0,0 +1,38 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
|
<plist version="1.0"> |
||||
|
<dict> |
||||
|
<key>CLIENT_ID</key> |
||||
|
<string>280510379185-67vianhh973klriv75ip2tb9cf8ibitl.apps.googleusercontent.com</string> |
||||
|
<key>REVERSED_CLIENT_ID</key> |
||||
|
<string>com.googleusercontent.apps.280510379185-67vianhh973klriv75ip2tb9cf8ibitl</string> |
||||
|
<key>ANDROID_CLIENT_ID</key> |
||||
|
<string>280510379185-0shp8sia3i5m589bov645t3kuddb1032.apps.googleusercontent.com</string> |
||||
|
<key>API_KEY</key> |
||||
|
<string>AIzaSyCBDtZO2_Z5JjrNj1TocK6YAlk_wDbzZHs</string> |
||||
|
<key>GCM_SENDER_ID</key> |
||||
|
<string>280510379185</string> |
||||
|
<key>PLIST_VERSION</key> |
||||
|
<string>1</string> |
||||
|
<key>BUNDLE_ID</key> |
||||
|
<string>com.tesoapp</string> |
||||
|
<key>PROJECT_ID</key> |
||||
|
<string>teso-ghana</string> |
||||
|
<key>STORAGE_BUCKET</key> |
||||
|
<string>teso-ghana.appspot.com</string> |
||||
|
<key>IS_ADS_ENABLED</key> |
||||
|
<false></false> |
||||
|
<key>IS_ANALYTICS_ENABLED</key> |
||||
|
<false></false> |
||||
|
<key>IS_APPINVITE_ENABLED</key> |
||||
|
<true></true> |
||||
|
<key>IS_GCM_ENABLED</key> |
||||
|
<true></true> |
||||
|
<key>IS_SIGNIN_ENABLED</key> |
||||
|
<true></true> |
||||
|
<key>GOOGLE_APP_ID</key> |
||||
|
<string>1:280510379185:ios:52af12a619d5443119de90</string> |
||||
|
<key>DATABASE_URL</key> |
||||
|
<string>https://teso-ghana-default-rtdb.firebaseio.com</string> |
||||
|
</dict> |
||||
|
</plist> |
@ -0,0 +1,7 @@ |
|||||
|
{ |
||||
|
"file_generated_by": "FlutterFire CLI", |
||||
|
"purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", |
||||
|
"GOOGLE_APP_ID": "1:675860686596:ios:41d840f75d89875ccd9251", |
||||
|
"FIREBASE_PROJECT_ID": "teso-test-6fc81", |
||||
|
"GCM_SENDER_ID": "675860686596" |
||||
|
} |
@ -1,31 +0,0 @@ |
|||||
import 'package:flutter_upchunk/flutter_upchunk.dart'; |
|
||||
|
|
||||
class Uploading { |
|
||||
String id; |
|
||||
String title; |
|
||||
String path; |
|
||||
String aspect; |
|
||||
String thumbnail; |
|
||||
UpChunk token; |
|
||||
double pending; |
|
||||
String campaignID; |
|
||||
String muxuploadID; |
|
||||
String muxuploadURL; |
|
||||
String muxassetID; |
|
||||
bool isProcessing; |
|
||||
|
|
||||
Uploading({ |
|
||||
this.id, |
|
||||
this.title, |
|
||||
this.path, |
|
||||
this.aspect, |
|
||||
this.thumbnail, |
|
||||
this.token, |
|
||||
this.pending, |
|
||||
this.campaignID, |
|
||||
this.isProcessing, |
|
||||
this.muxuploadID, |
|
||||
this.muxuploadURL, |
|
||||
this.muxassetID, |
|
||||
}); |
|
||||
} |
|
@ -1,48 +0,0 @@ |
|||||
import 'package:better_player/better_player.dart'; |
|
||||
import 'package:flutter/material.dart'; |
|
||||
import 'package:teso/Classes/Firebase/Posts.dart'; |
|
||||
|
|
||||
const ASPECT_RATIO = 16 / 9; |
|
||||
|
|
||||
class VideoPlayerWidget extends StatefulWidget { |
|
||||
final BetterPlayerController controller; |
|
||||
final FBPosts ad; |
|
||||
|
|
||||
const VideoPlayerWidget({ |
|
||||
Key key, |
|
||||
@required this.controller, |
|
||||
@required this.ad, |
|
||||
}) : assert(controller != null), |
|
||||
assert(ad != null), |
|
||||
super(key: key); |
|
||||
|
|
||||
@override |
|
||||
_VideoPlayerWidgetState createState() => _VideoPlayerWidgetState(); |
|
||||
} |
|
||||
|
|
||||
class _VideoPlayerWidgetState extends State<VideoPlayerWidget> { |
|
||||
@override |
|
||||
void initState() { |
|
||||
super.initState(); |
|
||||
} |
|
||||
|
|
||||
@override |
|
||||
Widget build(BuildContext context) { |
|
||||
return FittedBox( |
|
||||
clipBehavior: Clip.hardEdge, |
|
||||
child: SizedBox( |
|
||||
width: MediaQuery.of(context).size.width, |
|
||||
height: MediaQuery.of(context).size.height, |
|
||||
child: BetterPlayer( |
|
||||
controller: widget.controller, |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
@override |
|
||||
void dispose() { |
|
||||
widget.controller.dispose(); |
|
||||
super.dispose(); |
|
||||
} |
|
||||
} |
|
@ -1,104 +0,0 @@ |
|||||
import 'package:better_player/better_player.dart'; |
|
||||
import 'package:flutter/material.dart'; |
|
||||
import 'package:provider/provider.dart'; |
|
||||
import 'package:teso/Classes/API%20Clasess/CouponDetails.dart'; |
|
||||
import 'package:teso/Classes/API%20Clasess/Post.dart'; |
|
||||
import 'package:teso/Pages/Sub_Pages/ProductDetails/CouponList.dart'; |
|
||||
import 'package:teso/providers/user_provider.dart'; |
|
||||
|
|
||||
const ASPECT_RATIO = 16 / 9; |
|
||||
|
|
||||
class VideoPlayerWidget extends StatefulWidget { |
|
||||
final BetterPlayerController controller; |
|
||||
final Post ad; |
|
||||
final bool play; |
|
||||
final List<CouponDetails> details; |
|
||||
|
|
||||
const VideoPlayerWidget({ |
|
||||
Key key, |
|
||||
@required this.controller, |
|
||||
@required this.ad, |
|
||||
@required this.play, |
|
||||
this.details, |
|
||||
}) : assert(controller != null), |
|
||||
assert(ad != null), |
|
||||
super(key: key); |
|
||||
|
|
||||
@override |
|
||||
_VideoPlayerWidgetState createState() => _VideoPlayerWidgetState(); |
|
||||
} |
|
||||
|
|
||||
class _VideoPlayerWidgetState extends State<VideoPlayerWidget> { |
|
||||
bool displayed = false; |
|
||||
|
|
||||
@override |
|
||||
void initState() { |
|
||||
widget.controller.videoPlayerController.addListener(() => checkVideo()); |
|
||||
super.initState(); |
|
||||
|
|
||||
// if (widget.play) { |
|
||||
// _chewieController.play(); |
|
||||
// } |
|
||||
} |
|
||||
|
|
||||
checkVideo() async { |
|
||||
// Implement your calls inside these conditions' bodies : |
|
||||
if (widget.controller.videoPlayerController.value.position == |
|
||||
Duration(seconds: 0, minutes: 0, hours: 0)) { |
|
||||
// print('video Started'); |
|
||||
Provider.of<UserProvider>(context, listen: false).viewPost(widget.ad); |
|
||||
} |
|
||||
|
|
||||
if (widget.controller.videoPlayerController.value.position.inSeconds > |
|
||||
(widget.controller.videoPlayerController.value.duration.inSeconds) / |
|
||||
3) { |
|
||||
// print('video Ended'); |
|
||||
if (!displayed && widget.details.length > 0) { |
|
||||
setState(() { |
|
||||
displayed = true; |
|
||||
}); |
|
||||
await Navigator.of(context).push( |
|
||||
PageRouteBuilder( |
|
||||
opaque: false, |
|
||||
pageBuilder: (_, __, ___) => CouponList( |
|
||||
couponsList: widget.details, |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} |
|
||||
// _chewieController.play(); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// @override |
|
||||
// void didUpdateWidget(VideoPlayerWidget oldWidget) { |
|
||||
// if (oldWidget.play != widget.play) { |
|
||||
// if (widget.play) { |
|
||||
// _chewieController.play(); |
|
||||
// } else { |
|
||||
// _chewieController.pause(); |
|
||||
// } |
|
||||
// } |
|
||||
// super.didUpdateWidget(oldWidget); |
|
||||
// } |
|
||||
|
|
||||
@override |
|
||||
Widget build(BuildContext context) { |
|
||||
return FittedBox( |
|
||||
clipBehavior: Clip.hardEdge, |
|
||||
child: SizedBox( |
|
||||
width: MediaQuery.of(context).size.width, |
|
||||
height: MediaQuery.of(context).size.height, |
|
||||
child: BetterPlayer( |
|
||||
controller: widget.controller, |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
@override |
|
||||
void dispose() { |
|
||||
widget.controller.dispose(); |
|
||||
super.dispose(); |
|
||||
} |
|
||||
} |
|
@ -1 +0,0 @@ |
|||||
export 'video_player_widget.dart'; |
|
@ -1,141 +0,0 @@ |
|||||
import 'package:flutter/material.dart'; |
|
||||
import 'PageWidgets/Campaigns/header.dart'; |
|
||||
import 'package:teso/Classes/API Clasess/Campaign.dart'; |
|
||||
import 'PageWidgets/Campaigns/campaignTile.dart'; |
|
||||
import 'package:flutter/cupertino.dart'; |
|
||||
import 'package:shared_preferences/shared_preferences.dart'; |
|
||||
import 'package:teso/util/consts.dart'; |
|
||||
import 'package:http/http.dart' as http; |
|
||||
import 'dart:convert'; |
|
||||
import 'dart:async'; |
|
||||
|
|
||||
class Campaigns extends StatefulWidget { |
|
||||
@override |
|
||||
_CampaignsState createState() => _CampaignsState(); |
|
||||
} |
|
||||
|
|
||||
class _CampaignsState extends State<Campaigns> { |
|
||||
TextEditingController searchkey; |
|
||||
List<Campaign> campaignMain; |
|
||||
List<Campaign> campaign; |
|
||||
var _future; |
|
||||
|
|
||||
void clearText() { |
|
||||
setState(() { |
|
||||
searchkey.clear(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
Future<List<Campaign>> getCampaigns() async { |
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance(); |
|
||||
|
|
||||
Map<String, String> requestHeaders = { |
|
||||
'Content-type': 'application/json', |
|
||||
'Authorization': prefs.getString('tokensTeso') |
|
||||
}; |
|
||||
|
|
||||
var register2 = serverLocation + 'adverts/businesscampaigns'; |
|
||||
var client1 = await http.post(Uri.parse(register2), |
|
||||
body: json.encode(searchkey.text), headers: requestHeaders); |
|
||||
|
|
||||
if (client1.statusCode == 200) { |
|
||||
var details = jsonDecode(client1.body); |
|
||||
if (mounted) |
|
||||
setState(() { |
|
||||
campaign = List<Campaign>.from( |
|
||||
details.map((model) => Campaign.fromJSON(model)).toList()); |
|
||||
}); |
|
||||
if (campaignMain == null) { |
|
||||
setState(() { |
|
||||
campaignMain = campaign; |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
return campaign; |
|
||||
} |
|
||||
|
|
||||
@override |
|
||||
void initState() { |
|
||||
super.initState(); |
|
||||
searchkey = new TextEditingController(); |
|
||||
_future = getCampaigns(); |
|
||||
searchkey.addListener(() async { |
|
||||
if (searchkey.text.isNotEmpty) { |
|
||||
getCampaigns(); |
|
||||
} else { |
|
||||
setState(() { |
|
||||
campaign = campaignMain; |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
@override |
|
||||
Widget build(BuildContext context) { |
|
||||
return Scaffold( |
|
||||
appBar: AppBar( |
|
||||
backgroundColor: Colors.transparent, |
|
||||
automaticallyImplyLeading: true, |
|
||||
title: Text("Join a Campaign"), |
|
||||
centerTitle: true, |
|
||||
), |
|
||||
body: Container( |
|
||||
// padding: EdgeInsets.only( |
|
||||
// left: 10, |
|
||||
// right: 10, |
|
||||
// ), |
|
||||
child: Column( |
|
||||
children: [ |
|
||||
buildCampaignHead(context, searchkey, clearText), |
|
||||
SingleChildScrollView( |
|
||||
scrollDirection: Axis.vertical, |
|
||||
child: Container( |
|
||||
width: MediaQuery.of(context).size.width, |
|
||||
// height: MediaQuery.of(context).size.height, |
|
||||
child: FutureBuilder( |
|
||||
future: _future, |
|
||||
builder: (context, snapshot) { |
|
||||
if (snapshot.data == null && |
|
||||
snapshot.connectionState == ConnectionState.waiting) { |
|
||||
return Container( |
|
||||
child: Center( |
|
||||
child: CupertinoActivityIndicator( |
|
||||
animating: true, |
|
||||
radius: 15, |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} else if (snapshot.data == null && |
|
||||
snapshot.connectionState == ConnectionState.done) { |
|
||||
return Container( |
|
||||
height: MediaQuery.of(context).size.width, |
|
||||
width: MediaQuery.of(context).size.width, |
|
||||
child: Center( |
|
||||
child: Text( |
|
||||
"Sorry there are no open campaigns at the moment"), |
|
||||
), |
|
||||
); |
|
||||
} else { |
|
||||
return ListView.builder( |
|
||||
primary: true, |
|
||||
scrollDirection: Axis.vertical, |
|
||||
shrinkWrap: true, |
|
||||
itemCount: campaign.length, |
|
||||
itemBuilder: (context, index) { |
|
||||
return buildCampaign( |
|
||||
context, |
|
||||
campaign.elementAt(index), |
|
||||
); |
|
||||
}, |
|
||||
); |
|
||||
} |
|
||||
}, |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} |
|
||||
} |
|
@ -1,142 +0,0 @@ |
|||||
import 'package:flutter/material.dart'; |
|
||||
import 'package:teso/Classes/API Clasess/Campaign.dart'; |
|
||||
import 'package:teso/providers/pageAnimations.dart'; |
|
||||
import 'package:teso/util/consts.dart'; |
|
||||
import 'package:jiffy/jiffy.dart'; |
|
||||
import 'package:teso/Pages/Sub_Pages/Campaign/AuditionPage.dart'; |
|
||||
|
|
||||
buildCampaign(BuildContext context, Campaign campaignItem) { |
|
||||
return Container( |
|
||||
width: MediaQuery.of(context).size.width, |
|
||||
//height: 120, |
|
||||
// padding: EdgeInsets.only( |
|
||||
// left: 10, |
|
||||
// right: 10, |
|
||||
// ), |
|
||||
child: Material( |
|
||||
elevation: 2.5, |
|
||||
child: SingleChildScrollView( |
|
||||
scrollDirection: Axis.horizontal, |
|
||||
child: Row( |
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly, |
|
||||
children: [ |
|
||||
Container( |
|
||||
width: 90, |
|
||||
height: 95, |
|
||||
decoration: BoxDecoration( |
|
||||
border: Border.all( |
|
||||
color: Colors.grey, |
|
||||
width: 0.5, |
|
||||
), |
|
||||
borderRadius: BorderRadius.only( |
|
||||
topRight: Radius.circular(30), |
|
||||
topLeft: Radius.circular(30), |
|
||||
bottomLeft: Radius.circular(30), |
|
||||
bottomRight: Radius.circular(30), |
|
||||
), |
|
||||
), |
|
||||
child: ClipRRect( |
|
||||
borderRadius: BorderRadius.only( |
|
||||
topLeft: Radius.circular(30.0), |
|
||||
topRight: Radius.circular(30.0), |
|
||||
bottomLeft: Radius.circular(30), |
|
||||
bottomRight: Radius.circular(30), |
|
||||
), |
|
||||
child: Image( |
|
||||
width: MediaQuery.of(context).size.width * 0.28, |
|
||||
height: 110, |
|
||||
fit: BoxFit.fill, |
|
||||
image: NetworkImage(campaignItem.targetProduct != null |
|
||||
? productURL + campaignItem.targetProduct |
|
||||
: ""), |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
Container( |
|
||||
width: MediaQuery.of(context).size.width - 105, |
|
||||
//height: 110, |
|
||||
padding: EdgeInsets.all(5), |
|
||||
child: Column( |
|
||||
children: [ |
|
||||
Container( |
|
||||
width: double.infinity, |
|
||||
child: Wrap( |
|
||||
direction: Axis.horizontal, |
|
||||
children: [ |
|
||||
Text( |
|
||||
"Campaign Title : ", |
|
||||
style: TextStyle(fontWeight: FontWeight.bold), |
|
||||
), |
|
||||
Text(campaignItem.title) |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
Container( |
|
||||
width: double.infinity, |
|
||||
child: Wrap( |
|
||||
direction: Axis.horizontal, |
|
||||
children: [ |
|
||||
Text( |
|
||||
"Description : ", |
|
||||
style: TextStyle(fontWeight: FontWeight.bold), |
|
||||
), |
|
||||
Text( |
|
||||
campaignItem.description.length > 90 |
|
||||
? campaignItem.description.substring(0, 90) + |
|
||||
"...." |
|
||||
: campaignItem.description, |
|
||||
) |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
Container( |
|
||||
width: double.infinity, |
|
||||
child: Wrap( |
|
||||
direction: Axis.horizontal, |
|
||||
children: [ |
|
||||
Text( |
|
||||
"Start Date : ", |
|
||||
style: TextStyle(fontWeight: FontWeight.bold), |
|
||||
), |
|
||||
Text(Jiffy(campaignItem.startDate).yMMMMd), |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
Container( |
|
||||
width: double.infinity, |
|
||||
child: Align( |
|
||||
alignment: Alignment.centerRight, |
|
||||
child: Container( |
|
||||
width: 90, |
|
||||
child: ElevatedButton( |
|
||||
style: ElevatedButton.styleFrom( |
|
||||
shape: RoundedRectangleBorder( |
|
||||
borderRadius: BorderRadius.all( |
|
||||
Radius.circular(20.0), |
|
||||
), |
|
||||
), |
|
||||
primary: accentMain, |
|
||||
), |
|
||||
onPressed: () => Navigator.push( |
|
||||
context, |
|
||||
PageTransition( |
|
||||
child: Audition( |
|
||||
campaign: campaignItem, |
|
||||
), |
|
||||
type: PageTransitionType.rightToLeft, |
|
||||
), |
|
||||
), |
|
||||
child: Text("Join"), |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} |
|
@ -1,45 +0,0 @@ |
|||||
import 'package:flutter/material.dart'; |
|
||||
|
|
||||
buildCampaignHead( |
|
||||
BuildContext context, TextEditingController searchkey, Function filter) { |
|
||||
return Container( |
|
||||
height: 60.0, |
|
||||
//margin: EdgeInsets.all(10.0), |
|
||||
padding: EdgeInsets.all(10.0), |
|
||||
child: Material( |
|
||||
elevation: 4.0, |
|
||||
borderRadius: BorderRadius.circular(12.0), |
|
||||
shadowColor: Theme.of(context).backgroundColor, |
|
||||
child: Row( |
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch, |
|
||||
children: [ |
|
||||
//buildSmartSearch(context), |
|
||||
new Expanded( |
|
||||
child: InkWell( |
|
||||
onTap: () => print("Searching"), |
|
||||
child: TextField( |
|
||||
autofocus: false, |
|
||||
enabled: true, |
|
||||
textAlign: TextAlign.start, |
|
||||
controller: searchkey, |
|
||||
onChanged: (String v) => filter(v), |
|
||||
style: TextStyle( |
|
||||
color: Theme.of(context).primaryColorLight, |
|
||||
), |
|
||||
decoration: InputDecoration( |
|
||||
border: InputBorder.none, |
|
||||
prefixIcon: Icon( |
|
||||
Icons.search, |
|
||||
color: Theme.of(context).primaryColorLight, |
|
||||
), |
|
||||
hintText: "Search", |
|
||||
hintStyle: TextStyle(color: Colors.grey), |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
), |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
); |
|
||||
} |
|
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue