├── .gitignore
├── .metadata
├── README.md
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ ├── google-services.json
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── io
│ │ │ │ └── flutter
│ │ │ │ └── plugins
│ │ │ │ └── GeneratedPluginRegistrant.java
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── my_project
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── 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
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── audios
│ └── favicon.png
├── fonts
│ ├── Montserrat-Medium.ttf
│ ├── Montserrat-Regular.ttf
│ └── favicon.png
├── images
│ ├── 1920px-Google_2015_logo.svg.png
│ ├── Andela-logo-landscape-blue.png
│ ├── Droidcon-6283.png
│ ├── EBhIV3EXsAA84vX.png
│ ├── FVIona4WIAEWR93.png
│ ├── FWMmgzPWAAMh9rp.png
│ ├── Group_1074.png
│ ├── Group_12.png
│ ├── Group_16.png
│ ├── Group_363.png
│ ├── Group_381.png
│ ├── Group_753.png
│ ├── Group_795.png
│ ├── Layer_2-3.png
│ ├── Layer_2.png
│ ├── Screenshot_2022-11-10_at_20.58.45_2_90.png
│ ├── Screenshot_2023-03-11_at_22.11.30.png
│ ├── android254.png
│ ├── app_launcher_icon.png
│ ├── appslab.png
│ ├── btn_google_dark_normal_ios.png
│ ├── favicon.png
│ ├── filter.png
│ ├── green.png
│ ├── hover_logo.png
│ ├── jetbrains.png
│ ├── kotlin.png
│ ├── listalt.png
│ ├── orange.png
│ ├── star.png
│ ├── tiskoks.png
│ ├── unnamed.png
│ ├── view-agenda-gray.png
│ └── view-agenda.png
├── lottie_animations
│ └── favicon.png
├── pdfs
│ └── favicon.png
├── rive_animations
│ └── favicon.png
└── videos
│ └── favicon.png
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── ImageNotification
│ ├── Info.plist
│ └── NotificationService.swift
├── Podfile
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── 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-83.5x83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── GeneratedPluginRegistrant.h
│ ├── GeneratedPluginRegistrant.m
│ ├── GoogleService-Info.plist
│ ├── Info.plist
│ ├── Runner-Bridging-Header.h
│ └── Runner.entitlements
├── lib
├── app_state.dart
├── auth
│ ├── auth_manager.dart
│ ├── base_auth_user_provider.dart
│ └── firebase_auth
│ │ ├── anonymous_auth.dart
│ │ ├── apple_auth.dart
│ │ ├── auth_util.dart
│ │ ├── email_auth.dart
│ │ ├── firebase_auth_manager.dart
│ │ ├── firebase_user_provider.dart
│ │ ├── github_auth.dart
│ │ ├── google_auth.dart
│ │ └── jwt_token_auth.dart
├── backend
│ ├── api_requests
│ │ ├── api_calls.dart
│ │ └── api_manager.dart
│ └── firebase
│ │ └── firebase_config.dart
├── custom_code
│ ├── actions
│ │ ├── index.dart
│ │ └── social_login.dart
│ └── widgets
│ │ ├── index.dart
│ │ └── progress_link.dart
├── flutter_flow
│ ├── custom_functions.dart
│ ├── firebase_remote_config_util.dart
│ ├── flutter_flow_animations.dart
│ ├── flutter_flow_model.dart
│ ├── flutter_flow_theme.dart
│ ├── flutter_flow_util.dart
│ ├── flutter_flow_widgets.dart
│ ├── form_field_controller.dart
│ ├── internationalization.dart
│ ├── lat_lng.dart
│ ├── nav
│ │ ├── nav.dart
│ │ └── serialization_util.dart
│ ├── place.dart
│ ├── random_data_util.dart
│ ├── request_manager.dart
│ └── uploaded_file.dart
├── index.dart
├── main.dart
└── src
│ ├── auth
│ ├── reset_password_confirmation_page
│ │ ├── reset_password_confirmation_page_model.dart
│ │ └── reset_password_confirmation_page_widget.dart
│ ├── reset_password_page
│ │ ├── reset_password_page_model.dart
│ │ └── reset_password_page_widget.dart
│ ├── sign_in_page
│ │ ├── sign_in_page_model.dart
│ │ └── sign_in_page_widget.dart
│ └── sign_in_up_page
│ │ ├── sign_in_up_page_model.dart
│ │ └── sign_in_up_page_widget.dart
│ ├── feedback_page
│ └── feedback_page
│ │ ├── feedback_page_model.dart
│ │ └── feedback_page_widget.dart
│ ├── home
│ ├── about_page
│ │ ├── about_page_model.dart
│ │ └── about_page_widget.dart
│ ├── feeds_page
│ │ ├── feeds_page_model.dart
│ │ └── feeds_page_widget.dart
│ ├── home_page_logged_in
│ │ ├── home_page_logged_in_model.dart
│ │ └── home_page_logged_in_widget.dart
│ ├── home_page_no_login
│ │ ├── home_page_no_login_model.dart
│ │ └── home_page_no_login_widget.dart
│ └── sessions_page
│ │ ├── sessions_page_model.dart
│ │ └── sessions_page_widget.dart
│ ├── modals
│ ├── feedback_dialog
│ │ ├── feedback_dialog_model.dart
│ │ └── feedback_dialog_widget.dart
│ ├── filter_component
│ │ ├── filter_component_model.dart
│ │ └── filter_component_widget.dart
│ ├── google_sign_in_dialog
│ │ ├── google_sign_in_dialog_model.dart
│ │ └── google_sign_in_dialog_widget.dart
│ └── share_modal
│ │ ├── share_modal_model.dart
│ │ └── share_modal_widget.dart
│ ├── onboarding
│ └── splash_screen
│ │ ├── splash_screen_model.dart
│ │ └── splash_screen_widget.dart
│ ├── sessions
│ └── session_details_page
│ │ ├── session_details_page_model.dart
│ │ └── session_details_page_widget.dart
│ ├── speakers
│ ├── all_speakers_page
│ │ ├── all_speakers_page_model.dart
│ │ └── all_speakers_page_widget.dart
│ └── speaker_page
│ │ ├── speaker_page_model.dart
│ │ └── speaker_page_widget.dart
│ └── widgets
│ ├── all_speakers_component
│ ├── all_speakers_component_model.dart
│ └── all_speakers_component_widget.dart
│ ├── feeds_cards_component
│ ├── feeds_cards_component_model.dart
│ └── feeds_cards_component_widget.dart
│ ├── header_component
│ ├── header_component_model.dart
│ └── header_component_widget.dart
│ ├── organisedby_component
│ ├── organisedby_component_model.dart
│ └── organisedby_component_widget.dart
│ ├── organized_by_panel
│ ├── organized_by_panel_model.dart
│ └── organized_by_panel_widget.dart
│ ├── organizers_component
│ ├── organizers_component_model.dart
│ └── organizers_component_widget.dart
│ ├── outlined_icon_button
│ ├── outlined_icon_button_model.dart
│ └── outlined_icon_button_widget.dart
│ ├── sesion_header_component
│ ├── sesion_header_component_model.dart
│ └── sesion_header_component_widget.dart
│ ├── session_date_component
│ ├── session_date_component_model.dart
│ └── session_date_component_widget.dart
│ ├── sessions_card_component
│ ├── sessions_card_component_model.dart
│ └── sessions_card_component_widget.dart
│ ├── sessions_list_component
│ ├── sessions_list_component_model.dart
│ └── sessions_list_component_widget.dart
│ ├── speakers_component
│ ├── speakers_component_model.dart
│ └── speakers_component_widget.dart
│ ├── sponsors_component
│ ├── sponsors_component_model.dart
│ └── sponsors_component_widget.dart
│ └── twitter_handle_component
│ ├── twitter_handle_component_model.dart
│ └── twitter_handle_component_widget.dart
├── pubspec.yaml
├── test
└── widget_test.dart
└── web
├── Group_753.png
├── favicon.png
├── icons
├── Icon-192.png
├── Icon-512.png
└── app_launcher_icon.png
└── index.html
/.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 | # Firebase – this is necessary if you use Firebase since it could otherwise
35 | # lead to leaking of private certificates to your repository, which is no bueno.
36 | .firebase/
37 |
38 | # Web related
39 | lib/generated_plugin_registrant.dart
40 |
41 | # Symbolication related
42 | app.*.symbols
43 |
44 | # Obfuscation related
45 | app.*.map.json
46 |
47 | # Android Studio will place build artifacts here
48 | /android/app/debug
49 | /android/app/profile
50 | /android/app/release
51 |
--------------------------------------------------------------------------------
/.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: 4d7946a68d26794349189cf21b3f68cc6fe61dcb
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DroidconKe2023FlutterFlow
2 |
3 | A new Flutter project.
4 |
5 | ## Getting Started
6 |
7 | FlutterFlow projects are built to run on the Flutter _stable_ release.
8 |
9 | ### Getting started continued:
10 |
11 | This project is a starting point for a Flutter application.
12 |
13 | A few resources to get you started if this is your first Flutter project:
14 |
15 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
16 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
17 |
18 | For help getting started with Flutter, view our
19 | [online documentation](https://flutter.dev/docs), which offers tutorials,
20 | samples, guidance on mobile development, and a full API reference.
21 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | apply plugin: 'com.google.gms.google-services' // Google Services plugin
28 |
29 |
30 | def keystoreProperties = new Properties()
31 | def keystorePropertiesFile = rootProject.file('key.properties')
32 | if (keystorePropertiesFile.exists()) {
33 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
34 | }
35 |
36 | android {
37 | compileSdkVersion 33
38 |
39 |
40 | sourceSets {
41 | main.java.srcDirs += 'src/main/kotlin'
42 | }
43 |
44 | lintOptions {
45 | disable 'InvalidPackage'
46 | checkReleaseBuilds false
47 | }
48 |
49 | defaultConfig {
50 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
51 | applicationId "com.flutterKenya.droidconkeflutterflowversion"
52 | minSdkVersion 21
53 | targetSdkVersion 33
54 | versionCode flutterVersionCode.toInteger()
55 | versionName flutterVersionName
56 | }
57 |
58 | signingConfigs {
59 | release {
60 | keyAlias keystoreProperties['keyAlias']
61 | keyPassword keystoreProperties['keyPassword']
62 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
63 | storePassword keystoreProperties['storePassword']
64 | }
65 | }
66 |
67 | buildTypes {
68 | release {
69 | // TODO: Add your own signing config for the release build.
70 | // Signing with the debug keys for now, so `flutter run --release` works.
71 | signingConfig signingConfigs.debug
72 | }
73 | }
74 | }
75 |
76 | flutter {
77 | source '../..'
78 | }
79 |
80 | dependencies {
81 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
82 | }
83 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
12 |
13 |
21 |
25 |
29 |
34 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
55 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java:
--------------------------------------------------------------------------------
1 | package io.flutter.plugins;
2 |
3 | import androidx.annotation.Keep;
4 | import androidx.annotation.NonNull;
5 |
6 | import io.flutter.embedding.engine.FlutterEngine;
7 | import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
8 |
9 | /**
10 | * Generated file. Do not edit.
11 | * This file is generated by the Flutter tool based on the
12 | * plugins that support the Android platform.
13 | */
14 | @Keep
15 | public final class GeneratedPluginRegistrant {
16 | public static void registerWith(@NonNull FlutterEngine flutterEngine) {
17 | ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
18 | io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.firebaseauth.FirebaseAuthPlugin"));
19 | flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FirebaseCorePlugin());
20 | io.flutter.plugins.googlesignin.GoogleSignInPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.googlesignin.GoogleSignInPlugin"));
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/my_project/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.flutterKenya.droidconkeflutterflowversion
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | DroidconKe
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.7.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:7.3.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | classpath 'com.google.gms:google-services:4.3.8' // Google Services plugin
12 |
13 | }
14 | }
15 |
16 | allprojects {
17 | repositories {
18 | google()
19 | mavenCentral()
20 | }
21 | }
22 |
23 | rootProject.buildDir = '../build'
24 | subprojects {
25 | project.buildDir = "${rootProject.buildDir}/${project.name}"
26 | }
27 | subprojects {
28 | project.evaluationDependsOn(':app')
29 | }
30 |
31 | task clean(type: Delete) {
32 | delete rootProject.buildDir
33 | }
34 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4608m
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | android.enableR8=true
5 |
--------------------------------------------------------------------------------
/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-7.5-all.zip
7 |
--------------------------------------------------------------------------------
/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 |
13 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
14 |
15 | def plugins = new Properties()
16 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
17 | if (pluginsFile.exists()) {
18 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
19 | }
20 |
21 | plugins.each { name, path ->
22 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
23 | include ":$name"
24 | project(":$name").projectDir = pluginDirectory
25 | }
--------------------------------------------------------------------------------
/assets/audios/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/audios/favicon.png
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/fonts/Montserrat-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/fonts/Montserrat-Regular.ttf
--------------------------------------------------------------------------------
/assets/fonts/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/fonts/favicon.png
--------------------------------------------------------------------------------
/assets/images/1920px-Google_2015_logo.svg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/1920px-Google_2015_logo.svg.png
--------------------------------------------------------------------------------
/assets/images/Andela-logo-landscape-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Andela-logo-landscape-blue.png
--------------------------------------------------------------------------------
/assets/images/Droidcon-6283.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Droidcon-6283.png
--------------------------------------------------------------------------------
/assets/images/EBhIV3EXsAA84vX.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/EBhIV3EXsAA84vX.png
--------------------------------------------------------------------------------
/assets/images/FVIona4WIAEWR93.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/FVIona4WIAEWR93.png
--------------------------------------------------------------------------------
/assets/images/FWMmgzPWAAMh9rp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/FWMmgzPWAAMh9rp.png
--------------------------------------------------------------------------------
/assets/images/Group_1074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_1074.png
--------------------------------------------------------------------------------
/assets/images/Group_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_12.png
--------------------------------------------------------------------------------
/assets/images/Group_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_16.png
--------------------------------------------------------------------------------
/assets/images/Group_363.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_363.png
--------------------------------------------------------------------------------
/assets/images/Group_381.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_381.png
--------------------------------------------------------------------------------
/assets/images/Group_753.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_753.png
--------------------------------------------------------------------------------
/assets/images/Group_795.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Group_795.png
--------------------------------------------------------------------------------
/assets/images/Layer_2-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Layer_2-3.png
--------------------------------------------------------------------------------
/assets/images/Layer_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Layer_2.png
--------------------------------------------------------------------------------
/assets/images/Screenshot_2022-11-10_at_20.58.45_2_90.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Screenshot_2022-11-10_at_20.58.45_2_90.png
--------------------------------------------------------------------------------
/assets/images/Screenshot_2023-03-11_at_22.11.30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/Screenshot_2023-03-11_at_22.11.30.png
--------------------------------------------------------------------------------
/assets/images/android254.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/android254.png
--------------------------------------------------------------------------------
/assets/images/app_launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/app_launcher_icon.png
--------------------------------------------------------------------------------
/assets/images/appslab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/appslab.png
--------------------------------------------------------------------------------
/assets/images/btn_google_dark_normal_ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/btn_google_dark_normal_ios.png
--------------------------------------------------------------------------------
/assets/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/favicon.png
--------------------------------------------------------------------------------
/assets/images/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/filter.png
--------------------------------------------------------------------------------
/assets/images/green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/green.png
--------------------------------------------------------------------------------
/assets/images/hover_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/hover_logo.png
--------------------------------------------------------------------------------
/assets/images/jetbrains.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/jetbrains.png
--------------------------------------------------------------------------------
/assets/images/kotlin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/kotlin.png
--------------------------------------------------------------------------------
/assets/images/listalt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/listalt.png
--------------------------------------------------------------------------------
/assets/images/orange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/orange.png
--------------------------------------------------------------------------------
/assets/images/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/star.png
--------------------------------------------------------------------------------
/assets/images/tiskoks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/tiskoks.png
--------------------------------------------------------------------------------
/assets/images/unnamed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/unnamed.png
--------------------------------------------------------------------------------
/assets/images/view-agenda-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/view-agenda-gray.png
--------------------------------------------------------------------------------
/assets/images/view-agenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/images/view-agenda.png
--------------------------------------------------------------------------------
/assets/lottie_animations/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/lottie_animations/favicon.png
--------------------------------------------------------------------------------
/assets/pdfs/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/pdfs/favicon.png
--------------------------------------------------------------------------------
/assets/rive_animations/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/rive_animations/favicon.png
--------------------------------------------------------------------------------
/assets/videos/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/assets/videos/favicon.png
--------------------------------------------------------------------------------
/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 | build/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/app.flx
23 | Flutter/app.zip
24 | Flutter/flutter_assets/
25 | Flutter/flutter_export_environment.sh
26 | ServiceDefinitions.json
27 | Runner/GeneratedPluginRegistrant.*
28 |
29 | # Exceptions to above rules.
30 | !default.mode1v3
31 | !default.mode2v3
32 | !default.pbxuser
33 | !default.perspectivev3
34 |
--------------------------------------------------------------------------------
/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 | 13.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/ImageNotification/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | ImageNotification
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | NSExtension
24 |
25 | NSExtensionPointIdentifier
26 | com.apple.usernotifications.service
27 | NSExtensionPrincipalClass
28 | $(PRODUCT_MODULE_NAME).NotificationService
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ios/ImageNotification/NotificationService.swift:
--------------------------------------------------------------------------------
1 | import FirebaseMessaging
2 | import UserNotifications
3 |
4 | class NotificationService: UNNotificationServiceExtension {
5 |
6 | var contentHandler: ((UNNotificationContent) -> Void)?
7 | var bestAttemptContent: UNMutableNotificationContent?
8 |
9 | override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
10 | self.contentHandler = contentHandler
11 | bestAttemptContent = request.content
12 | .mutableCopy() as? UNMutableNotificationContent
13 | guard let bestAttemptContent = bestAttemptContent else { return }
14 | FIRMessagingExtensionHelper().populateNotificationContent(
15 | bestAttemptContent,
16 | withContentHandler: contentHandler)
17 | }
18 |
19 | override func serviceExtensionTimeWillExpire() {
20 | // Called just before the extension will be terminated by the system.
21 | // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
22 | if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
23 | contentHandler(bestAttemptContent)
24 | }
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | platform :ios, '13.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 | target.build_configurations.each do |config|
41 | config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
42 |
43 | end
44 | end
45 | end
46 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | import Flutter
4 |
5 | @UIApplicationMain
6 | @objc class AppDelegate: FlutterAppDelegate {
7 | override func application(
8 | _ application: UIApplication,
9 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
10 | ) -> Bool {
11 | GeneratedPluginRegistrant.register(with: self)
12 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/GeneratedPluginRegistrant.h:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | #ifndef GeneratedPluginRegistrant_h
6 | #define GeneratedPluginRegistrant_h
7 |
8 | #import
9 |
10 | NS_ASSUME_NONNULL_BEGIN
11 |
12 | @interface GeneratedPluginRegistrant : NSObject
13 | + (void)registerWithRegistry:(NSObject*)registry;
14 | @end
15 |
16 | NS_ASSUME_NONNULL_END
17 | #endif /* GeneratedPluginRegistrant_h */
18 |
--------------------------------------------------------------------------------
/ios/Runner/GeneratedPluginRegistrant.m:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | #import "GeneratedPluginRegistrant.h"
6 |
7 | #if __has_include()
8 | #import
9 | #else
10 | @import firebase_auth;
11 | #endif
12 |
13 | #if __has_include()
14 | #import
15 | #else
16 | @import firebase_core;
17 | #endif
18 |
19 | #if __has_include()
20 | #import
21 | #else
22 | @import google_sign_in;
23 | #endif
24 |
25 | @implementation GeneratedPluginRegistrant
26 |
27 | + (void)registerWithRegistry:(NSObject*)registry {
28 | [FLTFirebaseAuthPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseAuthPlugin"]];
29 | [FLTFirebaseCorePlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseCorePlugin"]];
30 | [FLTGoogleSignInPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTGoogleSignInPlugin"]];
31 | }
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/ios/Runner/GoogleService-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CLIENT_ID
6 | 602867001820-34dovhe457imsa2dg1acnmfuf233rijq.apps.googleusercontent.com
7 | REVERSED_CLIENT_ID
8 | com.googleusercontent.apps.602867001820-34dovhe457imsa2dg1acnmfuf233rijq
9 | ANDROID_CLIENT_ID
10 | 602867001820-01m5er098dknofg7rdktcqj33atavm5c.apps.googleusercontent.com
11 | API_KEY
12 | AIzaSyAi97080KkYdRcS-RYhRQbhxqzLhh1iME0
13 | GCM_SENDER_ID
14 | 602867001820
15 | PLIST_VERSION
16 | 1
17 | BUNDLE_ID
18 | com.flutterKenya.droidconkeflutterflowversion
19 | PROJECT_ID
20 | droidconke-70d60
21 | STORAGE_BUCKET
22 | droidconke-70d60.appspot.com
23 | IS_ADS_ENABLED
24 |
25 | IS_ANALYTICS_ENABLED
26 |
27 | IS_APPINVITE_ENABLED
28 |
29 | IS_GCM_ENABLED
30 |
31 | IS_SIGNIN_ENABLED
32 |
33 | GOOGLE_APP_ID
34 | 1:602867001820:ios:ad987eded0e451ec710719
35 | DATABASE_URL
36 | https://droidconke-70d60.firebaseio.com
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | DroidconKe
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | DroidconKe2023FlutterFlow
17 | CFBundlePackageType
18 | APPL
19 |
20 | CFBundleShortVersionString
21 | $(FLUTTER_BUILD_NAME)
22 | CFBundleSignature
23 | ????
24 | CFBundleURLTypes
25 |
26 |
27 | CFBundleTypeRole
28 | Editor
29 | CFBundleURLSchemes
30 |
31 | com.googleusercontent.apps.602867001820-34dovhe457imsa2dg1acnmfuf233rijq
32 |
33 |
34 |
35 |
36 |
37 | CFBundleTypeRole
38 | Editor
39 | CFBundleURLName
40 | droidconke2023flutterflow.com
41 | CFBundleURLSchemes
42 |
43 | droidconke2023flutterflow
44 |
45 |
46 |
47 | FlutterDeepLinkingEnabled
48 |
49 |
50 |
51 | CFBundleVersion
52 | $(FLUTTER_BUILD_NUMBER)
53 | LSRequiresIPhoneOS
54 |
55 |
56 |
57 |
58 |
59 |
60 | UILaunchStoryboardName
61 | LaunchScreen
62 | UIMainStoryboardFile
63 | Main
64 | UISupportedInterfaceOrientations
65 |
66 | UIInterfaceOrientationPortrait
67 | UIInterfaceOrientationLandscapeLeft
68 | UIInterfaceOrientationLandscapeRight
69 |
70 | UISupportedInterfaceOrientations~ipad
71 |
72 | UIInterfaceOrientationPortrait
73 | UIInterfaceOrientationPortraitUpsideDown
74 | UIInterfaceOrientationLandscapeLeft
75 | UIInterfaceOrientationLandscapeRight
76 |
77 | UIViewControllerBasedStatusBarAppearance
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/Runner/Runner.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/lib/app_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'flutter_flow/request_manager.dart';
3 | import 'backend/api_requests/api_manager.dart';
4 | import 'package:shared_preferences/shared_preferences.dart';
5 | import 'flutter_flow/flutter_flow_util.dart';
6 | import 'dart:convert';
7 |
8 | class FFAppState extends ChangeNotifier {
9 | static final FFAppState _instance = FFAppState._internal();
10 |
11 | factory FFAppState() {
12 | return _instance;
13 | }
14 |
15 | FFAppState._internal();
16 |
17 | Future initializePersistedState() async {
18 | prefs = await SharedPreferences.getInstance();
19 | _safeInit(() {
20 | _listLinks = prefs.getStringList('ff_listLinks') ?? _listLinks;
21 | });
22 | _safeInit(() {
23 | _sessionListToggle =
24 | prefs.getBool('ff_sessionListToggle') ?? _sessionListToggle;
25 | });
26 | _safeInit(() {
27 | _appToken = prefs.getString('ff_appToken') ?? _appToken;
28 | });
29 | _safeInit(() {
30 | if (prefs.containsKey('ff_user')) {
31 | try {
32 | _user = jsonDecode(prefs.getString('ff_user') ?? '');
33 | } catch (e) {
34 | print("Can't decode persisted json. Error: $e.");
35 | }
36 | }
37 | });
38 | }
39 |
40 | void update(VoidCallback callback) {
41 | callback();
42 | notifyListeners();
43 | }
44 |
45 | late SharedPreferences prefs;
46 |
47 | List _listLinks = [
48 | 'assets/images/green.png',
49 | 'assets/images/orange.png'
50 | ];
51 | List get listLinks => _listLinks;
52 | set listLinks(List _value) {
53 | _listLinks = _value;
54 | prefs.setStringList('ff_listLinks', _value);
55 | }
56 |
57 | void addToListLinks(String _value) {
58 | _listLinks.add(_value);
59 | prefs.setStringList('ff_listLinks', _listLinks);
60 | }
61 |
62 | void removeFromListLinks(String _value) {
63 | _listLinks.remove(_value);
64 | prefs.setStringList('ff_listLinks', _listLinks);
65 | }
66 |
67 | void removeAtIndexFromListLinks(int _index) {
68 | _listLinks.removeAt(_index);
69 | prefs.setStringList('ff_listLinks', _listLinks);
70 | }
71 |
72 | void updateListLinksAtIndex(
73 | int _index,
74 | String Function(String) updateFn,
75 | ) {
76 | _listLinks[_index] = updateFn(_listLinks[_index]);
77 | prefs.setStringList('ff_listLinks', _listLinks);
78 | }
79 |
80 | bool _sessionListToggle = false;
81 | bool get sessionListToggle => _sessionListToggle;
82 | set sessionListToggle(bool _value) {
83 | _sessionListToggle = _value;
84 | prefs.setBool('ff_sessionListToggle', _value);
85 | }
86 |
87 | String _appToken = '';
88 | String get appToken => _appToken;
89 | set appToken(String _value) {
90 | _appToken = _value;
91 | prefs.setString('ff_appToken', _value);
92 | }
93 |
94 | dynamic _user;
95 | dynamic get user => _user;
96 | set user(dynamic _value) {
97 | _user = _value;
98 | prefs.setString('ff_user', jsonEncode(_value));
99 | }
100 |
101 | final _numberOfSpeakersManager = FutureRequestManager();
102 | Future numberOfSpeakers({
103 | String? uniqueQueryKey,
104 | bool? overrideCache,
105 | required Future Function() requestFn,
106 | }) =>
107 | _numberOfSpeakersManager.performRequest(
108 | uniqueQueryKey: uniqueQueryKey,
109 | overrideCache: overrideCache,
110 | requestFn: requestFn,
111 | );
112 | void clearNumberOfSpeakersCache() => _numberOfSpeakersManager.clear();
113 | void clearNumberOfSpeakersCacheKey(String? uniqueKey) =>
114 | _numberOfSpeakersManager.clearRequest(uniqueKey);
115 |
116 | final _allSessionsNumberManager = FutureRequestManager();
117 | Future allSessionsNumber({
118 | String? uniqueQueryKey,
119 | bool? overrideCache,
120 | required Future Function() requestFn,
121 | }) =>
122 | _allSessionsNumberManager.performRequest(
123 | uniqueQueryKey: uniqueQueryKey,
124 | overrideCache: overrideCache,
125 | requestFn: requestFn,
126 | );
127 | void clearAllSessionsNumberCache() => _allSessionsNumberManager.clear();
128 | void clearAllSessionsNumberCacheKey(String? uniqueKey) =>
129 | _allSessionsNumberManager.clearRequest(uniqueKey);
130 | }
131 |
132 | LatLng? _latLngFromString(String? val) {
133 | if (val == null) {
134 | return null;
135 | }
136 | final split = val.split(',');
137 | final lat = double.parse(split.first);
138 | final lng = double.parse(split.last);
139 | return LatLng(lat, lng);
140 | }
141 |
142 | void _safeInit(Function() initializeField) {
143 | try {
144 | initializeField();
145 | } catch (_) {}
146 | }
147 |
148 | Future _safeInitAsync(Function() initializeField) async {
149 | try {
150 | await initializeField();
151 | } catch (_) {}
152 | }
153 |
--------------------------------------------------------------------------------
/lib/auth/auth_manager.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'base_auth_user_provider.dart';
4 |
5 | abstract class AuthManager {
6 | Future signOut();
7 | Future deleteUser(BuildContext context);
8 | Future resetPassword({required String email, required BuildContext context});
9 | Future sendEmailVerification() async => currentUser?.sendEmailVerification();
10 | Future refreshUser() async => currentUser?.refreshUser();
11 | }
12 |
13 | mixin EmailSignInManager on AuthManager {
14 | Future signInWithEmail(
15 | BuildContext context,
16 | String email,
17 | String password,
18 | );
19 |
20 | Future createAccountWithEmail(
21 | BuildContext context,
22 | String email,
23 | String password,
24 | );
25 | }
26 |
27 | mixin AnonymousSignInManager on AuthManager {
28 | Future signInAnonymously(BuildContext context);
29 | }
30 |
31 | mixin AppleSignInManager on AuthManager {
32 | Future signInWithApple(BuildContext context);
33 | }
34 |
35 | mixin GoogleSignInManager on AuthManager {
36 | Future signInWithGoogle(BuildContext context);
37 | }
38 |
39 | mixin JwtSignInManager on AuthManager {
40 | Future signInWithJwtToken(
41 | BuildContext context,
42 | String jwtToken,
43 | );
44 | }
45 |
46 | mixin PhoneSignInManager on AuthManager {
47 | Future beginPhoneAuth({
48 | required BuildContext context,
49 | required String phoneNumber,
50 | required void Function(BuildContext) onCodeSent,
51 | });
52 |
53 | Future verifySmsCode({
54 | required BuildContext context,
55 | required String smsCode,
56 | });
57 | }
58 |
59 | mixin FacebookSignInManager on AuthManager {
60 | Future signInWithFacebook(BuildContext context);
61 | }
62 |
63 | mixin MicrosoftSignInManager on AuthManager {
64 | Future signInWithMicrosoft(
65 | BuildContext context,
66 | List scopes,
67 | String tenantId,
68 | );
69 | }
70 |
71 | mixin GithubSignInManager on AuthManager {
72 | Future signInWithGithub(BuildContext context);
73 | }
74 |
--------------------------------------------------------------------------------
/lib/auth/base_auth_user_provider.dart:
--------------------------------------------------------------------------------
1 | class AuthUserInfo {
2 | const AuthUserInfo({
3 | this.uid,
4 | this.email,
5 | this.displayName,
6 | this.photoUrl,
7 | this.phoneNumber,
8 | });
9 |
10 | final String? uid;
11 | final String? email;
12 | final String? displayName;
13 | final String? photoUrl;
14 | final String? phoneNumber;
15 | }
16 |
17 | abstract class BaseAuthUser {
18 | bool get loggedIn;
19 | bool get emailVerified;
20 |
21 | AuthUserInfo get authUserInfo;
22 |
23 | Future? delete();
24 | Future? sendEmailVerification();
25 | Future refreshUser() async {}
26 |
27 | String? get uid => authUserInfo.uid;
28 | String? get email => authUserInfo.email;
29 | String? get displayName => authUserInfo.displayName;
30 | String? get photoUrl => authUserInfo.photoUrl;
31 | String? get phoneNumber => authUserInfo.phoneNumber;
32 | }
33 |
34 | BaseAuthUser? currentUser;
35 | bool get loggedIn => currentUser?.loggedIn ?? false;
36 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/anonymous_auth.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 |
3 | Future anonymousSignInFunc() =>
4 | FirebaseAuth.instance.signInAnonymously();
5 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/apple_auth.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 | import 'dart:math';
3 |
4 | import 'package:crypto/crypto.dart';
5 | import 'package:firebase_auth/firebase_auth.dart';
6 | import 'package:flutter/foundation.dart';
7 | import 'package:sign_in_with_apple/sign_in_with_apple.dart';
8 |
9 | /// Generates a cryptographically secure random nonce, to be included in a
10 | /// credential request.
11 | String generateNonce([int length = 32]) {
12 | final charset =
13 | '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
14 | final random = Random.secure();
15 | return List.generate(length, (_) => charset[random.nextInt(charset.length)])
16 | .join();
17 | }
18 |
19 | /// Returns the sha256 hash of [input] in hex notation.
20 | String sha256ofString(String input) {
21 | final bytes = utf8.encode(input);
22 | final digest = sha256.convert(bytes);
23 | return digest.toString();
24 | }
25 |
26 | Future appleSignIn() async {
27 | if (kIsWeb) {
28 | final provider = OAuthProvider("apple.com")
29 | ..addScope('email')
30 | ..addScope('name');
31 |
32 | // Sign in the user with Firebase.
33 | return await FirebaseAuth.instance.signInWithPopup(provider);
34 | }
35 | // To prevent replay attacks with the credential returned from Apple, we
36 | // include a nonce in the credential request. When signing in in with
37 | // Firebase, the nonce in the id token returned by Apple, is expected to
38 | // match the sha256 hash of `rawNonce`.
39 | final rawNonce = generateNonce();
40 | final nonce = sha256ofString(rawNonce);
41 |
42 | // Request credential for the currently signed in Apple account.
43 | final appleCredential = await SignInWithApple.getAppleIDCredential(
44 | scopes: [
45 | AppleIDAuthorizationScopes.email,
46 | AppleIDAuthorizationScopes.fullName,
47 | ],
48 | nonce: nonce,
49 | );
50 |
51 | // Create an `OAuthCredential` from the credential returned by Apple.
52 | final oauthCredential = OAuthProvider("apple.com").credential(
53 | idToken: appleCredential.identityToken,
54 | rawNonce: rawNonce,
55 | );
56 |
57 | // Sign in the user with Firebase. If the nonce we generated earlier does
58 | // not match the nonce in `appleCredential.identityToken`, sign in will fail.
59 | return await FirebaseAuth.instance.signInWithCredential(oauthCredential);
60 | }
61 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/auth_util.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/foundation.dart' show kIsWeb;
4 | import 'package:firebase_auth/firebase_auth.dart';
5 | import 'package:flutter/material.dart';
6 | import '../auth_manager.dart';
7 | import '../base_auth_user_provider.dart';
8 | import '../../flutter_flow/flutter_flow_util.dart';
9 |
10 | import 'firebase_auth_manager.dart';
11 |
12 | export 'firebase_auth_manager.dart';
13 |
14 | final _authManager = FirebaseAuthManager();
15 | FirebaseAuthManager get authManager => _authManager;
16 |
17 | String get currentUserEmail => currentUser?.email ?? '';
18 |
19 | String get currentUserUid => currentUser?.uid ?? '';
20 |
21 | String get currentUserDisplayName => currentUser?.displayName ?? '';
22 |
23 | String get currentUserPhoto => currentUser?.photoUrl ?? '';
24 |
25 | String get currentPhoneNumber => currentUser?.phoneNumber ?? '';
26 |
27 | String get currentJwtToken => _currentJwtToken ?? '';
28 |
29 | bool get currentUserEmailVerified => currentUser?.emailVerified ?? false;
30 |
31 | /// Create a Stream that listens to the current user's JWT Token, since Firebase
32 | /// generates a new token every hour.
33 | String? _currentJwtToken;
34 | final jwtTokenStream = FirebaseAuth.instance
35 | .idTokenChanges()
36 | .map((user) async => _currentJwtToken = await user?.getIdToken())
37 | .asBroadcastStream();
38 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/email_auth.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 |
3 | Future emailSignInFunc(
4 | String email,
5 | String password,
6 | ) =>
7 | FirebaseAuth.instance
8 | .signInWithEmailAndPassword(email: email.trim(), password: password);
9 |
10 | Future emailCreateAccountFunc(
11 | String email,
12 | String password,
13 | ) =>
14 | FirebaseAuth.instance.createUserWithEmailAndPassword(
15 | email: email.trim(),
16 | password: password,
17 | );
18 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/firebase_user_provider.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 | import 'package:rxdart/rxdart.dart';
3 |
4 | import '../base_auth_user_provider.dart';
5 |
6 | export '../base_auth_user_provider.dart';
7 |
8 | class DroidconKe2023FlutterFlowFirebaseUser extends BaseAuthUser {
9 | DroidconKe2023FlutterFlowFirebaseUser(this.user);
10 | User? user;
11 | bool get loggedIn => user != null;
12 |
13 | @override
14 | AuthUserInfo get authUserInfo => AuthUserInfo(
15 | uid: user?.uid,
16 | email: user?.email,
17 | displayName: user?.displayName,
18 | photoUrl: user?.photoURL,
19 | phoneNumber: user?.phoneNumber,
20 | );
21 |
22 | @override
23 | Future? delete() => user?.delete();
24 |
25 | @override
26 | Future? sendEmailVerification() => user?.sendEmailVerification();
27 |
28 | @override
29 | bool get emailVerified {
30 | // Reloads the user when checking in order to get the most up to date
31 | // email verified status.
32 | if (loggedIn && !user!.emailVerified) {
33 | refreshUser();
34 | }
35 | return user?.emailVerified ?? false;
36 | }
37 |
38 | @override
39 | Future refreshUser() async {
40 | await FirebaseAuth.instance.currentUser
41 | ?.reload()
42 | .then((_) => user = FirebaseAuth.instance.currentUser);
43 | }
44 |
45 | static BaseAuthUser fromUserCredential(UserCredential userCredential) =>
46 | fromFirebaseUser(userCredential.user);
47 | static BaseAuthUser fromFirebaseUser(User? user) =>
48 | DroidconKe2023FlutterFlowFirebaseUser(user);
49 | }
50 |
51 | Stream droidconKe2023FlutterFlowFirebaseUserStream() =>
52 | FirebaseAuth.instance
53 | .authStateChanges()
54 | .debounce((user) => user == null && !loggedIn
55 | ? TimerStream(true, const Duration(seconds: 1))
56 | : Stream.value(user))
57 | .map(
58 | (user) {
59 | currentUser = DroidconKe2023FlutterFlowFirebaseUser(user);
60 | return currentUser!;
61 | },
62 | );
63 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/github_auth.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 | import 'package:flutter/foundation.dart';
3 |
4 | // https://firebase.flutter.dev/docs/auth/social/#github
5 | Future githubSignInFunc() async {
6 | // Create a new provider
7 | GithubAuthProvider githubProvider = GithubAuthProvider();
8 |
9 | // Once signed in, return the UserCredential
10 | return await FirebaseAuth.instance.signInWithPopup(githubProvider);
11 | }
12 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/google_auth.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 | import 'package:flutter/foundation.dart';
3 | import 'package:google_sign_in/google_sign_in.dart';
4 |
5 | final _googleSignIn = GoogleSignIn();
6 |
7 | Future googleSignInFunc() async {
8 | if (kIsWeb) {
9 | // Once signed in, return the UserCredential
10 | return await FirebaseAuth.instance.signInWithPopup(GoogleAuthProvider());
11 | }
12 |
13 | await signOutWithGoogle().catchError((_) => null);
14 | final auth = await (await _googleSignIn.signIn())?.authentication;
15 | if (auth == null) {
16 | return null;
17 | }
18 | final credential = GoogleAuthProvider.credential(
19 | idToken: auth.idToken, accessToken: auth.accessToken);
20 | return FirebaseAuth.instance.signInWithCredential(credential);
21 | }
22 |
23 | Future signOutWithGoogle() => _googleSignIn.signOut();
24 |
--------------------------------------------------------------------------------
/lib/auth/firebase_auth/jwt_token_auth.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 |
3 | Future jwtTokenSignIn(String jwtToken) =>
4 | FirebaseAuth.instance.signInWithCustomToken(jwtToken);
5 |
--------------------------------------------------------------------------------
/lib/backend/firebase/firebase_config.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_core/firebase_core.dart';
2 | import 'package:flutter/foundation.dart';
3 |
4 | Future initFirebase() async {
5 | if (kIsWeb) {
6 | await Firebase.initializeApp(
7 | options: FirebaseOptions(
8 | apiKey: "AIzaSyDxZ_1QpImc-FiQbP3i7N93pNr5jFQSYjk",
9 | authDomain: "droidconke-70d60.firebaseapp.com",
10 | projectId: "droidconke-70d60",
11 | storageBucket: "droidconke-70d60.appspot.com",
12 | messagingSenderId: "602867001820",
13 | appId: "1:602867001820:web:30946aa75cea03b0",
14 | measurementId: "G-P1ZSFNJBFM"));
15 | } else {
16 | await Firebase.initializeApp();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/custom_code/actions/index.dart:
--------------------------------------------------------------------------------
1 | export 'social_login.dart' show socialLogin;
2 |
--------------------------------------------------------------------------------
/lib/custom_code/actions/social_login.dart:
--------------------------------------------------------------------------------
1 | // Automatic FlutterFlow imports
2 | import '/flutter_flow/flutter_flow_theme.dart';
3 | import '/flutter_flow/flutter_flow_util.dart';
4 | import 'index.dart'; // Imports other custom actions
5 | import '/flutter_flow/custom_functions.dart'; // Imports custom functions
6 | import 'package:flutter/material.dart';
7 | // Begin custom action code
8 | // DO NOT REMOVE OR MODIFY THE CODE ABOVE!
9 |
10 | // Imports other custom actions
11 |
12 | import 'package:firebase_auth/firebase_auth.dart';
13 | import 'package:flutter/foundation.dart';
14 | import 'package:google_sign_in/google_sign_in.dart';
15 |
16 | final _googleSignIn = GoogleSignIn();
17 |
18 | Future socialLogin() async {
19 | if (kIsWeb) {
20 | // Once signed in, return the UserCredentialß
21 | var ac = await FirebaseAuth.instance
22 | .signInWithPopup(GoogleAuthProvider())
23 | .then((value) => value.credential?.accessToken);
24 | return ac ?? '';
25 | }
26 |
27 | await signOutWithGoogle().catchError((_) => null);
28 |
29 | final auth = await (await _googleSignIn.signIn())?.authentication;
30 |
31 | if (auth == null) {
32 | return '';
33 | }
34 | return auth.accessToken ?? '';
35 | }
36 |
37 | Future signOutWithGoogle() => _googleSignIn.signOut();
38 |
--------------------------------------------------------------------------------
/lib/custom_code/widgets/index.dart:
--------------------------------------------------------------------------------
1 | export 'progress_link.dart' show ProgressLink;
2 |
--------------------------------------------------------------------------------
/lib/custom_code/widgets/progress_link.dart:
--------------------------------------------------------------------------------
1 | // Automatic FlutterFlow imports
2 | import '/flutter_flow/flutter_flow_theme.dart';
3 | import '/flutter_flow/flutter_flow_util.dart';
4 | import 'index.dart'; // Imports other custom widgets
5 | import '/custom_code/actions/index.dart'; // Imports custom actions
6 | import '/flutter_flow/custom_functions.dart'; // Imports custom functions
7 | import 'package:flutter/material.dart';
8 | // Begin custom widget code
9 | // DO NOT REMOVE OR MODIFY THE CODE ABOVE!
10 |
11 | class ProgressLink extends StatefulWidget {
12 | const ProgressLink({
13 | Key? key,
14 | this.width,
15 | this.height,
16 | required this.index,
17 | required this.images,
18 | }) : super(key: key);
19 |
20 | final double? width;
21 | final double? height;
22 | final int index;
23 | final List images;
24 |
25 | @override
26 | _ProgressLinkState createState() => _ProgressLinkState();
27 | }
28 |
29 | class _ProgressLinkState extends State {
30 | @override
31 | Widget build(BuildContext context) {
32 | return Image.asset(
33 | widget.index % 2 == 0 ? widget.images[0] : widget.images[1],
34 | height: widget.height,
35 | fit: BoxFit.cover,
36 | );
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/lib/flutter_flow/custom_functions.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 | import 'dart:math' as math;
3 |
4 | import 'package:flutter/material.dart';
5 | import 'package:google_fonts/google_fonts.dart';
6 | import 'package:intl/intl.dart';
7 | import 'package:timeago/timeago.dart' as timeago;
8 | import 'lat_lng.dart';
9 | import 'place.dart';
10 | import 'uploaded_file.dart';
11 | import '/auth/firebase_auth/auth_util.dart';
12 |
13 | int getNextPage(String? nextPage) {
14 | return 0;
15 | }
16 |
--------------------------------------------------------------------------------
/lib/flutter_flow/firebase_remote_config_util.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_remote_config/firebase_remote_config.dart';
2 |
3 | Future initializeFirebaseRemoteConfig() async {
4 | await FirebaseRemoteConfig.instance.setConfigSettings(RemoteConfigSettings(
5 | fetchTimeout: const Duration(minutes: 1),
6 | minimumFetchInterval: const Duration(hours: 1),
7 | ));
8 | await FirebaseRemoteConfig.instance.setDefaults(const {
9 | 'APITOKEN': 'TESTaPITOKEN',
10 | });
11 | await FirebaseRemoteConfig.instance.fetchAndActivate();
12 | }
13 |
14 | String getRemoteConfigString(String key) =>
15 | FirebaseRemoteConfig.instance.getString(key);
16 |
17 | bool getRemoteConfigBool(String key) =>
18 | FirebaseRemoteConfig.instance.getBool(key);
19 |
20 | int getRemoteConfigInt(String key) => FirebaseRemoteConfig.instance.getInt(key);
21 |
22 | double getRemoteConfigDouble(String key) =>
23 | FirebaseRemoteConfig.instance.getDouble(key);
24 |
--------------------------------------------------------------------------------
/lib/flutter_flow/flutter_flow_animations.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_animate/flutter_animate.dart';
3 |
4 | enum AnimationTrigger {
5 | onPageLoad,
6 | onActionTrigger,
7 | }
8 |
9 | class AnimationInfo {
10 | AnimationInfo({
11 | required this.trigger,
12 | required this.effects,
13 | this.loop = false,
14 | this.reverse = false,
15 | this.applyInitialState = true,
16 | });
17 | final AnimationTrigger trigger;
18 | final List> effects;
19 | final bool applyInitialState;
20 | final bool loop;
21 | final bool reverse;
22 | late AnimationController controller;
23 | }
24 |
25 | void createAnimation(AnimationInfo animation, TickerProvider vsync) {
26 | final newController = AnimationController(vsync: vsync);
27 | animation.controller = newController;
28 | }
29 |
30 | void setupAnimations(Iterable animations, TickerProvider vsync) {
31 | animations.forEach((animation) => createAnimation(animation, vsync));
32 | }
33 |
34 | extension AnimatedWidgetExtension on Widget {
35 | Widget animateOnPageLoad(AnimationInfo animationInfo) => Animate(
36 | effects: animationInfo.effects,
37 | child: this,
38 | onPlay: (controller) => animationInfo.loop
39 | ? controller.repeat(reverse: animationInfo.reverse)
40 | : null,
41 | onComplete: (controller) => !animationInfo.loop && animationInfo.reverse
42 | ? controller.reverse()
43 | : null);
44 |
45 | Widget animateOnActionTrigger(
46 | AnimationInfo animationInfo, {
47 | bool hasBeenTriggered = false,
48 | }) =>
49 | hasBeenTriggered || animationInfo.applyInitialState
50 | ? Animate(
51 | controller: animationInfo.controller,
52 | autoPlay: false,
53 | effects: animationInfo.effects,
54 | child: this)
55 | : this;
56 | }
57 |
58 | class TiltEffect extends Effect {
59 | const TiltEffect({
60 | Duration? delay,
61 | Duration? duration,
62 | Curve? curve,
63 | Offset? begin,
64 | Offset? end,
65 | }) : super(
66 | delay: delay,
67 | duration: duration,
68 | curve: curve,
69 | begin: begin ?? const Offset(0.0, 0.0),
70 | end: end ?? const Offset(0.0, 0.0),
71 | );
72 |
73 | @override
74 | Widget build(
75 | BuildContext context,
76 | Widget child,
77 | AnimationController controller,
78 | EffectEntry entry,
79 | ) {
80 | Animation animation = buildAnimation(controller, entry);
81 | return getOptimizedBuilder(
82 | animation: animation,
83 | builder: (_, __) => Transform(
84 | transform: Matrix4.identity()
85 | ..setEntry(3, 2, 0.001)
86 | ..rotateX(animation.value.dx)
87 | ..rotateY(animation.value.dy),
88 | alignment: Alignment.center,
89 | child: child,
90 | ),
91 | );
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/lib/flutter_flow/flutter_flow_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:collection/collection.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter/scheduler.dart';
4 | import 'package:provider/provider.dart';
5 |
6 | Widget wrapWithModel({
7 | required T model,
8 | required Widget child,
9 | required VoidCallback updateCallback,
10 | bool updateOnChange = false,
11 | }) {
12 | // Set the component to optionally update the page on updates.
13 | model.setOnUpdate(
14 | onUpdate: updateCallback,
15 | updateOnChange: updateOnChange,
16 | );
17 | // Models for components within a page will be disposed by the page's model,
18 | // so we don't want the component widget to dispose them until the page is
19 | // itself disposed.
20 | model.disposeOnWidgetDisposal = false;
21 | // Wrap in a Provider so that the model can be accessed by the component.
22 | return Provider.value(
23 | value: model,
24 | child: child,
25 | );
26 | }
27 |
28 | T createModel(
29 | BuildContext context,
30 | T Function() defaultBuilder,
31 | ) {
32 | final model = context.read() ?? defaultBuilder();
33 | model._init(context);
34 | return model;
35 | }
36 |
37 | abstract class FlutterFlowModel {
38 | // Initialization methods
39 | bool _isInitialized = false;
40 | void initState(BuildContext context);
41 | void _init(BuildContext context) {
42 | if (!_isInitialized) {
43 | initState(context);
44 | _isInitialized = true;
45 | }
46 | }
47 |
48 | // Dispose methods
49 | // Whether to dispose this model when the corresponding widget is
50 | // disposed. By default this is true for pages and false for components,
51 | // as page/component models handle the disposal of their children.
52 | bool disposeOnWidgetDisposal = true;
53 | void dispose();
54 | void maybeDispose() {
55 | if (disposeOnWidgetDisposal) {
56 | dispose();
57 | }
58 | }
59 |
60 | // Whether to update the containing page / component on updates.
61 | bool updateOnChange = false;
62 | // Function to call when the model receives an update.
63 | VoidCallback _updateCallback = () {};
64 | void onUpdate() => updateOnChange ? _updateCallback() : () {};
65 | FlutterFlowModel setOnUpdate({
66 | bool updateOnChange = false,
67 | required VoidCallback onUpdate,
68 | }) =>
69 | this
70 | .._updateCallback = onUpdate
71 | ..updateOnChange = updateOnChange;
72 | // Update the containing page when this model received an update.
73 | void updatePage(VoidCallback callback) {
74 | callback();
75 | _updateCallback();
76 | }
77 | }
78 |
79 | class FlutterFlowDynamicModels {
80 | FlutterFlowDynamicModels(this.defaultBuilder);
81 |
82 | final T Function() defaultBuilder;
83 | final Map _childrenModels = {};
84 | final Map _childrenIndexes = {};
85 | Set? _activeKeys;
86 |
87 | T getModel(String uniqueKey, int index) {
88 | _updateActiveKeys(uniqueKey);
89 | _childrenIndexes[uniqueKey] = index;
90 | return _childrenModels[uniqueKey] ??= defaultBuilder();
91 | }
92 |
93 | List getValues(S? Function(T) getValue) {
94 | return _childrenIndexes.entries
95 | // Sort keys by index.
96 | .sorted((a, b) => a.value.compareTo(b.value))
97 | .where((e) => _childrenModels[e.key] != null)
98 | // Map each model to the desired value and return as list. In order
99 | // to preserve index order, rather than removing null values we provide
100 | // default values (for types with reasonable defaults).
101 | .map((e) => getValue(_childrenModels[e.key]!) ?? _getDefaultValue()!)
102 | .toList();
103 | }
104 |
105 | S? getValueAtIndex(int index, S? Function(T) getValue) {
106 | final uniqueKey =
107 | _childrenIndexes.entries.firstWhereOrNull((e) => e.value == index)?.key;
108 | return getValueForKey(uniqueKey, getValue);
109 | }
110 |
111 | S? getValueForKey(String? uniqueKey, S? Function(T) getValue) {
112 | final model = _childrenModels[uniqueKey];
113 | return model != null ? getValue(model) : null;
114 | }
115 |
116 | void dispose() => _childrenModels.values.forEach((model) => model.dispose());
117 |
118 | void _updateActiveKeys(String uniqueKey) {
119 | final shouldResetActiveKeys = _activeKeys == null;
120 | _activeKeys ??= {};
121 | _activeKeys!.add(uniqueKey);
122 |
123 | if (shouldResetActiveKeys) {
124 | // Add a post-frame callback to remove and dispose of unused models after
125 | // we're done building, then reset `_activeKeys` to null so we know to do
126 | // this again next build.
127 | SchedulerBinding.instance.addPostFrameCallback((_) {
128 | _childrenIndexes.removeWhere((k, _) => !_activeKeys!.contains(k));
129 | _childrenModels.keys
130 | .toSet()
131 | .difference(_activeKeys!)
132 | // Remove and dispose of unused models since they are not being used
133 | // elsewhere and would not otherwise be disposed.
134 | .forEach((k) => _childrenModels.remove(k)?.dispose());
135 | _activeKeys = null;
136 | });
137 | }
138 | }
139 | }
140 |
141 | T? _getDefaultValue() {
142 | switch (T) {
143 | case int:
144 | return 0 as T;
145 | case double:
146 | return 0.0 as T;
147 | case String:
148 | return '' as T;
149 | case bool:
150 | return false as T;
151 | default:
152 | return null as T;
153 | }
154 | }
155 |
156 | extension TextValidationExtensions on String? Function(BuildContext, String?)? {
157 | String? Function(String?)? asValidator(BuildContext context) =>
158 | this != null ? (val) => this!(context, val) : null;
159 | }
160 |
--------------------------------------------------------------------------------
/lib/flutter_flow/form_field_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 |
3 | class FormFieldController extends ValueNotifier {
4 | FormFieldController(this.initialValue) : super(initialValue);
5 |
6 | final T? initialValue;
7 |
8 | void reset() => value = initialValue;
9 | }
10 |
--------------------------------------------------------------------------------
/lib/flutter_flow/internationalization.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter/foundation.dart';
3 | import 'package:shared_preferences/shared_preferences.dart';
4 |
5 | const _kLocaleStorageKey = '__locale_key__';
6 |
7 | class FFLocalizations {
8 | FFLocalizations(this.locale);
9 |
10 | final Locale locale;
11 |
12 | static FFLocalizations of(BuildContext context) =>
13 | Localizations.of(context, FFLocalizations)!;
14 |
15 | static List languages() => ['en'];
16 |
17 | static late SharedPreferences _prefs;
18 | static Future initialize() async =>
19 | _prefs = await SharedPreferences.getInstance();
20 | static Future storeLocale(String locale) =>
21 | _prefs.setString(_kLocaleStorageKey, locale);
22 | static Locale? getStoredLocale() {
23 | final locale = _prefs.getString(_kLocaleStorageKey);
24 | return locale != null && locale.isNotEmpty ? createLocale(locale) : null;
25 | }
26 |
27 | String get languageCode => locale.toString();
28 | String? get languageShortCode =>
29 | _languagesWithShortCode.contains(locale.toString())
30 | ? '${locale.toString()}_short'
31 | : null;
32 | int get languageIndex => languages().contains(languageCode)
33 | ? languages().indexOf(languageCode)
34 | : 0;
35 |
36 | String getText(String key) =>
37 | (kTranslationsMap[key] ?? {})[locale.toString()] ?? '';
38 |
39 | String getVariableText({
40 | String? enText = '',
41 | }) =>
42 | [enText][languageIndex] ?? '';
43 |
44 | static const Set _languagesWithShortCode = {
45 | 'ar',
46 | 'az',
47 | 'ca',
48 | 'cs',
49 | 'da',
50 | 'de',
51 | 'dv',
52 | 'en',
53 | 'es',
54 | 'et',
55 | 'fi',
56 | 'fr',
57 | 'gr',
58 | 'he',
59 | 'hi',
60 | 'hu',
61 | 'it',
62 | 'km',
63 | 'ku',
64 | 'mn',
65 | 'ms',
66 | 'no',
67 | 'pt',
68 | 'ro',
69 | 'ru',
70 | 'rw',
71 | 'sv',
72 | 'th',
73 | 'uk',
74 | 'vi',
75 | };
76 | }
77 |
78 | class FFLocalizationsDelegate extends LocalizationsDelegate {
79 | const FFLocalizationsDelegate();
80 |
81 | @override
82 | bool isSupported(Locale locale) {
83 | final language = locale.toString();
84 | return FFLocalizations.languages().contains(
85 | language.endsWith('_')
86 | ? language.substring(0, language.length - 1)
87 | : language,
88 | );
89 | }
90 |
91 | @override
92 | Future load(Locale locale) =>
93 | SynchronousFuture(FFLocalizations(locale));
94 |
95 | @override
96 | bool shouldReload(FFLocalizationsDelegate old) => false;
97 | }
98 |
99 | Locale createLocale(String language) => language.contains('_')
100 | ? Locale.fromSubtags(
101 | languageCode: language.split('_').first,
102 | scriptCode: language.split('_').last,
103 | )
104 | : Locale(language);
105 |
106 | final kTranslationsMap =
107 |