├── .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 | >>[].reduce((a, b) => a..addAll(b)); 108 | -------------------------------------------------------------------------------- /lib/flutter_flow/lat_lng.dart: -------------------------------------------------------------------------------- 1 | class LatLng { 2 | const LatLng(this.latitude, this.longitude); 3 | final double latitude; 4 | final double longitude; 5 | 6 | @override 7 | String toString() => 'LatLng(lat: $latitude, lng: $longitude)'; 8 | 9 | String serialize() => '$latitude,$longitude'; 10 | 11 | @override 12 | int get hashCode => latitude.hashCode + longitude.hashCode; 13 | 14 | @override 15 | bool operator ==(other) => 16 | other is LatLng && 17 | latitude == other.latitude && 18 | longitude == other.longitude; 19 | } 20 | -------------------------------------------------------------------------------- /lib/flutter_flow/place.dart: -------------------------------------------------------------------------------- 1 | import 'lat_lng.dart'; 2 | 3 | class FFPlace { 4 | const FFPlace({ 5 | this.latLng = const LatLng(0.0, 0.0), 6 | this.name = '', 7 | this.address = '', 8 | this.city = '', 9 | this.state = '', 10 | this.country = '', 11 | this.zipCode = '', 12 | }); 13 | 14 | final LatLng latLng; 15 | final String name; 16 | final String address; 17 | final String city; 18 | final String state; 19 | final String country; 20 | final String zipCode; 21 | 22 | @override 23 | String toString() => '''FFPlace( 24 | latLng: $latLng, 25 | name: $name, 26 | address: $address, 27 | city: $city, 28 | state: $state, 29 | country: $country, 30 | zipCode: $zipCode, 31 | )'''; 32 | 33 | @override 34 | int get hashCode => latLng.hashCode; 35 | 36 | @override 37 | bool operator ==(other) => 38 | other is FFPlace && 39 | latLng == other.latLng && 40 | name == other.name && 41 | address == other.address && 42 | city == other.city && 43 | state == other.state && 44 | country == other.country && 45 | zipCode == other.zipCode; 46 | } 47 | -------------------------------------------------------------------------------- /lib/flutter_flow/random_data_util.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | final _random = Random(); 6 | 7 | int randomInteger(int min, int max) { 8 | return _random.nextInt(max - min + 1) + min; 9 | } 10 | 11 | double randomDouble(double min, double max) { 12 | return _random.nextDouble() * (max - min) + min; 13 | } 14 | 15 | String randomString( 16 | int minLength, 17 | int maxLength, 18 | bool lowercaseAz, 19 | bool uppercaseAz, 20 | bool digits, 21 | ) { 22 | var chars = ''; 23 | if (lowercaseAz) { 24 | chars += 'abcdefghijklmnopqrstuvwxyz'; 25 | } 26 | if (uppercaseAz) { 27 | chars += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 28 | } 29 | if (digits) { 30 | chars += '0123456789'; 31 | } 32 | return List.generate(randomInteger(minLength, maxLength), 33 | (index) => chars[_random.nextInt(chars.length)]).join(); 34 | } 35 | 36 | // Random date between 1970 and 2025. 37 | DateTime randomDate() { 38 | // Random max must be in range 0 < max <= 2^32. 39 | // So we have to generate the time in seconds and then convert to milliseconds. 40 | return DateTime.fromMillisecondsSinceEpoch( 41 | randomInteger(0, 1735689600) * 1000); 42 | } 43 | 44 | String randomImageUrl(int width, int height) { 45 | return 'https://picsum.photos/seed/${_random.nextInt(1000)}/$width/$height'; 46 | } 47 | 48 | Color randomColor() { 49 | return Color.fromARGB( 50 | 255, _random.nextInt(255), _random.nextInt(255), _random.nextInt(255)); 51 | } 52 | -------------------------------------------------------------------------------- /lib/flutter_flow/request_manager.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: close_sinks 2 | 3 | import 'dart:async'; 4 | 5 | import 'package:rxdart/rxdart.dart'; 6 | import 'package:rxdart/subjects.dart'; 7 | 8 | class FutureRequestManager { 9 | FutureRequestManager([this.cacheLimit = 10]); 10 | 11 | final int cacheLimit; 12 | Map> _requests = {}; 13 | Future performRequest({ 14 | String? uniqueQueryKey, 15 | bool? overrideCache, 16 | required Future Function() requestFn, 17 | }) { 18 | uniqueQueryKey = _requestKey(uniqueQueryKey); 19 | overrideCache ??= false; 20 | 21 | // If we don't want to use the cache, clear it for this request. 22 | if (overrideCache) { 23 | clearRequest(uniqueQueryKey); 24 | } 25 | // Remove the first cached result if we have reached the specified limit, 26 | // since we will be adding another. 27 | if (!_requests.containsKey(uniqueQueryKey) && 28 | _requests.length >= cacheLimit) { 29 | _requests.remove(_requests.keys.first); 30 | } 31 | // Return the cached query result or set it to the new value. 32 | return _requests[uniqueQueryKey] ??= requestFn(); 33 | } 34 | 35 | void clearRequest(String? key) => _requests.remove(_requestKey(key)); 36 | 37 | void clear() => _requests.keys.toList().forEach(clearRequest); 38 | } 39 | 40 | class StreamRequestManager { 41 | StreamRequestManager([this.cacheLimit = 10]); 42 | 43 | final int cacheLimit; 44 | Map> _streamSubjects = {}; 45 | Map> _requestSubscriptions = {}; 46 | Stream performRequest({ 47 | String? uniqueQueryKey, 48 | bool? overrideCache, 49 | required Stream Function() requestFn, 50 | }) { 51 | uniqueQueryKey = _requestKey(uniqueQueryKey); 52 | overrideCache ??= false; 53 | 54 | // If we don't want to use the cache, clear it for this request. 55 | if (overrideCache) { 56 | clearRequest(uniqueQueryKey); 57 | } 58 | 59 | // If this request was made previously, return its value stream. 60 | if (_streamSubjects.containsKey(uniqueQueryKey)) { 61 | return _streamSubjects[uniqueQueryKey]!.stream; 62 | } 63 | 64 | // Remove the first cached result if we have reached the specified limit, 65 | // since we will be adding another. 66 | if (_streamSubjects.isNotEmpty && _streamSubjects.length >= cacheLimit) { 67 | clearRequest(_streamSubjects.keys.first); 68 | } 69 | 70 | // Create a subscription that stores the latest result in the behavior subject. 71 | final streamSubject = BehaviorSubject(); 72 | _requestSubscriptions[uniqueQueryKey] = requestFn() 73 | .asBroadcastStream() 74 | .listen((result) => streamSubject.add(result)); 75 | _streamSubjects[uniqueQueryKey] = streamSubject; 76 | 77 | return streamSubject.stream; 78 | } 79 | 80 | void clearRequest(String? key) { 81 | key = _requestKey(key); 82 | _streamSubjects.remove(key)?.close(); 83 | _requestSubscriptions.remove(key)?.cancel(); 84 | } 85 | 86 | void clear() => { 87 | ..._streamSubjects.keys, 88 | ..._requestSubscriptions.keys, 89 | }.forEach(clearRequest); 90 | } 91 | 92 | String _requestKey(String? key) => 93 | key == null || key.isEmpty ? '__DEFAULT_KEY__' : key; 94 | -------------------------------------------------------------------------------- /lib/flutter_flow/uploaded_file.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:typed_data' show Uint8List; 3 | 4 | class FFUploadedFile { 5 | const FFUploadedFile({ 6 | this.name, 7 | this.bytes, 8 | this.height, 9 | this.width, 10 | this.blurHash, 11 | }); 12 | 13 | final String? name; 14 | final Uint8List? bytes; 15 | final double? height; 16 | final double? width; 17 | final String? blurHash; 18 | 19 | @override 20 | String toString() => 21 | 'FFUploadedFile(name: $name, bytes: ${bytes?.length ?? 0}, height: $height, width: $width, blurHash: $blurHash,)'; 22 | 23 | String serialize() => jsonEncode( 24 | { 25 | 'name': name, 26 | 'bytes': bytes, 27 | 'height': height, 28 | 'width': width, 29 | 'blurHash': blurHash, 30 | }, 31 | ); 32 | 33 | static FFUploadedFile deserialize(String val) { 34 | final serializedData = jsonDecode(val) as Map; 35 | final data = { 36 | 'name': serializedData['name'] ?? '', 37 | 'bytes': serializedData['bytes'] ?? Uint8List.fromList([]), 38 | 'height': serializedData['height'], 39 | 'width': serializedData['width'], 40 | 'blurHash': serializedData['blurHash'], 41 | }; 42 | return FFUploadedFile( 43 | name: data['name'] as String, 44 | bytes: data['bytes'] as Uint8List, 45 | height: data['height'] as double?, 46 | width: data['width'] as double?, 47 | blurHash: data['blurHash'] as String?, 48 | ); 49 | } 50 | 51 | @override 52 | int get hashCode => Object.hash( 53 | name, 54 | bytes, 55 | height, 56 | width, 57 | blurHash, 58 | ); 59 | 60 | @override 61 | bool operator ==(other) => 62 | other is FFUploadedFile && 63 | name == other.name && 64 | bytes == other.bytes && 65 | height == other.height && 66 | width == other.width && 67 | blurHash == other.blurHash; 68 | } 69 | -------------------------------------------------------------------------------- /lib/index.dart: -------------------------------------------------------------------------------- 1 | // Export pages 2 | export '/src/onboarding/splash_screen/splash_screen_widget.dart' 3 | show SplashScreenWidget; 4 | export '/src/home/home_page_no_login/home_page_no_login_widget.dart' 5 | show HomePageNoLoginWidget; 6 | export '/src/home/home_page_logged_in/home_page_logged_in_widget.dart' 7 | show HomePageLoggedInWidget; 8 | export '/src/home/feeds_page/feeds_page_widget.dart' show FeedsPageWidget; 9 | export '/src/home/about_page/about_page_widget.dart' show AboutPageWidget; 10 | export '/src/home/sessions_page/sessions_page_widget.dart' 11 | show SessionsPageWidget; 12 | export '/src/speakers/speaker_page/speaker_page_widget.dart' 13 | show SpeakerPageWidget; 14 | export '/src/sessions/session_details_page/session_details_page_widget.dart' 15 | show SessionDetailsPageWidget; 16 | export '/src/feedback_page/feedback_page/feedback_page_widget.dart' 17 | show FeedbackPageWidget; 18 | export '/src/speakers/all_speakers_page/all_speakers_page_widget.dart' 19 | show AllSpeakersPageWidget; 20 | export '/src/auth/reset_password_confirmation_page/reset_password_confirmation_page_widget.dart' 21 | show ResetPasswordConfirmationPageWidget; 22 | export '/src/auth/reset_password_page/reset_password_page_widget.dart' 23 | show ResetPasswordPageWidget; 24 | export '/src/auth/sign_in_page/sign_in_page_widget.dart' show SignInPageWidget; 25 | export '/src/auth/sign_in_up_page/sign_in_up_page_widget.dart' 26 | show SignInUpPageWidget; 27 | -------------------------------------------------------------------------------- /lib/src/auth/reset_password_confirmation_page/reset_password_confirmation_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | 10 | class ResetPasswordConfirmationPageModel extends FlutterFlowModel { 11 | /// Initialization and disposal methods. 12 | 13 | void initState(BuildContext context) {} 14 | 15 | void dispose() {} 16 | 17 | /// Action blocks are added here. 18 | 19 | /// Additional helper methods are added here. 20 | } 21 | -------------------------------------------------------------------------------- /lib/src/auth/reset_password_page/reset_password_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | 10 | class ResetPasswordPageModel extends FlutterFlowModel { 11 | /// State fields for stateful widgets in this page. 12 | 13 | // State field(s) for emailAddress widget. 14 | TextEditingController? emailAddressController; 15 | String? Function(BuildContext, String?)? emailAddressControllerValidator; 16 | 17 | /// Initialization and disposal methods. 18 | 19 | void initState(BuildContext context) {} 20 | 21 | void dispose() { 22 | emailAddressController?.dispose(); 23 | } 24 | 25 | /// Action blocks are added here. 26 | 27 | /// Additional helper methods are added here. 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/auth/sign_in_page/sign_in_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | 10 | class SignInPageModel extends FlutterFlowModel { 11 | /// State fields for stateful widgets in this page. 12 | 13 | final unfocusNode = FocusNode(); 14 | // State field(s) for emailAddress widget. 15 | TextEditingController? emailAddressController; 16 | String? Function(BuildContext, String?)? emailAddressControllerValidator; 17 | // State field(s) for password widget. 18 | TextEditingController? passwordController; 19 | late bool passwordVisibility; 20 | String? Function(BuildContext, String?)? passwordControllerValidator; 21 | 22 | /// Initialization and disposal methods. 23 | 24 | void initState(BuildContext context) { 25 | passwordVisibility = false; 26 | } 27 | 28 | void dispose() { 29 | unfocusNode.dispose(); 30 | emailAddressController?.dispose(); 31 | passwordController?.dispose(); 32 | } 33 | 34 | /// Action blocks are added here. 35 | 36 | /// Additional helper methods are added here. 37 | } 38 | -------------------------------------------------------------------------------- /lib/src/auth/sign_in_up_page/sign_in_up_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | 10 | class SignInUpPageModel extends FlutterFlowModel { 11 | /// State fields for stateful widgets in this page. 12 | 13 | final unfocusNode = FocusNode(); 14 | // State field(s) for username widget. 15 | TextEditingController? usernameController; 16 | String? Function(BuildContext, String?)? usernameControllerValidator; 17 | // State field(s) for emailAddress widget. 18 | TextEditingController? emailAddressController; 19 | String? Function(BuildContext, String?)? emailAddressControllerValidator; 20 | // State field(s) for password widget. 21 | TextEditingController? passwordController1; 22 | late bool passwordVisibility1; 23 | String? Function(BuildContext, String?)? passwordController1Validator; 24 | // State field(s) for password widget. 25 | TextEditingController? passwordController2; 26 | late bool passwordVisibility2; 27 | String? Function(BuildContext, String?)? passwordController2Validator; 28 | 29 | /// Initialization and disposal methods. 30 | 31 | void initState(BuildContext context) { 32 | passwordVisibility1 = false; 33 | passwordVisibility2 = false; 34 | } 35 | 36 | void dispose() { 37 | unfocusNode.dispose(); 38 | usernameController?.dispose(); 39 | emailAddressController?.dispose(); 40 | passwordController1?.dispose(); 41 | passwordController2?.dispose(); 42 | } 43 | 44 | /// Action blocks are added here. 45 | 46 | /// Additional helper methods are added here. 47 | } 48 | -------------------------------------------------------------------------------- /lib/src/feedback_page/feedback_page/feedback_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import '/src/modals/feedback_dialog/feedback_dialog_widget.dart'; 5 | import 'package:aligned_dialog/aligned_dialog.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 8 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 9 | import 'package:google_fonts/google_fonts.dart'; 10 | import 'package:provider/provider.dart'; 11 | 12 | class FeedbackPageModel extends FlutterFlowModel { 13 | /// State fields for stateful widgets in this page. 14 | 15 | final unfocusNode = FocusNode(); 16 | // State field(s) for TextField widget. 17 | TextEditingController? textController; 18 | String? Function(BuildContext, String?)? textControllerValidator; 19 | 20 | /// Initialization and disposal methods. 21 | 22 | void initState(BuildContext context) {} 23 | 24 | void dispose() { 25 | unfocusNode.dispose(); 26 | textController?.dispose(); 27 | } 28 | 29 | /// Action blocks are added here. 30 | 31 | /// Additional helper methods are added here. 32 | } 33 | -------------------------------------------------------------------------------- /lib/src/home/about_page/about_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/header_component/header_component_widget.dart'; 4 | import '/src/widgets/organisedby_component/organisedby_component_widget.dart'; 5 | import '/src/widgets/organizers_component/organizers_component_widget.dart'; 6 | import '/flutter_flow/random_data_util.dart' as random_data; 7 | import 'package:flutter/material.dart'; 8 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 9 | import 'package:google_fonts/google_fonts.dart'; 10 | import 'package:provider/provider.dart'; 11 | 12 | class AboutPageModel extends FlutterFlowModel { 13 | /// State fields for stateful widgets in this page. 14 | 15 | final unfocusNode = FocusNode(); 16 | // Model for header_component component. 17 | late HeaderComponentModel headerComponentModel; 18 | // Model for organisedby_component component. 19 | late OrganisedbyComponentModel organisedbyComponentModel; 20 | 21 | /// Initialization and disposal methods. 22 | 23 | void initState(BuildContext context) { 24 | headerComponentModel = createModel(context, () => HeaderComponentModel()); 25 | organisedbyComponentModel = 26 | createModel(context, () => OrganisedbyComponentModel()); 27 | } 28 | 29 | void dispose() { 30 | unfocusNode.dispose(); 31 | headerComponentModel.dispose(); 32 | organisedbyComponentModel.dispose(); 33 | } 34 | 35 | /// Action blocks are added here. 36 | 37 | /// Additional helper methods are added here. 38 | } 39 | -------------------------------------------------------------------------------- /lib/src/home/feeds_page/feeds_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/feeds_cards_component/feeds_cards_component_widget.dart'; 4 | import '/src/widgets/header_component/header_component_widget.dart'; 5 | import '/flutter_flow/random_data_util.dart' as random_data; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 8 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 9 | import 'package:google_fonts/google_fonts.dart'; 10 | import 'package:provider/provider.dart'; 11 | 12 | class FeedsPageModel extends FlutterFlowModel { 13 | /// State fields for stateful widgets in this page. 14 | 15 | final unfocusNode = FocusNode(); 16 | // Model for header_component component. 17 | late HeaderComponentModel headerComponentModel; 18 | 19 | /// Initialization and disposal methods. 20 | 21 | void initState(BuildContext context) { 22 | headerComponentModel = createModel(context, () => HeaderComponentModel()); 23 | } 24 | 25 | void dispose() { 26 | unfocusNode.dispose(); 27 | headerComponentModel.dispose(); 28 | } 29 | 30 | /// Action blocks are added here. 31 | 32 | /// Additional helper methods are added here. 33 | } 34 | -------------------------------------------------------------------------------- /lib/src/home/feeds_page/feeds_page_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/feeds_cards_component/feeds_cards_component_widget.dart'; 4 | import '/src/widgets/header_component/header_component_widget.dart'; 5 | import '/flutter_flow/random_data_util.dart' as random_data; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 8 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 9 | import 'package:google_fonts/google_fonts.dart'; 10 | import 'package:provider/provider.dart'; 11 | import 'feeds_page_model.dart'; 12 | export 'feeds_page_model.dart'; 13 | 14 | class FeedsPageWidget extends StatefulWidget { 15 | const FeedsPageWidget({Key? key}) : super(key: key); 16 | 17 | @override 18 | _FeedsPageWidgetState createState() => _FeedsPageWidgetState(); 19 | } 20 | 21 | class _FeedsPageWidgetState extends State { 22 | late FeedsPageModel _model; 23 | 24 | final scaffoldKey = GlobalKey(); 25 | 26 | @override 27 | void initState() { 28 | super.initState(); 29 | _model = createModel(context, () => FeedsPageModel()); 30 | 31 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 32 | } 33 | 34 | @override 35 | void dispose() { 36 | _model.dispose(); 37 | 38 | super.dispose(); 39 | } 40 | 41 | @override 42 | Widget build(BuildContext context) { 43 | context.watch(); 44 | 45 | return GestureDetector( 46 | onTap: () => FocusScope.of(context).requestFocus(_model.unfocusNode), 47 | child: Scaffold( 48 | key: scaffoldKey, 49 | backgroundColor: Colors.white, 50 | body: SafeArea( 51 | top: true, 52 | child: Padding( 53 | padding: EdgeInsetsDirectional.fromSTEB(20.0, 20.0, 20.0, 20.0), 54 | child: Column( 55 | mainAxisSize: MainAxisSize.max, 56 | children: [ 57 | Padding( 58 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 14.0), 59 | child: wrapWithModel( 60 | model: _model.headerComponentModel, 61 | updateCallback: () => setState(() {}), 62 | child: HeaderComponentWidget(), 63 | ), 64 | ), 65 | Divider( 66 | thickness: 1.0, 67 | ), 68 | Expanded( 69 | child: Builder( 70 | builder: (context) { 71 | final feedsList = List.generate( 72 | random_data.randomInteger(6, 7), 73 | (index) => random_data.randomInteger(0, 10)) 74 | .toList() 75 | .take(7) 76 | .toList(); 77 | return ListView.builder( 78 | padding: EdgeInsets.zero, 79 | shrinkWrap: true, 80 | scrollDirection: Axis.vertical, 81 | itemCount: feedsList.length, 82 | itemBuilder: (context, feedsListIndex) { 83 | final feedsListItem = feedsList[feedsListIndex]; 84 | return FeedsCardsComponentWidget( 85 | key: Key( 86 | 'Key3cz_${feedsListIndex}_of_${feedsList.length}'), 87 | ); 88 | }, 89 | ); 90 | }, 91 | ), 92 | ), 93 | ], 94 | ), 95 | ), 96 | ), 97 | ), 98 | ); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /lib/src/home/home_page_logged_in/home_page_logged_in_model.dart: -------------------------------------------------------------------------------- 1 | import '/backend/api_requests/api_calls.dart'; 2 | import '/flutter_flow/flutter_flow_theme.dart'; 3 | import '/flutter_flow/flutter_flow_util.dart'; 4 | import '/src/widgets/header_component/header_component_widget.dart'; 5 | import '/src/widgets/organisedby_component/organisedby_component_widget.dart'; 6 | import '/src/widgets/sessions_list_component/sessions_list_component_widget.dart'; 7 | import '/src/widgets/speakers_component/speakers_component_widget.dart'; 8 | import '/src/widgets/sponsors_component/sponsors_component_widget.dart'; 9 | import 'package:flutter/material.dart'; 10 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 11 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 12 | import 'package:google_fonts/google_fonts.dart'; 13 | import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; 14 | import 'package:provider/provider.dart'; 15 | 16 | class HomePageLoggedInModel extends FlutterFlowModel { 17 | /// State fields for stateful widgets in this page. 18 | 19 | final unfocusNode = FocusNode(); 20 | // Model for header_component component. 21 | late HeaderComponentModel headerComponentModel; 22 | // Model for sessionsListComponent component. 23 | late SessionsListComponentModel sessionsListComponentModel; 24 | // State field(s) for ListView widget. 25 | PagingController? pagingController; 26 | // Model for sponsors_component component. 27 | late SponsorsComponentModel sponsorsComponentModel; 28 | // Model for organisedby_component component. 29 | late OrganisedbyComponentModel organisedbyComponentModel; 30 | 31 | /// Initialization and disposal methods. 32 | 33 | void initState(BuildContext context) { 34 | headerComponentModel = createModel(context, () => HeaderComponentModel()); 35 | sessionsListComponentModel = 36 | createModel(context, () => SessionsListComponentModel()); 37 | sponsorsComponentModel = 38 | createModel(context, () => SponsorsComponentModel()); 39 | organisedbyComponentModel = 40 | createModel(context, () => OrganisedbyComponentModel()); 41 | } 42 | 43 | void dispose() { 44 | unfocusNode.dispose(); 45 | headerComponentModel.dispose(); 46 | sessionsListComponentModel.dispose(); 47 | sponsorsComponentModel.dispose(); 48 | organisedbyComponentModel.dispose(); 49 | } 50 | 51 | /// Action blocks are added here. 52 | 53 | /// Additional helper methods are added here. 54 | } 55 | -------------------------------------------------------------------------------- /lib/src/home/home_page_no_login/home_page_no_login_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/modals/google_sign_in_dialog/google_sign_in_dialog_widget.dart'; 4 | import '/src/widgets/organisedby_component/organisedby_component_widget.dart'; 5 | import '/src/widgets/sponsors_component/sponsors_component_widget.dart'; 6 | import 'package:aligned_dialog/aligned_dialog.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 9 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 10 | import 'package:google_fonts/google_fonts.dart'; 11 | import 'package:provider/provider.dart'; 12 | 13 | class HomePageNoLoginModel extends FlutterFlowModel { 14 | /// State fields for stateful widgets in this page. 15 | 16 | final unfocusNode = FocusNode(); 17 | // Model for sponsors_component component. 18 | late SponsorsComponentModel sponsorsComponentModel; 19 | // Model for organisedby_component component. 20 | late OrganisedbyComponentModel organisedbyComponentModel; 21 | 22 | /// Initialization and disposal methods. 23 | 24 | void initState(BuildContext context) { 25 | sponsorsComponentModel = 26 | createModel(context, () => SponsorsComponentModel()); 27 | organisedbyComponentModel = 28 | createModel(context, () => OrganisedbyComponentModel()); 29 | } 30 | 31 | void dispose() { 32 | unfocusNode.dispose(); 33 | sponsorsComponentModel.dispose(); 34 | organisedbyComponentModel.dispose(); 35 | } 36 | 37 | /// Action blocks are added here. 38 | 39 | /// Additional helper methods are added here. 40 | } 41 | -------------------------------------------------------------------------------- /lib/src/home/sessions_page/sessions_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/sesion_header_component/sesion_header_component_widget.dart'; 4 | import '/src/widgets/session_date_component/session_date_component_widget.dart'; 5 | import '/flutter_flow/random_data_util.dart' as random_data; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 8 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 9 | import 'package:google_fonts/google_fonts.dart'; 10 | import 'package:provider/provider.dart'; 11 | 12 | class SessionsPageModel extends FlutterFlowModel { 13 | /// Local state fields for this page. 14 | 15 | bool mySessions = false; 16 | 17 | /// State fields for stateful widgets in this page. 18 | 19 | final unfocusNode = FocusNode(); 20 | // Model for sesion_header_component component. 21 | late SesionHeaderComponentModel sesionHeaderComponentModel; 22 | // Model for session_date_component component. 23 | late SessionDateComponentModel sessionDateComponentModel1; 24 | // Model for session_date_component component. 25 | late SessionDateComponentModel sessionDateComponentModel2; 26 | // Model for session_date_component component. 27 | late SessionDateComponentModel sessionDateComponentModel3; 28 | // State field(s) for Switch widget. 29 | bool? switchValue; 30 | 31 | /// Initialization and disposal methods. 32 | 33 | void initState(BuildContext context) { 34 | sesionHeaderComponentModel = 35 | createModel(context, () => SesionHeaderComponentModel()); 36 | sessionDateComponentModel1 = 37 | createModel(context, () => SessionDateComponentModel()); 38 | sessionDateComponentModel2 = 39 | createModel(context, () => SessionDateComponentModel()); 40 | sessionDateComponentModel3 = 41 | createModel(context, () => SessionDateComponentModel()); 42 | } 43 | 44 | void dispose() { 45 | unfocusNode.dispose(); 46 | sesionHeaderComponentModel.dispose(); 47 | sessionDateComponentModel1.dispose(); 48 | sessionDateComponentModel2.dispose(); 49 | sessionDateComponentModel3.dispose(); 50 | } 51 | 52 | /// Action blocks are added here. 53 | 54 | /// Additional helper methods are added here. 55 | } 56 | -------------------------------------------------------------------------------- /lib/src/modals/feedback_dialog/feedback_dialog_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class FeedbackDialogModel extends FlutterFlowModel { 10 | /// Initialization and disposal methods. 11 | 12 | void initState(BuildContext context) {} 13 | 14 | void dispose() {} 15 | 16 | /// Action blocks are added here. 17 | 18 | /// Additional helper methods are added here. 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/modals/feedback_dialog/feedback_dialog_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'feedback_dialog_model.dart'; 9 | export 'feedback_dialog_model.dart'; 10 | 11 | class FeedbackDialogWidget extends StatefulWidget { 12 | const FeedbackDialogWidget({Key? key}) : super(key: key); 13 | 14 | @override 15 | _FeedbackDialogWidgetState createState() => _FeedbackDialogWidgetState(); 16 | } 17 | 18 | class _FeedbackDialogWidgetState extends State { 19 | late FeedbackDialogModel _model; 20 | 21 | @override 22 | void setState(VoidCallback callback) { 23 | super.setState(callback); 24 | _model.onUpdate(); 25 | } 26 | 27 | @override 28 | void initState() { 29 | super.initState(); 30 | _model = createModel(context, () => FeedbackDialogModel()); 31 | 32 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 33 | } 34 | 35 | @override 36 | void dispose() { 37 | _model.maybeDispose(); 38 | 39 | super.dispose(); 40 | } 41 | 42 | @override 43 | Widget build(BuildContext context) { 44 | context.watch(); 45 | 46 | return Container( 47 | width: 315.0, 48 | height: 367.0, 49 | decoration: BoxDecoration( 50 | color: FlutterFlowTheme.of(context).secondaryBackground, 51 | borderRadius: BorderRadius.circular(12.0), 52 | ), 53 | child: Column( 54 | mainAxisSize: MainAxisSize.max, 55 | children: [ 56 | Padding( 57 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 42.0, 0.0, 0.0), 58 | child: Text( 59 | ' 🎉', 60 | style: FlutterFlowTheme.of(context).bodyMedium.override( 61 | fontFamily: 'Montserrat', 62 | fontSize: 116.0, 63 | ), 64 | ), 65 | ), 66 | Container( 67 | width: 136.0, 68 | decoration: BoxDecoration( 69 | color: FlutterFlowTheme.of(context).secondaryBackground, 70 | ), 71 | child: Padding( 72 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 0.0, 0.0), 73 | child: Text( 74 | 'Thank you for your feedback', 75 | textAlign: TextAlign.center, 76 | style: FlutterFlowTheme.of(context).bodyMedium.override( 77 | fontFamily: 'Montserrat', 78 | fontSize: 18.0, 79 | fontWeight: FontWeight.bold, 80 | ), 81 | ), 82 | ), 83 | ), 84 | Padding( 85 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 26.0, 0.0, 0.0), 86 | child: FFButtonWidget( 87 | onPressed: () async { 88 | context.safePop(); 89 | }, 90 | text: 'Okay', 91 | options: FFButtonOptions( 92 | width: 130.0, 93 | height: 40.0, 94 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), 95 | iconPadding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), 96 | color: Color(0xFF000CEB), 97 | textStyle: FlutterFlowTheme.of(context).titleSmall.override( 98 | fontFamily: 'Montserrat', 99 | color: Colors.white, 100 | fontWeight: FontWeight.w600, 101 | ), 102 | elevation: 2.0, 103 | borderSide: BorderSide( 104 | color: Colors.transparent, 105 | width: 1.0, 106 | ), 107 | borderRadius: BorderRadius.circular(8.0), 108 | ), 109 | ), 110 | ), 111 | ], 112 | ), 113 | ); 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /lib/src/modals/filter_component/filter_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class FilterComponentModel extends FlutterFlowModel { 10 | /// Local state fields for this component. 11 | 12 | List tappedItem = []; 13 | void addToTappedItem(String item) => tappedItem.add(item); 14 | void removeFromTappedItem(String item) => tappedItem.remove(item); 15 | void removeAtIndexFromTappedItem(int index) => tappedItem.removeAt(index); 16 | void updateTappedItemAtIndex(int index, Function(String) updateFn) => 17 | tappedItem[index] = updateFn(tappedItem[index]); 18 | 19 | /// Initialization and disposal methods. 20 | 21 | void initState(BuildContext context) {} 22 | 23 | void dispose() {} 24 | 25 | /// Action blocks are added here. 26 | 27 | /// Additional helper methods are added here. 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/modals/google_sign_in_dialog/google_sign_in_dialog_model.dart: -------------------------------------------------------------------------------- 1 | import '/backend/api_requests/api_calls.dart'; 2 | import '/flutter_flow/flutter_flow_animations.dart'; 3 | import '/flutter_flow/flutter_flow_theme.dart'; 4 | import '/flutter_flow/flutter_flow_util.dart'; 5 | import '/custom_code/actions/index.dart' as actions; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter/scheduler.dart'; 8 | import 'package:flutter_animate/flutter_animate.dart'; 9 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 10 | import 'package:google_fonts/google_fonts.dart'; 11 | import 'package:provider/provider.dart'; 12 | 13 | class GoogleSignInDialogModel extends FlutterFlowModel { 14 | /// Local state fields for this component. 15 | 16 | bool tapped = false; 17 | 18 | /// State fields for stateful widgets in this component. 19 | 20 | // Stores action output result for [Custom Action - socialLogin] action in Container widget. 21 | String? authenticationAccessToken; 22 | // Stores action output result for [Backend Call - API (Social Login)] action in Container widget. 23 | ApiCallResponse? loginApiResponse; 24 | 25 | /// Initialization and disposal methods. 26 | 27 | void initState(BuildContext context) {} 28 | 29 | void dispose() {} 30 | 31 | /// Action blocks are added here. 32 | 33 | /// Additional helper methods are added here. 34 | } 35 | -------------------------------------------------------------------------------- /lib/src/modals/share_modal/share_modal_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class ShareModalModel extends FlutterFlowModel { 10 | /// Initialization and disposal methods. 11 | 12 | void initState(BuildContext context) {} 13 | 14 | void dispose() {} 15 | 16 | /// Action blocks are added here. 17 | 18 | /// Additional helper methods are added here. 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/onboarding/splash_screen/splash_screen_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/scheduler.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class SplashScreenModel extends FlutterFlowModel { 10 | /// State fields for stateful widgets in this page. 11 | 12 | final unfocusNode = FocusNode(); 13 | 14 | /// Initialization and disposal methods. 15 | 16 | void initState(BuildContext context) {} 17 | 18 | void dispose() { 19 | unfocusNode.dispose(); 20 | } 21 | 22 | /// Action blocks are added here. 23 | 24 | /// Additional helper methods are added here. 25 | } 26 | -------------------------------------------------------------------------------- /lib/src/onboarding/splash_screen/splash_screen_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/scheduler.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'splash_screen_model.dart'; 9 | export 'splash_screen_model.dart'; 10 | 11 | class SplashScreenWidget extends StatefulWidget { 12 | const SplashScreenWidget({Key? key}) : super(key: key); 13 | 14 | @override 15 | _SplashScreenWidgetState createState() => _SplashScreenWidgetState(); 16 | } 17 | 18 | class _SplashScreenWidgetState extends State { 19 | late SplashScreenModel _model; 20 | 21 | final scaffoldKey = GlobalKey(); 22 | 23 | @override 24 | void initState() { 25 | super.initState(); 26 | _model = createModel(context, () => SplashScreenModel()); 27 | 28 | // On page load action. 29 | SchedulerBinding.instance.addPostFrameCallback((_) async { 30 | await Future.delayed(const Duration(milliseconds: 3000)); 31 | 32 | context.pushNamed('home_page_no_login'); 33 | }); 34 | 35 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 36 | } 37 | 38 | @override 39 | void dispose() { 40 | _model.dispose(); 41 | 42 | super.dispose(); 43 | } 44 | 45 | @override 46 | Widget build(BuildContext context) { 47 | context.watch(); 48 | 49 | return GestureDetector( 50 | onTap: () => FocusScope.of(context).requestFocus(_model.unfocusNode), 51 | child: Scaffold( 52 | key: scaffoldKey, 53 | backgroundColor: FlutterFlowTheme.of(context).primaryBackground, 54 | body: Align( 55 | alignment: AlignmentDirectional(0.0, -0.2), 56 | child: Column( 57 | mainAxisSize: MainAxisSize.max, 58 | mainAxisAlignment: MainAxisAlignment.end, 59 | children: [ 60 | Align( 61 | alignment: AlignmentDirectional(0.0, -0.6), 62 | child: Padding( 63 | padding: EdgeInsetsDirectional.fromSTEB(67.8, 0.0, 67.8, 0.0), 64 | child: Image.asset( 65 | 'assets/images/Group_795.png', 66 | width: 276.1, 67 | height: 494.4, 68 | fit: BoxFit.fill, 69 | ), 70 | ), 71 | ), 72 | ], 73 | ), 74 | ), 75 | ), 76 | ); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /lib/src/sessions/session_details_page/session_details_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/flutter_flow/flutter_flow_widgets.dart'; 4 | import '/src/widgets/twitter_handle_component/twitter_handle_component_widget.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 7 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 8 | import 'package:google_fonts/google_fonts.dart'; 9 | import 'package:provider/provider.dart'; 10 | 11 | class SessionDetailsPageModel extends FlutterFlowModel { 12 | /// State fields for stateful widgets in this page. 13 | 14 | final unfocusNode = FocusNode(); 15 | // State field(s) for TextField widget. 16 | TextEditingController? textController; 17 | String? Function(BuildContext, String?)? textControllerValidator; 18 | // Model for twitter_handle_component component. 19 | late TwitterHandleComponentModel twitterHandleComponentModel; 20 | 21 | /// Initialization and disposal methods. 22 | 23 | void initState(BuildContext context) { 24 | twitterHandleComponentModel = 25 | createModel(context, () => TwitterHandleComponentModel()); 26 | } 27 | 28 | void dispose() { 29 | unfocusNode.dispose(); 30 | textController?.dispose(); 31 | twitterHandleComponentModel.dispose(); 32 | } 33 | 34 | /// Action blocks are added here. 35 | 36 | /// Additional helper methods are added here. 37 | } 38 | -------------------------------------------------------------------------------- /lib/src/speakers/all_speakers_page/all_speakers_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/backend/api_requests/api_calls.dart'; 2 | import '/flutter_flow/flutter_flow_theme.dart'; 3 | import '/flutter_flow/flutter_flow_util.dart'; 4 | import '/src/widgets/all_speakers_component/all_speakers_component_widget.dart'; 5 | import '/flutter_flow/request_manager.dart'; 6 | 7 | import 'dart:async'; 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 10 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 11 | import 'package:google_fonts/google_fonts.dart'; 12 | import 'package:provider/provider.dart'; 13 | 14 | class AllSpeakersPageModel extends FlutterFlowModel { 15 | /// State fields for stateful widgets in this page. 16 | 17 | final unfocusNode = FocusNode(); 18 | bool apiRequestCompleted = false; 19 | String? apiRequestLastUniqueKey; 20 | 21 | /// Query cache managers for this widget. 22 | 23 | final _allSpeakersManager = FutureRequestManager(); 24 | Future allSpeakers({ 25 | String? uniqueQueryKey, 26 | bool? overrideCache, 27 | required Future Function() requestFn, 28 | }) => 29 | _allSpeakersManager.performRequest( 30 | uniqueQueryKey: uniqueQueryKey, 31 | overrideCache: overrideCache, 32 | requestFn: requestFn, 33 | ); 34 | void clearAllSpeakersCache() => _allSpeakersManager.clear(); 35 | void clearAllSpeakersCacheKey(String? uniqueKey) => 36 | _allSpeakersManager.clearRequest(uniqueKey); 37 | 38 | /// Initialization and disposal methods. 39 | 40 | void initState(BuildContext context) {} 41 | 42 | void dispose() { 43 | unfocusNode.dispose(); 44 | 45 | /// Dispose query cache managers for this widget. 46 | 47 | clearAllSpeakersCache(); 48 | } 49 | 50 | /// Action blocks are added here. 51 | 52 | /// Additional helper methods are added here. 53 | 54 | Future waitForApiRequestCompleted({ 55 | double minWait = 0, 56 | double maxWait = double.infinity, 57 | }) async { 58 | final stopwatch = Stopwatch()..start(); 59 | while (true) { 60 | await Future.delayed(Duration(milliseconds: 50)); 61 | final timeElapsed = stopwatch.elapsedMilliseconds; 62 | final requestComplete = apiRequestCompleted; 63 | if (timeElapsed > maxWait || (requestComplete && timeElapsed > minWait)) { 64 | break; 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/src/speakers/speaker_page/speaker_page_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/twitter_handle_component/twitter_handle_component_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | 10 | class SpeakerPageModel extends FlutterFlowModel { 11 | /// State fields for stateful widgets in this page. 12 | 13 | final unfocusNode = FocusNode(); 14 | // Model for twitter_handle_component component. 15 | late TwitterHandleComponentModel twitterHandleComponentModel; 16 | 17 | /// Initialization and disposal methods. 18 | 19 | void initState(BuildContext context) { 20 | twitterHandleComponentModel = 21 | createModel(context, () => TwitterHandleComponentModel()); 22 | } 23 | 24 | void dispose() { 25 | unfocusNode.dispose(); 26 | twitterHandleComponentModel.dispose(); 27 | } 28 | 29 | /// Action blocks are added here. 30 | 31 | /// Additional helper methods are added here. 32 | } 33 | -------------------------------------------------------------------------------- /lib/src/widgets/all_speakers_component/all_speakers_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class AllSpeakersComponentModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/feeds_cards_component/feeds_cards_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/modals/share_modal/share_modal_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | 10 | class FeedsCardsComponentModel extends FlutterFlowModel { 11 | /// Initialization and disposal methods. 12 | 13 | void initState(BuildContext context) {} 14 | 15 | void dispose() {} 16 | 17 | /// Action blocks are added here. 18 | 19 | /// Additional helper methods are added here. 20 | } 21 | -------------------------------------------------------------------------------- /lib/src/widgets/feeds_cards_component/feeds_cards_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/modals/share_modal/share_modal_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:provider/provider.dart'; 9 | import 'feeds_cards_component_model.dart'; 10 | export 'feeds_cards_component_model.dart'; 11 | 12 | class FeedsCardsComponentWidget extends StatefulWidget { 13 | const FeedsCardsComponentWidget({Key? key}) : super(key: key); 14 | 15 | @override 16 | _FeedsCardsComponentWidgetState createState() => 17 | _FeedsCardsComponentWidgetState(); 18 | } 19 | 20 | class _FeedsCardsComponentWidgetState extends State { 21 | late FeedsCardsComponentModel _model; 22 | 23 | @override 24 | void setState(VoidCallback callback) { 25 | super.setState(callback); 26 | _model.onUpdate(); 27 | } 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | _model = createModel(context, () => FeedsCardsComponentModel()); 33 | 34 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 35 | } 36 | 37 | @override 38 | void dispose() { 39 | _model.maybeDispose(); 40 | 41 | super.dispose(); 42 | } 43 | 44 | @override 45 | Widget build(BuildContext context) { 46 | context.watch(); 47 | 48 | return Container( 49 | width: double.infinity, 50 | height: 378.8, 51 | decoration: BoxDecoration( 52 | color: FlutterFlowTheme.of(context).secondaryBackground, 53 | ), 54 | child: Column( 55 | mainAxisSize: MainAxisSize.max, 56 | children: [ 57 | Text( 58 | 'We are pleased to have a team from Andela Kenya who will have a talk about Software Engineers to the Power of X from an Employer\'s Perspective.', 59 | style: FlutterFlowTheme.of(context).bodyMedium, 60 | ), 61 | Padding( 62 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 16.0, 0.0, 0.0), 63 | child: Image.asset( 64 | 'assets/images/EBhIV3EXsAA84vX.png', 65 | width: double.infinity, 66 | height: 209.0, 67 | fit: BoxFit.cover, 68 | ), 69 | ), 70 | Padding( 71 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 18.3, 0.0, 15.0), 72 | child: Row( 73 | mainAxisSize: MainAxisSize.max, 74 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 75 | children: [ 76 | InkWell( 77 | splashColor: Colors.transparent, 78 | focusColor: Colors.transparent, 79 | hoverColor: Colors.transparent, 80 | highlightColor: Colors.transparent, 81 | onTap: () async { 82 | await showModalBottomSheet( 83 | isScrollControlled: true, 84 | backgroundColor: Colors.transparent, 85 | barrierColor: Color(0x00000000), 86 | enableDrag: false, 87 | context: context, 88 | builder: (context) { 89 | return Padding( 90 | padding: MediaQuery.viewInsetsOf(context), 91 | child: Container( 92 | height: 245.0, 93 | child: ShareModalWidget(), 94 | ), 95 | ); 96 | }, 97 | ).then((value) => setState(() {})); 98 | }, 99 | child: Row( 100 | mainAxisSize: MainAxisSize.max, 101 | children: [ 102 | Text( 103 | 'Share', 104 | style: FlutterFlowTheme.of(context).bodyMedium.override( 105 | fontFamily: 'Montserrat', 106 | color: Color(0xFF000CEB), 107 | fontSize: 14.0, 108 | fontWeight: FontWeight.bold, 109 | ), 110 | ), 111 | Padding( 112 | padding: 113 | EdgeInsetsDirectional.fromSTEB(7.27, 0.0, 0.0, 0.0), 114 | child: FaIcon( 115 | FontAwesomeIcons.share, 116 | color: Color(0xFF000CEB), 117 | size: 24.0, 118 | ), 119 | ), 120 | ], 121 | ), 122 | ), 123 | Text( 124 | '5 hours ago', 125 | style: FlutterFlowTheme.of(context).bodyMedium.override( 126 | fontFamily: 'Montserrat', 127 | color: Color(0xFF707070), 128 | fontSize: 12.0, 129 | ), 130 | ), 131 | ], 132 | ), 133 | ), 134 | Divider( 135 | thickness: 1.0, 136 | ), 137 | ], 138 | ), 139 | ); 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /lib/src/widgets/header_component/header_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/auth/firebase_auth/auth_util.dart'; 2 | import '/flutter_flow/flutter_flow_theme.dart'; 3 | import '/flutter_flow/flutter_flow_util.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class HeaderComponentModel extends FlutterFlowModel { 10 | /// Initialization and disposal methods. 11 | 12 | void initState(BuildContext context) {} 13 | 14 | void dispose() {} 15 | 16 | /// Action blocks are added here. 17 | 18 | /// Additional helper methods are added here. 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/widgets/header_component/header_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/auth/firebase_auth/auth_util.dart'; 2 | import '/flutter_flow/flutter_flow_theme.dart'; 3 | import '/flutter_flow/flutter_flow_util.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'header_component_model.dart'; 9 | export 'header_component_model.dart'; 10 | 11 | class HeaderComponentWidget extends StatefulWidget { 12 | const HeaderComponentWidget({Key? key}) : super(key: key); 13 | 14 | @override 15 | _HeaderComponentWidgetState createState() => _HeaderComponentWidgetState(); 16 | } 17 | 18 | class _HeaderComponentWidgetState extends State { 19 | late HeaderComponentModel _model; 20 | 21 | @override 22 | void setState(VoidCallback callback) { 23 | super.setState(callback); 24 | _model.onUpdate(); 25 | } 26 | 27 | @override 28 | void initState() { 29 | super.initState(); 30 | _model = createModel(context, () => HeaderComponentModel()); 31 | 32 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 33 | } 34 | 35 | @override 36 | void dispose() { 37 | _model.maybeDispose(); 38 | 39 | super.dispose(); 40 | } 41 | 42 | @override 43 | Widget build(BuildContext context) { 44 | context.watch(); 45 | 46 | return Row( 47 | mainAxisSize: MainAxisSize.max, 48 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 49 | children: [ 50 | Image.asset( 51 | 'assets/images/Group_363.png', 52 | width: 137.0, 53 | height: 25.5, 54 | fit: BoxFit.contain, 55 | ), 56 | Row( 57 | mainAxisSize: MainAxisSize.max, 58 | children: [ 59 | Padding( 60 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 15.0, 0.0), 61 | child: InkWell( 62 | splashColor: Colors.transparent, 63 | focusColor: Colors.transparent, 64 | hoverColor: Colors.transparent, 65 | highlightColor: Colors.transparent, 66 | onTap: () async { 67 | context.pushNamed( 68 | 'feedback_page', 69 | extra: { 70 | kTransitionInfoKey: TransitionInfo( 71 | hasTransition: true, 72 | transitionType: PageTransitionType.rightToLeft, 73 | duration: Duration(milliseconds: 2000), 74 | ), 75 | }, 76 | ); 77 | }, 78 | child: Container( 79 | width: 127.0, 80 | height: 30.0, 81 | decoration: BoxDecoration( 82 | color: Color(0xFF9BEFE6), 83 | borderRadius: BorderRadius.circular(12.0), 84 | ), 85 | child: InkWell( 86 | splashColor: Colors.transparent, 87 | focusColor: Colors.transparent, 88 | hoverColor: Colors.transparent, 89 | highlightColor: Colors.transparent, 90 | onTap: () async { 91 | context.pushNamed( 92 | 'feedback_page', 93 | extra: { 94 | kTransitionInfoKey: TransitionInfo( 95 | hasTransition: true, 96 | transitionType: PageTransitionType.rightToLeft, 97 | duration: Duration(milliseconds: 1000), 98 | ), 99 | }, 100 | ); 101 | }, 102 | child: Row( 103 | mainAxisSize: MainAxisSize.max, 104 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 105 | children: [ 106 | Icon( 107 | Icons.tag_faces_sharp, 108 | color: FlutterFlowTheme.of(context).primaryText, 109 | size: 12.0, 110 | ), 111 | Text( 112 | 'Feedback', 113 | style: 114 | FlutterFlowTheme.of(context).bodyMedium.override( 115 | fontFamily: 'Montserrat', 116 | fontSize: 12.0, 117 | ), 118 | ), 119 | Image.asset( 120 | 'assets/images/Layer_2.png', 121 | width: 12.0, 122 | height: 12.3, 123 | fit: BoxFit.cover, 124 | ), 125 | ], 126 | ), 127 | ), 128 | ), 129 | ), 130 | ), 131 | InkWell( 132 | splashColor: Colors.transparent, 133 | focusColor: Colors.transparent, 134 | hoverColor: Colors.transparent, 135 | highlightColor: Colors.transparent, 136 | onTap: () async { 137 | GoRouter.of(context).prepareAuthEvent(); 138 | await authManager.signOut(); 139 | GoRouter.of(context).clearRedirectLocation(); 140 | 141 | context.goNamedAuth('home_page_no_login', context.mounted); 142 | }, 143 | child: Container( 144 | width: 30.0, 145 | height: 30.0, 146 | clipBehavior: Clip.antiAlias, 147 | decoration: BoxDecoration( 148 | shape: BoxShape.circle, 149 | ), 150 | child: Image.network( 151 | getJsonField( 152 | FFAppState().user, 153 | r'''$.avatar''', 154 | ), 155 | fit: BoxFit.cover, 156 | ), 157 | ), 158 | ), 159 | ], 160 | ), 161 | ], 162 | ); 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /lib/src/widgets/organisedby_component/organisedby_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/organized_by_panel/organized_by_panel_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class OrganisedbyComponentModel extends FlutterFlowModel { 10 | /// State fields for stateful widgets in this component. 11 | 12 | // Model for organizedByPanel component. 13 | late OrganizedByPanelModel organizedByPanelModel; 14 | 15 | /// Initialization and disposal methods. 16 | 17 | void initState(BuildContext context) { 18 | organizedByPanelModel = createModel(context, () => OrganizedByPanelModel()); 19 | } 20 | 21 | void dispose() { 22 | organizedByPanelModel.dispose(); 23 | } 24 | 25 | /// Action blocks are added here. 26 | 27 | /// Additional helper methods are added here. 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/widgets/organisedby_component/organisedby_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/organized_by_panel/organized_by_panel_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'organisedby_component_model.dart'; 9 | export 'organisedby_component_model.dart'; 10 | 11 | class OrganisedbyComponentWidget extends StatefulWidget { 12 | const OrganisedbyComponentWidget({Key? key}) : super(key: key); 13 | 14 | @override 15 | _OrganisedbyComponentWidgetState createState() => 16 | _OrganisedbyComponentWidgetState(); 17 | } 18 | 19 | class _OrganisedbyComponentWidgetState 20 | extends State { 21 | late OrganisedbyComponentModel _model; 22 | 23 | @override 24 | void setState(VoidCallback callback) { 25 | super.setState(callback); 26 | _model.onUpdate(); 27 | } 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | _model = createModel(context, () => OrganisedbyComponentModel()); 33 | 34 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 35 | } 36 | 37 | @override 38 | void dispose() { 39 | _model.maybeDispose(); 40 | 41 | super.dispose(); 42 | } 43 | 44 | @override 45 | Widget build(BuildContext context) { 46 | context.watch(); 47 | 48 | return Padding( 49 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 29.79, 0.0, 0.0), 50 | child: Container( 51 | width: double.infinity, 52 | height: 228.0, 53 | decoration: BoxDecoration( 54 | color: Color(0xFFF5F5F5), 55 | borderRadius: BorderRadius.circular(16.0), 56 | ), 57 | child: wrapWithModel( 58 | model: _model.organizedByPanelModel, 59 | updateCallback: () => setState(() {}), 60 | child: OrganizedByPanelWidget(), 61 | ), 62 | ), 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/src/widgets/organized_by_panel/organized_by_panel_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class OrganizedByPanelModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/organized_by_panel/organized_by_panel_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | import 'organized_by_panel_model.dart'; 8 | export 'organized_by_panel_model.dart'; 9 | 10 | class OrganizedByPanelWidget extends StatefulWidget { 11 | const OrganizedByPanelWidget({Key? key}) : super(key: key); 12 | 13 | @override 14 | _OrganizedByPanelWidgetState createState() => _OrganizedByPanelWidgetState(); 15 | } 16 | 17 | class _OrganizedByPanelWidgetState extends State { 18 | late OrganizedByPanelModel _model; 19 | 20 | @override 21 | void setState(VoidCallback callback) { 22 | super.setState(callback); 23 | _model.onUpdate(); 24 | } 25 | 26 | @override 27 | void initState() { 28 | super.initState(); 29 | _model = createModel(context, () => OrganizedByPanelModel()); 30 | 31 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 32 | } 33 | 34 | @override 35 | void dispose() { 36 | _model.maybeDispose(); 37 | 38 | super.dispose(); 39 | } 40 | 41 | @override 42 | Widget build(BuildContext context) { 43 | context.watch(); 44 | 45 | return Column( 46 | mainAxisSize: MainAxisSize.max, 47 | children: [ 48 | Padding( 49 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 23.0, 0.0, 0.0), 50 | child: Text( 51 | 'Organised by;', 52 | style: FlutterFlowTheme.of(context).bodyMedium.override( 53 | fontFamily: 'Montserrat', 54 | color: Color(0xFF000CEB), 55 | fontSize: 18.0, 56 | fontWeight: FontWeight.bold, 57 | ), 58 | ), 59 | ), 60 | Padding( 61 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 30.7, 0.0, 0.0), 62 | child: Row( 63 | mainAxisSize: MainAxisSize.max, 64 | mainAxisAlignment: MainAxisAlignment.center, 65 | children: [ 66 | Image.asset( 67 | 'assets/images/android254.png', 68 | width: 29.4, 69 | height: 38.4, 70 | fit: BoxFit.cover, 71 | ), 72 | Padding( 73 | padding: EdgeInsetsDirectional.fromSTEB(34.23, 0.0, 34.0, 0.0), 74 | child: Image.asset( 75 | 'assets/images/kotlin.png', 76 | width: 68.0, 77 | height: 50.0, 78 | fit: BoxFit.cover, 79 | ), 80 | ), 81 | Image.asset( 82 | 'assets/images/unnamed.png', 83 | width: 51.0, 84 | height: 50.0, 85 | fit: BoxFit.cover, 86 | ), 87 | ], 88 | ), 89 | ), 90 | Padding( 91 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 34.26, 0.0, 22.26), 92 | child: Row( 93 | mainAxisSize: MainAxisSize.max, 94 | mainAxisAlignment: MainAxisAlignment.center, 95 | children: [ 96 | Image.asset( 97 | 'assets/images/appslab.png', 98 | width: 25.2, 99 | height: 36.5, 100 | fit: BoxFit.cover, 101 | ), 102 | Padding( 103 | padding: EdgeInsetsDirectional.fromSTEB(50.48, 0.0, 50.66, 0.0), 104 | child: Image.asset( 105 | 'assets/images/Layer_2-3.png', 106 | width: 20.2, 107 | height: 37.2, 108 | fit: BoxFit.cover, 109 | ), 110 | ), 111 | Image.asset( 112 | 'assets/images/tiskoks.png', 113 | width: 39.2, 114 | height: 36.7, 115 | fit: BoxFit.cover, 116 | ), 117 | ], 118 | ), 119 | ), 120 | ], 121 | ); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /lib/src/widgets/organizers_component/organizers_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class OrganizersComponentModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/organizers_component/organizers_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | import 'organizers_component_model.dart'; 8 | export 'organizers_component_model.dart'; 9 | 10 | class OrganizersComponentWidget extends StatefulWidget { 11 | const OrganizersComponentWidget({Key? key}) : super(key: key); 12 | 13 | @override 14 | _OrganizersComponentWidgetState createState() => 15 | _OrganizersComponentWidgetState(); 16 | } 17 | 18 | class _OrganizersComponentWidgetState extends State { 19 | late OrganizersComponentModel _model; 20 | 21 | @override 22 | void setState(VoidCallback callback) { 23 | super.setState(callback); 24 | _model.onUpdate(); 25 | } 26 | 27 | @override 28 | void initState() { 29 | super.initState(); 30 | _model = createModel(context, () => OrganizersComponentModel()); 31 | 32 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 33 | } 34 | 35 | @override 36 | void dispose() { 37 | _model.maybeDispose(); 38 | 39 | super.dispose(); 40 | } 41 | 42 | @override 43 | Widget build(BuildContext context) { 44 | context.watch(); 45 | 46 | return Padding( 47 | padding: EdgeInsetsDirectional.fromSTEB(12.0, 0.0, 12.0, 0.0), 48 | child: Column( 49 | mainAxisSize: MainAxisSize.max, 50 | children: [ 51 | Container( 52 | width: 99.0, 53 | height: 99.0, 54 | decoration: BoxDecoration( 55 | color: FlutterFlowTheme.of(context).tertiary400, 56 | borderRadius: BorderRadius.circular(12.0), 57 | shape: BoxShape.rectangle, 58 | ), 59 | child: Padding( 60 | padding: EdgeInsetsDirectional.fromSTEB(2.0, 2.0, 2.0, 2.0), 61 | child: ClipRRect( 62 | borderRadius: BorderRadius.circular(12.0), 63 | child: Image.asset( 64 | 'assets/images/Screenshot_2022-11-10_at_20.58.45_2_90.png', 65 | width: 74.0, 66 | height: 74.0, 67 | fit: BoxFit.cover, 68 | ), 69 | ), 70 | ), 71 | ), 72 | Padding( 73 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 0.0, 0.0), 74 | child: Text( 75 | 'Eric Muli', 76 | style: FlutterFlowTheme.of(context).bodyMedium.override( 77 | fontFamily: 'Montserrat', 78 | fontSize: 14.0, 79 | ), 80 | ), 81 | ), 82 | Padding( 83 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 3.0, 0.0, 0.0), 84 | child: Text( 85 | 'The Chief', 86 | style: FlutterFlowTheme.of(context).bodyMedium.override( 87 | fontFamily: 'Montserrat', 88 | color: Color(0xFF707070), 89 | fontSize: 11.0, 90 | ), 91 | ), 92 | ), 93 | ], 94 | ), 95 | ); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /lib/src/widgets/outlined_icon_button/outlined_icon_button_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class OutlinedIconButtonModel extends FlutterFlowModel { 10 | /// Initialization and disposal methods. 11 | 12 | void initState(BuildContext context) {} 13 | 14 | void dispose() {} 15 | 16 | /// Action blocks are added here. 17 | 18 | /// Additional helper methods are added here. 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/widgets/outlined_icon_button/outlined_icon_button_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'outlined_icon_button_model.dart'; 9 | export 'outlined_icon_button_model.dart'; 10 | 11 | class OutlinedIconButtonWidget extends StatefulWidget { 12 | const OutlinedIconButtonWidget({ 13 | Key? key, 14 | String? twitterHandle, 15 | this.buttonHeight, 16 | }) : this.twitterHandle = twitterHandle ?? 'muli_eriq', 17 | super(key: key); 18 | 19 | final String twitterHandle; 20 | final double? buttonHeight; 21 | 22 | @override 23 | _OutlinedIconButtonWidgetState createState() => 24 | _OutlinedIconButtonWidgetState(); 25 | } 26 | 27 | class _OutlinedIconButtonWidgetState extends State { 28 | late OutlinedIconButtonModel _model; 29 | 30 | @override 31 | void setState(VoidCallback callback) { 32 | super.setState(callback); 33 | _model.onUpdate(); 34 | } 35 | 36 | @override 37 | void initState() { 38 | super.initState(); 39 | _model = createModel(context, () => OutlinedIconButtonModel()); 40 | 41 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 42 | } 43 | 44 | @override 45 | void dispose() { 46 | _model.maybeDispose(); 47 | 48 | super.dispose(); 49 | } 50 | 51 | @override 52 | Widget build(BuildContext context) { 53 | context.watch(); 54 | 55 | return Container( 56 | width: 200.0, 57 | height: widget.buttonHeight, 58 | decoration: BoxDecoration( 59 | borderRadius: BorderRadius.circular(10.0), 60 | border: Border.all( 61 | color: Color(0xFF000CEB), 62 | width: 1.0, 63 | ), 64 | ), 65 | child: Row( 66 | mainAxisSize: MainAxisSize.max, 67 | mainAxisAlignment: MainAxisAlignment.center, 68 | children: [ 69 | FaIcon( 70 | FontAwesomeIcons.twitter, 71 | color: Color(0xFF000CEB), 72 | size: 20.0, 73 | ), 74 | Padding( 75 | padding: EdgeInsetsDirectional.fromSTEB(5.64, 0.0, 0.0, 0.0), 76 | child: Text( 77 | widget.twitterHandle, 78 | style: FlutterFlowTheme.of(context).bodyMedium.override( 79 | fontFamily: 'Montserrat', 80 | color: Color(0xFF000CEB), 81 | ), 82 | ), 83 | ), 84 | ], 85 | ), 86 | ); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /lib/src/widgets/sesion_header_component/sesion_header_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/modals/filter_component/filter_component_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class SesionHeaderComponentModel extends FlutterFlowModel { 10 | /// Initialization and disposal methods. 11 | 12 | void initState(BuildContext context) {} 13 | 14 | void dispose() {} 15 | 16 | /// Action blocks are added here. 17 | 18 | /// Additional helper methods are added here. 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/widgets/session_date_component/session_date_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class SessionDateComponentModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/session_date_component/session_date_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | import 'session_date_component_model.dart'; 8 | export 'session_date_component_model.dart'; 9 | 10 | class SessionDateComponentWidget extends StatefulWidget { 11 | const SessionDateComponentWidget({ 12 | Key? key, 13 | String? date, 14 | String? day, 15 | this.color, 16 | this.dateColor, 17 | this.dayColor, 18 | }) : this.date = date ?? '', 19 | this.day = day ?? ' ', 20 | super(key: key); 21 | 22 | final String date; 23 | final String day; 24 | final Color? color; 25 | final Color? dateColor; 26 | final Color? dayColor; 27 | 28 | @override 29 | _SessionDateComponentWidgetState createState() => 30 | _SessionDateComponentWidgetState(); 31 | } 32 | 33 | class _SessionDateComponentWidgetState 34 | extends State { 35 | late SessionDateComponentModel _model; 36 | 37 | @override 38 | void setState(VoidCallback callback) { 39 | super.setState(callback); 40 | _model.onUpdate(); 41 | } 42 | 43 | @override 44 | void initState() { 45 | super.initState(); 46 | _model = createModel(context, () => SessionDateComponentModel()); 47 | 48 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 49 | } 50 | 51 | @override 52 | void dispose() { 53 | _model.maybeDispose(); 54 | 55 | super.dispose(); 56 | } 57 | 58 | @override 59 | Widget build(BuildContext context) { 60 | context.watch(); 61 | 62 | return Padding( 63 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 21.0, 0.0), 64 | child: Container( 65 | width: 51.0, 66 | height: 51.0, 67 | decoration: BoxDecoration( 68 | color: widget.color, 69 | borderRadius: BorderRadius.circular(10.0), 70 | ), 71 | child: Column( 72 | mainAxisSize: MainAxisSize.max, 73 | children: [ 74 | Padding( 75 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 8.0, 0.0, 0.0), 76 | child: Text( 77 | widget.date, 78 | style: FlutterFlowTheme.of(context).bodyMedium.override( 79 | fontFamily: 'Montserrat', 80 | color: widget.dateColor, 81 | fontSize: 18.0, 82 | fontWeight: FontWeight.bold, 83 | ), 84 | ), 85 | ), 86 | Text( 87 | widget.day, 88 | style: FlutterFlowTheme.of(context).bodyMedium.override( 89 | fontFamily: 'Montserrat', 90 | color: widget.dayColor, 91 | fontSize: 11.0, 92 | ), 93 | ), 94 | ], 95 | ), 96 | ), 97 | ); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /lib/src/widgets/sessions_card_component/sessions_card_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class SessionsCardComponentModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/sessions_card_component/sessions_card_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | import 'sessions_card_component_model.dart'; 8 | export 'sessions_card_component_model.dart'; 9 | 10 | class SessionsCardComponentWidget extends StatefulWidget { 11 | const SessionsCardComponentWidget({ 12 | Key? key, 13 | this.sessionsDetails, 14 | }) : super(key: key); 15 | 16 | final dynamic sessionsDetails; 17 | 18 | @override 19 | _SessionsCardComponentWidgetState createState() => 20 | _SessionsCardComponentWidgetState(); 21 | } 22 | 23 | class _SessionsCardComponentWidgetState 24 | extends State { 25 | late SessionsCardComponentModel _model; 26 | 27 | @override 28 | void setState(VoidCallback callback) { 29 | super.setState(callback); 30 | _model.onUpdate(); 31 | } 32 | 33 | @override 34 | void initState() { 35 | super.initState(); 36 | _model = createModel(context, () => SessionsCardComponentModel()); 37 | 38 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 39 | } 40 | 41 | @override 42 | void dispose() { 43 | _model.maybeDispose(); 44 | 45 | super.dispose(); 46 | } 47 | 48 | @override 49 | Widget build(BuildContext context) { 50 | context.watch(); 51 | 52 | return Padding( 53 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 8.06, 0.0), 54 | child: Container( 55 | width: 248.9, 56 | height: 215.2, 57 | decoration: BoxDecoration( 58 | color: Color(0xFFF5F5F5), 59 | borderRadius: BorderRadius.circular(12.0), 60 | ), 61 | child: Column( 62 | mainAxisSize: MainAxisSize.max, 63 | crossAxisAlignment: CrossAxisAlignment.start, 64 | children: [ 65 | ClipRRect( 66 | borderRadius: BorderRadius.only( 67 | bottomLeft: Radius.circular(0.0), 68 | bottomRight: Radius.circular(0.0), 69 | topLeft: Radius.circular(12.0), 70 | topRight: Radius.circular(12.0), 71 | ), 72 | child: Image.network( 73 | getJsonField( 74 | widget.sessionsDetails, 75 | r'''$.session_image''', 76 | ), 77 | width: double.infinity, 78 | height: 124.0, 79 | fit: BoxFit.contain, 80 | ), 81 | ), 82 | Padding( 83 | padding: EdgeInsetsDirectional.fromSTEB(10.0, 15.2, 10.0, 0.0), 84 | child: Text( 85 | getJsonField( 86 | widget.sessionsDetails, 87 | r'''$.title''', 88 | ).toString(), 89 | style: FlutterFlowTheme.of(context).bodyMedium.override( 90 | fontFamily: 'Montserrat', 91 | fontSize: 14.0, 92 | fontWeight: FontWeight.bold, 93 | ), 94 | ), 95 | ), 96 | Padding( 97 | padding: EdgeInsetsDirectional.fromSTEB(10.0, 13.0, 10.0, 0.0), 98 | child: Row( 99 | mainAxisSize: MainAxisSize.min, 100 | children: [ 101 | Text( 102 | '@10:30', 103 | style: FlutterFlowTheme.of(context).bodyMedium.override( 104 | fontFamily: 'Montserrat', 105 | color: Color(0xFF707070), 106 | fontSize: 11.0, 107 | ), 108 | ), 109 | SizedBox( 110 | height: 10.0, 111 | child: VerticalDivider( 112 | thickness: 2.0, 113 | color: Color(0xFF707070), 114 | ), 115 | ), 116 | Text( 117 | 'Room 1', 118 | style: FlutterFlowTheme.of(context).bodyMedium.override( 119 | fontFamily: 'Montserrat', 120 | color: Color(0xFF707070), 121 | fontSize: 11.0, 122 | ), 123 | ), 124 | ], 125 | ), 126 | ), 127 | ], 128 | ), 129 | ), 130 | ); 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /lib/src/widgets/sessions_list_component/sessions_list_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/backend/api_requests/api_calls.dart'; 2 | import '/flutter_flow/flutter_flow_theme.dart'; 3 | import '/flutter_flow/flutter_flow_util.dart'; 4 | import '/src/widgets/sessions_card_component/sessions_card_component_widget.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; 9 | import 'package:provider/provider.dart'; 10 | 11 | class SessionsListComponentModel extends FlutterFlowModel { 12 | /// State fields for stateful widgets in this component. 13 | 14 | // State field(s) for ListView widget. 15 | PagingController? pagingController; 16 | 17 | /// Initialization and disposal methods. 18 | 19 | void initState(BuildContext context) {} 20 | 21 | void dispose() {} 22 | 23 | /// Action blocks are added here. 24 | 25 | /// Additional helper methods are added here. 26 | } 27 | -------------------------------------------------------------------------------- /lib/src/widgets/sessions_list_component/sessions_list_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/backend/api_requests/api_calls.dart'; 2 | import '/flutter_flow/flutter_flow_theme.dart'; 3 | import '/flutter_flow/flutter_flow_util.dart'; 4 | import '/src/widgets/sessions_card_component/sessions_card_component_widget.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 7 | import 'package:google_fonts/google_fonts.dart'; 8 | import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; 9 | import 'package:provider/provider.dart'; 10 | import 'sessions_list_component_model.dart'; 11 | export 'sessions_list_component_model.dart'; 12 | 13 | class SessionsListComponentWidget extends StatefulWidget { 14 | const SessionsListComponentWidget({Key? key}) : super(key: key); 15 | 16 | @override 17 | _SessionsListComponentWidgetState createState() => 18 | _SessionsListComponentWidgetState(); 19 | } 20 | 21 | class _SessionsListComponentWidgetState 22 | extends State { 23 | late SessionsListComponentModel _model; 24 | 25 | @override 26 | void setState(VoidCallback callback) { 27 | super.setState(callback); 28 | _model.onUpdate(); 29 | } 30 | 31 | @override 32 | void initState() { 33 | super.initState(); 34 | _model = createModel(context, () => SessionsListComponentModel()); 35 | 36 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 37 | } 38 | 39 | @override 40 | void dispose() { 41 | _model.maybeDispose(); 42 | 43 | super.dispose(); 44 | } 45 | 46 | @override 47 | Widget build(BuildContext context) { 48 | context.watch(); 49 | 50 | return Container( 51 | width: double.infinity, 52 | height: 215.2, 53 | decoration: BoxDecoration( 54 | color: FlutterFlowTheme.of(context).secondaryBackground, 55 | ), 56 | child: PagedListView( 57 | pagingController: () { 58 | if (_model.pagingController != null) { 59 | return _model.pagingController!; 60 | } 61 | 62 | _model.pagingController = PagingController( 63 | firstPageKey: ApiPagingParams( 64 | nextPageNumber: 0, 65 | numItems: 0, 66 | lastResponse: null, 67 | ), 68 | ); 69 | _model.pagingController!.addPageRequestListener((nextPageMarker) { 70 | DroidConKeAPIGroup.eventSessionsCall 71 | .call( 72 | perPage: 25, 73 | page: nextPageMarker.nextPageNumber, 74 | ) 75 | .then((listViewEventSessionsResponse) { 76 | final pageItems = 77 | (DroidConKeAPIGroup.eventSessionsCall.sessionData( 78 | listViewEventSessionsResponse.jsonBody, 79 | )! ?? 80 | []) 81 | .toList() as List; 82 | final newNumItems = nextPageMarker.numItems + pageItems.length; 83 | _model.pagingController!.appendPage( 84 | pageItems, 85 | (pageItems.length > 0) 86 | ? ApiPagingParams( 87 | nextPageNumber: nextPageMarker.nextPageNumber + 1, 88 | numItems: newNumItems, 89 | lastResponse: listViewEventSessionsResponse, 90 | ) 91 | : null, 92 | ); 93 | }); 94 | }); 95 | return _model.pagingController!; 96 | }(), 97 | padding: EdgeInsets.zero, 98 | shrinkWrap: true, 99 | reverse: false, 100 | scrollDirection: Axis.horizontal, 101 | builderDelegate: PagedChildBuilderDelegate( 102 | // Customize what your widget looks like when it's loading the first page. 103 | firstPageProgressIndicatorBuilder: (_) => Center( 104 | child: SizedBox( 105 | width: 50.0, 106 | height: 50.0, 107 | child: SpinKitDoubleBounce( 108 | color: FlutterFlowTheme.of(context).primary, 109 | size: 50.0, 110 | ), 111 | ), 112 | ), 113 | 114 | itemBuilder: (context, _, sessionaListIndex) { 115 | final sessionaListItem = 116 | _model.pagingController!.itemList![sessionaListIndex]; 117 | return InkWell( 118 | splashColor: Colors.transparent, 119 | focusColor: Colors.transparent, 120 | hoverColor: Colors.transparent, 121 | highlightColor: Colors.transparent, 122 | onTap: () async { 123 | context.pushNamed( 124 | 'session_details_page', 125 | extra: { 126 | kTransitionInfoKey: TransitionInfo( 127 | hasTransition: true, 128 | transitionType: PageTransitionType.rightToLeft, 129 | duration: Duration(milliseconds: 2000), 130 | ), 131 | }, 132 | ); 133 | }, 134 | child: SessionsCardComponentWidget( 135 | key: Key( 136 | 'Keylyp_${sessionaListIndex}_of_${_model.pagingController!.itemList!.length}'), 137 | sessionsDetails: getJsonField( 138 | sessionaListItem, 139 | r'''$''', 140 | ), 141 | ), 142 | ); 143 | }, 144 | ), 145 | ), 146 | ); 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /lib/src/widgets/speakers_component/speakers_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class SpeakersComponentModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/speakers_component/speakers_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | import 'speakers_component_model.dart'; 8 | export 'speakers_component_model.dart'; 9 | 10 | class SpeakersComponentWidget extends StatefulWidget { 11 | const SpeakersComponentWidget({ 12 | Key? key, 13 | this.speaker, 14 | }) : super(key: key); 15 | 16 | final dynamic speaker; 17 | 18 | @override 19 | _SpeakersComponentWidgetState createState() => 20 | _SpeakersComponentWidgetState(); 21 | } 22 | 23 | class _SpeakersComponentWidgetState extends State { 24 | late SpeakersComponentModel _model; 25 | 26 | @override 27 | void setState(VoidCallback callback) { 28 | super.setState(callback); 29 | _model.onUpdate(); 30 | } 31 | 32 | @override 33 | void initState() { 34 | super.initState(); 35 | _model = createModel(context, () => SpeakersComponentModel()); 36 | 37 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 38 | } 39 | 40 | @override 41 | void dispose() { 42 | _model.maybeDispose(); 43 | 44 | super.dispose(); 45 | } 46 | 47 | @override 48 | Widget build(BuildContext context) { 49 | context.watch(); 50 | 51 | return Padding( 52 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 23.0, 0.0), 53 | child: Column( 54 | mainAxisSize: MainAxisSize.max, 55 | children: [ 56 | Container( 57 | width: 76.0, 58 | height: 76.0, 59 | decoration: BoxDecoration( 60 | color: FlutterFlowTheme.of(context).tertiary400, 61 | borderRadius: BorderRadius.circular(12.0), 62 | shape: BoxShape.rectangle, 63 | ), 64 | child: Padding( 65 | padding: EdgeInsetsDirectional.fromSTEB(2.0, 2.0, 2.0, 2.0), 66 | child: ClipRRect( 67 | borderRadius: BorderRadius.circular(12.0), 68 | child: Image.network( 69 | getJsonField( 70 | widget.speaker, 71 | r'''$.avatar''', 72 | ), 73 | width: 74.0, 74 | height: 74.0, 75 | fit: BoxFit.cover, 76 | ), 77 | ), 78 | ), 79 | ), 80 | Padding( 81 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0), 82 | child: Text( 83 | getJsonField( 84 | widget.speaker, 85 | r'''$.name''', 86 | ).toString(), 87 | textAlign: TextAlign.center, 88 | style: FlutterFlowTheme.of(context).bodyMedium.override( 89 | fontFamily: 'Montserrat', 90 | fontSize: 11.0, 91 | ), 92 | ), 93 | ), 94 | ], 95 | ), 96 | ); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /lib/src/widgets/sponsors_component/sponsors_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class SponsorsComponentModel extends FlutterFlowModel { 9 | /// Initialization and disposal methods. 10 | 11 | void initState(BuildContext context) {} 12 | 13 | void dispose() {} 14 | 15 | /// Action blocks are added here. 16 | 17 | /// Additional helper methods are added here. 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/widgets/sponsors_component/sponsors_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | import 'sponsors_component_model.dart'; 8 | export 'sponsors_component_model.dart'; 9 | 10 | class SponsorsComponentWidget extends StatefulWidget { 11 | const SponsorsComponentWidget({Key? key}) : super(key: key); 12 | 13 | @override 14 | _SponsorsComponentWidgetState createState() => 15 | _SponsorsComponentWidgetState(); 16 | } 17 | 18 | class _SponsorsComponentWidgetState extends State { 19 | late SponsorsComponentModel _model; 20 | 21 | @override 22 | void setState(VoidCallback callback) { 23 | super.setState(callback); 24 | _model.onUpdate(); 25 | } 26 | 27 | @override 28 | void initState() { 29 | super.initState(); 30 | _model = createModel(context, () => SponsorsComponentModel()); 31 | 32 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 33 | } 34 | 35 | @override 36 | void dispose() { 37 | _model.maybeDispose(); 38 | 39 | super.dispose(); 40 | } 41 | 42 | @override 43 | Widget build(BuildContext context) { 44 | context.watch(); 45 | 46 | return Padding( 47 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 30.0, 0.0, 0.0), 48 | child: Container( 49 | width: double.infinity, 50 | height: 203.2, 51 | decoration: BoxDecoration( 52 | color: Color(0xFFF5F5F5), 53 | borderRadius: BorderRadius.circular(12.0), 54 | ), 55 | child: Column( 56 | mainAxisSize: MainAxisSize.max, 57 | children: [ 58 | Padding( 59 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 23.0, 0.0, 0.0), 60 | child: Text( 61 | 'Sponsors', 62 | style: FlutterFlowTheme.of(context).bodyMedium.override( 63 | fontFamily: 'Montserrat', 64 | color: Color(0xFF000CEB), 65 | fontSize: 18.0, 66 | fontWeight: FontWeight.bold, 67 | ), 68 | ), 69 | ), 70 | Padding( 71 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 23.0, 0.0, 0.0), 72 | child: Image.asset( 73 | 'assets/images/1920px-Google_2015_logo.svg.png', 74 | width: 116.0, 75 | height: 39.0, 76 | fit: BoxFit.cover, 77 | ), 78 | ), 79 | Padding( 80 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 31.84, 0.0, 0.0), 81 | child: Row( 82 | mainAxisSize: MainAxisSize.max, 83 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 84 | children: [ 85 | Image.asset( 86 | 'assets/images/Andela-logo-landscape-blue.png', 87 | width: 79.8, 88 | height: 23.3, 89 | fit: BoxFit.cover, 90 | ), 91 | Image.asset( 92 | 'assets/images/hover_logo.png', 93 | width: 79.9, 94 | height: 24.6, 95 | fit: BoxFit.cover, 96 | ), 97 | Image.asset( 98 | 'assets/images/jetbrains.png', 99 | width: 22.2, 100 | height: 24.1, 101 | fit: BoxFit.cover, 102 | ), 103 | ], 104 | ), 105 | ), 106 | ], 107 | ), 108 | ), 109 | ); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /lib/src/widgets/twitter_handle_component/twitter_handle_component_model.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/outlined_icon_button/outlined_icon_button_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class TwitterHandleComponentModel extends FlutterFlowModel { 10 | /// State fields for stateful widgets in this component. 11 | 12 | // Model for outlinedIconButton component. 13 | late OutlinedIconButtonModel outlinedIconButtonModel; 14 | 15 | /// Initialization and disposal methods. 16 | 17 | void initState(BuildContext context) { 18 | outlinedIconButtonModel = 19 | createModel(context, () => OutlinedIconButtonModel()); 20 | } 21 | 22 | void dispose() { 23 | outlinedIconButtonModel.dispose(); 24 | } 25 | 26 | /// Action blocks are added here. 27 | 28 | /// Additional helper methods are added here. 29 | } 30 | -------------------------------------------------------------------------------- /lib/src/widgets/twitter_handle_component/twitter_handle_component_widget.dart: -------------------------------------------------------------------------------- 1 | import '/flutter_flow/flutter_flow_theme.dart'; 2 | import '/flutter_flow/flutter_flow_util.dart'; 3 | import '/src/widgets/outlined_icon_button/outlined_icon_button_widget.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 6 | import 'package:google_fonts/google_fonts.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'twitter_handle_component_model.dart'; 9 | export 'twitter_handle_component_model.dart'; 10 | 11 | class TwitterHandleComponentWidget extends StatefulWidget { 12 | const TwitterHandleComponentWidget({Key? key}) : super(key: key); 13 | 14 | @override 15 | _TwitterHandleComponentWidgetState createState() => 16 | _TwitterHandleComponentWidgetState(); 17 | } 18 | 19 | class _TwitterHandleComponentWidgetState 20 | extends State { 21 | late TwitterHandleComponentModel _model; 22 | 23 | @override 24 | void setState(VoidCallback callback) { 25 | super.setState(callback); 26 | _model.onUpdate(); 27 | } 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | _model = createModel(context, () => TwitterHandleComponentModel()); 33 | 34 | WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {})); 35 | } 36 | 37 | @override 38 | void dispose() { 39 | _model.maybeDispose(); 40 | 41 | super.dispose(); 42 | } 43 | 44 | @override 45 | Widget build(BuildContext context) { 46 | context.watch(); 47 | 48 | return Padding( 49 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 19.0, 0.0, 0.0), 50 | child: Row( 51 | mainAxisSize: MainAxisSize.max, 52 | mainAxisAlignment: MainAxisAlignment.spaceAround, 53 | children: [ 54 | Padding( 55 | padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 54.0, 0.0), 56 | child: Text( 57 | 'Twitter Handle', 58 | style: FlutterFlowTheme.of(context).bodyMedium.override( 59 | fontFamily: 'Montserrat', 60 | color: Color(0xFF20201E), 61 | ), 62 | ), 63 | ), 64 | Expanded( 65 | child: wrapWithModel( 66 | model: _model.outlinedIconButtonModel, 67 | updateCallback: () => setState(() {}), 68 | child: OutlinedIconButtonWidget( 69 | twitterHandle: 'muli_eriq', 70 | buttonHeight: 38.0, 71 | ), 72 | ), 73 | ), 74 | ], 75 | ), 76 | ); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: droidcon_ke2023_flutter_flow 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=3.0.0 <4.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | flutter_localizations: 27 | sdk: flutter 28 | aligned_dialog: 0.0.6 29 | auto_size_text: 3.0.0 30 | cached_network_image: 3.2.1 31 | equatable: 2.0.5 32 | firebase_auth: ^4.3.0 33 | firebase_auth_platform_interface: ^6.12.0 34 | firebase_auth_web: ^5.2.10 35 | firebase_core: ^2.8.0 36 | firebase_core_platform_interface: ^4.5.3 37 | firebase_core_web: ^2.2.2 38 | firebase_remote_config: 4.2.2 39 | firebase_remote_config_platform_interface: 1.4.2 40 | firebase_remote_config_web: 1.4.2 41 | flutter_animate: 4.1.1+1 42 | flutter_cache_manager: 3.3.0 43 | flutter_spinkit: 5.1.0 44 | font_awesome_flutter: 10.1.0 45 | from_css_color: 2.0.0 46 | go_router: 7.1.1 47 | google_fonts: 4.0.3 48 | google_sign_in: ^6.0.2 49 | google_sign_in_android: ^6.1.8 50 | google_sign_in_ios: ^5.6.1 51 | google_sign_in_platform_interface: ^2.3.1 52 | google_sign_in_web: ^0.11.0+2 53 | infinite_scroll_pagination: 3.2.0 54 | intl: 0.18.0 55 | json_path: 0.4.1 56 | mime_type: 1.0.0 57 | page_transition: 2.0.4 58 | path_provider: 2.0.14 59 | path_provider_android: 2.0.25 60 | path_provider_foundation: 2.2.2 61 | path_provider_platform_interface: 2.0.6 62 | plugin_platform_interface: 2.1.3 63 | provider: 6.0.4 64 | rxdart: 0.27.7 65 | shared_preferences: 2.0.15 66 | shared_preferences_android: 2.1.0 67 | shared_preferences_ios: 2.1.1 68 | shared_preferences_platform_interface: 2.2.0 69 | shared_preferences_web: 2.1.0 70 | sign_in_with_apple: 4.3.0 71 | sign_in_with_apple_platform_interface: 1.0.0 72 | sign_in_with_apple_web: 1.0.1 73 | sqflite: 2.2.6 74 | timeago: 3.2.2 75 | url_launcher: 6.1.10 76 | url_launcher_android: 6.0.27 77 | url_launcher_ios: 6.1.4 78 | url_launcher_platform_interface: 2.1.2 79 | 80 | 81 | # The following adds the Cupertino Icons font to your application. 82 | # Use with the CupertinoIcons class for iOS style icons. 83 | cupertino_icons: ^1.0.0 84 | 85 | dev_dependencies: 86 | flutter_launcher_icons: 0.12.0 87 | 88 | flutter_test: 89 | sdk: flutter 90 | 91 | 92 | flutter_icons: 93 | android: true 94 | ios: true 95 | remove_alpha_ios: true 96 | image_path: 'assets/images/app_launcher_icon.png' 97 | 98 | 99 | # For information on the generic Dart part of this file, see the 100 | # following page: https://dart.dev/tools/pub/pubspec 101 | 102 | # The following section is specific to Flutter. 103 | flutter: 104 | 105 | # The following line ensures that the Material Icons font is 106 | # included with your application, so that you can use the icons in 107 | # the material Icons class. 108 | uses-material-design: true 109 | 110 | # To add assets to your application, add an assets section, like this: 111 | assets: 112 | - assets/fonts/ 113 | - assets/images/ 114 | - assets/videos/ 115 | - assets/audios/ 116 | - assets/lottie_animations/ 117 | - assets/rive_animations/ 118 | - assets/pdfs/ 119 | 120 | 121 | 122 | # An image asset can refer to one or more resolution-specific "variants", see 123 | # https://flutter.dev/assets-and-images/#resolution-aware. 124 | 125 | # For details regarding adding assets from package dependencies, see 126 | # https://flutter.dev/assets-and-images/#from-packages 127 | 128 | # To add custom fonts to your application, add a fonts section here, 129 | # in this "flutter" section. Each entry in this list should have a 130 | # "family" key with the font family name, and a "fonts" key with a 131 | # list giving the asset and other descriptors for the font. For 132 | # example: 133 | # fonts: 134 | # - family: Schyler 135 | # fonts: 136 | # - asset: fonts/Schyler-Regular.ttf 137 | # - asset: fonts/Schyler-Italic.ttf 138 | # style: italic 139 | # - family: Trajan Pro 140 | # fonts: 141 | # - asset: fonts/TrajanPro.ttf 142 | # - asset: fonts/TrajanPro_Bold.ttf 143 | # weight: 700 144 | # 145 | # For details regarding fonts from package dependencies, 146 | # see https://flutter.dev/custom-fonts/#from-packages 147 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:droidcon_ke2023_flutter_flow/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | }); 18 | } 19 | -------------------------------------------------------------------------------- /web/Group_753.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/web/Group_753.png -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/app_launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KenyaFlutterDev/droidconKe2023Flutter_flutterflowVersion/61c80ae87d4db8f30cd9d707d978c1f7bec3a014/web/icons/app_launcher_icon.png -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 39 | 40 | 41 | DroidconKe 42 | 43 | 44 | 45 | 46 | 47 | 48 | 51 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | --------------------------------------------------------------------------------