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_number": "280510379185", |
|||
"firebase_url": "https://teso-ghana-default-rtdb.firebaseio.com", |
|||
"project_id": "teso-ghana", |
|||
"storage_bucket": "teso-ghana.appspot.com" |
|||
}, |
|||
"client": [{ |
|||
"client_info": { |
|||
"mobilesdk_app_id": "1:280510379185:android:b778de8dca1cf49219de90", |
|||
"android_client_info": { |
|||
"package_name": "com.sparentechBacware.teso" |
|||
} |
|||
"project_info": { |
|||
"project_number": "675860686596", |
|||
"project_id": "teso-test-6fc81", |
|||
"storage_bucket": "teso-test-6fc81.appspot.com" |
|||
}, |
|||
"client": [ |
|||
{ |
|||
"client_info": { |
|||
"mobilesdk_app_id": "1:675860686596:android:8522b46df172af41cd9251", |
|||
"android_client_info": { |
|||
"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_type": 1, |
|||
"android_info": { |
|||
"package_name": "com.sparentechBacware.teso", |
|||
"certificate_hash": "40b68890dd51d72454ccdc7289623c4d56273248" |
|||
} |
|||
}, |
|||
{ |
|||
"client_id": "280510379185-87k85sksrd30mu9fjgfmacb3bkcjnmdq.apps.googleusercontent.com", |
|||
"client_type": 1, |
|||
"android_info": { |
|||
"package_name": "com.sparentechBacware.teso", |
|||
"certificate_hash": "4f655cf94cd94864838475611b711c2528e33601" |
|||
} |
|||
}, |
|||
{ |
|||
"client_id": "675860686596-n32ta36ndmugfm1jj61mu2p1v197a1nn.apps.googleusercontent.com", |
|||
"client_type": 3 |
|||
} |
|||
], |
|||
"api_key": [ |
|||
{ |
|||
"current_key": "AIzaSyDt05opA09hr9Y1pysllCsEE_6dT4CrhRM" |
|||
} |
|||
], |
|||
"services": { |
|||
"appinvite_service": { |
|||
"other_platform_oauth_client": [ |
|||
{ |
|||
"client_id": "280510379185-ac7qjglm9cct9u0diqrns6om8t2mb9ug.apps.googleusercontent.com", |
|||
"client_type": 1, |
|||
"android_info": { |
|||
"package_name": "com.sparentechBacware.teso", |
|||
"certificate_hash": "063304c2da41f90c824fad163b5ad481edf6db11" |
|||
} |
|||
"client_id": "675860686596-n32ta36ndmugfm1jj61mu2p1v197a1nn.apps.googleusercontent.com", |
|||
"client_type": 3 |
|||
}, |
|||
{ |
|||
"client_id": "280510379185-58chj1fi4pts4p7p7sieq16miapvtepi.apps.googleusercontent.com", |
|||
"client_type": 3 |
|||
} |
|||
], |
|||
"api_key": [{ |
|||
"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" |
|||
} |
|||
} |
|||
] |
|||
"client_id": "675860686596-8dsd5qf42n1gej04f2m2rmt27neft8vg.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"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>BGTaskSchedulerPermittedIdentifiers</key> |
|||
<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> |
|||
<dict> |
|||
<key>BGTaskSchedulerPermittedIdentifiers</key> |
|||
<array> |
|||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundleName</key> |
|||
<string>teso</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>$(MARKETING_VERSION)</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>CFBundleURLTypes</key> |
|||
<array> |
|||
<dict> |
|||
<key>CFBundleTypeRole</key> |
|||
<string>Editor</string> |
|||
<key>CFBundleURLSchemes</key> |
|||
<array> |
|||
<string>com.googleusercontent.apps.280510379185-67vianhh973klriv75ip2tb9cf8ibitl</string> |
|||
<string>fb1759156777594606</string> |
|||
</array> |
|||
</dict> |
|||
</array> |
|||
<key>CFBundleVersion</key> |
|||
<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> |
|||
</array> |
|||
<key>CADisableMinimumFrameDurationOnPhone</key> |
|||
<true/> |
|||
<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> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundleName</key> |
|||
<string>teso</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>$(MARKETING_VERSION)</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>CFBundleURLTypes</key> |
|||
<array> |
|||
<dict> |
|||
<key>NSAllowsArbitraryLoads</key> |
|||
<true /> |
|||
<key>NSAllowsArbitraryLoadsInWebContent</key> |
|||
<true /> |
|||
<key>CFBundleTypeRole</key> |
|||
<string>Editor</string> |
|||
<key>CFBundleURLSchemes</key> |
|||
<array> |
|||
<string>com.googleusercontent.apps.280510379185-67vianhh973klriv75ip2tb9cf8ibitl</string> |
|||
<string>com.googleusercontent.apps.675860686596-8dsd5qf42n1gej04f2m2rmt27neft8vg</string> |
|||
<string>fb1759156777594606</string> |
|||
</array> |
|||
</dict> |
|||
<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 /> |
|||
<!-- 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> |
|||
</array> |
|||
<key>CFBundleVersion</key> |
|||
<string>$(CURRENT_PROJECT_VERSION)</string> |
|||
<key>FUAllFilesUploadedMessage</key> |
|||
<string>Posts successfully published on Teso</string> |
|||
<key>FUMaximumConnectionsPerHost</key> |
|||
<integer>5</integer> |
|||
<key>FUMaximumUploadOperation</key> |
|||
<integer>5</integer> |
|||
<key>FUTimeoutInSeconds</key> |
|||
<integer>3600</integer> |
|||
<key>LSApplicationQueriesSchemes</key> |
|||
<array> |
|||
<string>https</string> |
|||
<string>http</string> |
|||
</array> |
|||
<key>LSRequiresIPhoneOS</key> |
|||
<true/> |
|||
<key>NSAppTransportSecurity</key> |
|||
<dict> |
|||
<key>NSAllowsArbitraryLoads</key> |
|||
<true/> |
|||
<key>NSAllowsArbitraryLoadsInWebContent</key> |
|||
<true/> |
|||
</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