├── ios ├── Runner │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── RunnerTests │ └── RunnerTests.swift ├── .gitignore ├── Podfile └── Podfile.lock ├── firestore.indexes.json ├── functions ├── tsconfig.dev.json ├── .gitignore ├── tsconfig.json ├── .eslintrc.js ├── package.json └── src │ └── index.ts ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── manifest.json └── index.html ├── macos ├── Runner │ ├── Configs │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ ├── Warnings.xcconfig │ │ └── AppInfo.xcconfig │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_256.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_512.png │ │ │ ├── app_icon_64.png │ │ │ ├── app_icon_1024.png │ │ │ └── Contents.json │ ├── Release.entitlements │ ├── AppDelegate.swift │ ├── MainFlutterWindow.swift │ ├── DebugProfile.entitlements │ ├── Info.plist │ └── Base.lproj │ │ └── MainMenu.xib ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ ├── Flutter-Release.xcconfig │ └── GeneratedPluginRegistrant.swift ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── RunnerTests │ └── RunnerTests.swift ├── Podfile └── Podfile.lock ├── android ├── app │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── xml │ │ │ │ │ └── network_security_config.xml │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable-v21 │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── values │ │ │ │ │ └── styles.xml │ │ │ │ └── values-night │ │ │ │ │ └── styles.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── faker_app_flutter_firebase │ │ │ │ │ └── MainActivity.kt │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle.kts ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── build.gradle.kts └── settings.gradle.kts ├── firestore.rules ├── lib ├── src │ ├── screens │ │ ├── ui_auth_providers.dart │ │ ├── custom_profile_screen.dart │ │ ├── custom_sign_in_screen.dart │ │ └── home_screen.dart │ ├── routing │ │ ├── go_router_refresh_stream.dart │ │ └── app_router.dart │ ├── data │ │ ├── functions_repository.dart │ │ ├── job.dart │ │ └── firestore_repository.dart │ └── common_widgets │ │ └── alert_dialogs.dart └── main.dart ├── README.md ├── .vscode └── launch.json ├── pubspec.yaml ├── .metadata ├── LICENSE.md ├── test └── widget_test.dart ├── .gitignore ├── analysis_options.yaml └── pubspec.lock /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /firestore.indexes.json: -------------------------------------------------------------------------------- 1 | { 2 | "indexes": [], 3 | "fieldOverrides": [] 4 | } 5 | -------------------------------------------------------------------------------- /functions/tsconfig.dev.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | ".eslintrc.js" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/web/icons/Icon-512.png -------------------------------------------------------------------------------- /macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/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/bizz84/faker_app_flutter_firebase/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizz84/faker_app_flutter_firebase/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /functions/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled JavaScript files 2 | lib/**/*.js 3 | lib/**/*.js.map 4 | 5 | # TypeScript v1 declaration files 6 | typings/ 7 | 8 | # Node.js dependency directory 9 | node_modules/ 10 | *.local -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /firestore.rules: -------------------------------------------------------------------------------- 1 | rules_version = '2'; 2 | service cloud.firestore { 3 | match /databases/{database}/documents { 4 | match /users/{uid}/jobs/{jobId} { 5 | allow read, write: if request.auth.uid == uid; 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/faker_app_flutter_firebase/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.faker_app_flutter_firebase 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity : FlutterActivity() 6 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip 6 | -------------------------------------------------------------------------------- /lib/src/screens/ui_auth_providers.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_ui_auth/firebase_ui_auth.dart'; 2 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 3 | 4 | final authProvidersProvider = Provider>((ref) { 5 | return [EmailAuthProvider()]; 6 | }); 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10.0.2.2 5 | 6 | 7 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | .cxx/ 9 | 10 | # Remember to never publicly share your keystore. 11 | # See https://flutter.dev/to/reference-keystore 12 | key.properties 13 | **/*.keystore 14 | **/*.jks 15 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | keychain-access-groups 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /functions/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "noImplicitReturns": true, 5 | "noUnusedLocals": true, 6 | "outDir": "lib", 7 | "sourceMap": true, 8 | "strict": true, 9 | "target": "es2017", 10 | "skipLibCheck": true 11 | }, 12 | "compileOnSave": true, 13 | "include": [ 14 | "src" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @main 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | 10 | override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { 11 | return true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.client 10 | 11 | com.apple.security.network.server 12 | 13 | keychain-access-groups 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter & Firebase Crash Course 2 | 3 | Demo project for my Flutter & Firebase Crash Course, which is the first chapter of my [Flutter & Firebase Masterclass](https://codewithandrea.com/courses/flutter-firebase-masterclass/) 4 | 5 | ## Getting Started 6 | 7 | To follow along with the crash course, get the starter project by cloning this repo: 8 | 9 | ``` 10 | git clone https://github.com/bizz84/faker_app_flutter_firebase 11 | cd faker_app_flutter_firebase 12 | git checkout starter-project 13 | ``` 14 | 15 | ### [LICENSE: MIT](LICENSE.md) 16 | -------------------------------------------------------------------------------- /android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() 9 | rootProject.layout.buildDirectory.value(newBuildDir) 10 | 11 | subprojects { 12 | val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) 13 | project.layout.buildDirectory.value(newSubprojectBuildDir) 14 | } 15 | subprojects { 16 | project.evaluationDependsOn(":app") 17 | } 18 | 19 | tasks.register("clean") { 20 | delete(rootProject.layout.buildDirectory) 21 | } 22 | -------------------------------------------------------------------------------- /lib/src/routing/go_router_refresh_stream.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/foundation.dart'; 4 | 5 | /// This class was imported from the migration guide for GoRouter 5.0 6 | class GoRouterRefreshStream extends ChangeNotifier { 7 | GoRouterRefreshStream(Stream stream) { 8 | notifyListeners(); 9 | _subscription = stream.asBroadcastStream().listen( 10 | (dynamic _) => notifyListeners(), 11 | ); 12 | } 13 | 14 | late final StreamSubscription _subscription; 15 | 16 | @override 17 | void dispose() { 18 | _subscription.cancel(); 19 | super.dispose(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Debug", 9 | "request": "launch", 10 | "type": "dart" 11 | }, 12 | { 13 | "name": "Profile", 14 | "request": "launch", 15 | "type": "dart", 16 | "flutterMode": "profile" 17 | }, 18 | { 19 | "name": "Release", 20 | "request": "launch", 21 | "type": "dart", 22 | "flutterMode": "release" 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /lib/src/data/functions_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_functions/cloud_functions.dart'; 2 | import 'package:flutter/foundation.dart'; 3 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 4 | 5 | class FunctionsRepository { 6 | FunctionsRepository(this._functions); 7 | final FirebaseFunctions _functions; 8 | 9 | Future deleteAllUserJobs() async { 10 | final callable = _functions.httpsCallable('deleteAllUserJobs'); 11 | final result = await callable(); 12 | debugPrint(result.data.toString()); 13 | } 14 | } 15 | 16 | final functionsRepositoryProvider = Provider((ref) { 17 | return FunctionsRepository(FirebaseFunctions.instance); 18 | }); 19 | -------------------------------------------------------------------------------- /lib/src/screens/custom_profile_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:faker_app_flutter_firebase/src/screens/ui_auth_providers.dart'; 2 | import 'package:firebase_ui_auth/firebase_ui_auth.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 5 | 6 | class CustomProfileScreen extends ConsumerWidget { 7 | const CustomProfileScreen({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context, WidgetRef ref) { 11 | final authProviders = ref.watch(authProvidersProvider); 12 | return ProfileScreen( 13 | appBar: AppBar( 14 | title: const Text('Profile'), 15 | ), 16 | providers: authProviders, 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = faker_app_flutter_firebase 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /lib/src/screens/custom_sign_in_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:faker_app_flutter_firebase/src/screens/ui_auth_providers.dart'; 2 | import 'package:firebase_ui_auth/firebase_ui_auth.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 5 | 6 | class CustomSignInScreen extends ConsumerWidget { 7 | const CustomSignInScreen({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context, WidgetRef ref) { 11 | final authProviders = ref.watch(authProvidersProvider); 12 | return Scaffold( 13 | appBar: AppBar( 14 | title: const Text('Sign in'), 15 | ), 16 | body: SignInScreen( 17 | providers: authProviders, 18 | ), 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: faker_app_flutter_firebase 2 | description: A new Flutter project. 3 | publish_to: 'none' 4 | version: 1.0.0+1 5 | 6 | environment: 7 | sdk: '>=3.4.0 <4.0.0' 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | cupertino_icons: 1.0.8 13 | flutter_riverpod: 2.6.1 14 | go_router: 15.0.0 15 | equatable: 2.0.7 16 | firebase_core: 3.13.0 17 | firebase_auth: 5.5.2 18 | firebase_ui_auth: 1.16.1 19 | cloud_firestore: 5.6.6 20 | faker: 2.2.0 21 | firebase_ui_firestore: 1.7.1 22 | cloud_functions: 5.4.0 23 | 24 | dev_dependencies: 25 | flutter_test: 26 | sdk: flutter 27 | flutter_lints: 5.0.0 28 | 29 | flutter: 30 | uses-material-design: true 31 | 32 | fonts: 33 | - family: SocialIcons 34 | fonts: 35 | - asset: packages/firebase_ui_auth/fonts/SocialIcons.ttf -------------------------------------------------------------------------------- /macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import cloud_firestore 9 | import cloud_functions 10 | import desktop_webview_auth 11 | import firebase_auth 12 | import firebase_core 13 | 14 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 15 | FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) 16 | FirebaseFunctionsPlugin.register(with: registry.registrar(forPlugin: "FirebaseFunctionsPlugin")) 17 | DesktopWebviewAuthPlugin.register(with: registry.registrar(forPlugin: "DesktopWebviewAuthPlugin")) 18 | FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) 19 | FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) 20 | } 21 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /android/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | val flutterSdkPath = run { 3 | val properties = java.util.Properties() 4 | file("local.properties").inputStream().use { properties.load(it) } 5 | val flutterSdkPath = properties.getProperty("flutter.sdk") 6 | require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } 7 | flutterSdkPath 8 | } 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id("dev.flutter.flutter-plugin-loader") version "1.0.0" 21 | id("com.android.application") version "8.7.0" apply false 22 | // START: FlutterFire Configuration 23 | id("com.google.gms.google-services") version("4.3.15") apply false 24 | // END: FlutterFire Configuration 25 | id("org.jetbrains.kotlin.android") version "1.8.22" apply false 26 | } 27 | 28 | include(":app") 29 | -------------------------------------------------------------------------------- /lib/src/data/job.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | /// Model class for documents in the jobs collection 5 | class Job extends Equatable { 6 | const Job({required this.title, required this.company, this.createdAt}); 7 | final String title; 8 | final String company; 9 | final DateTime? createdAt; 10 | 11 | factory Job.fromMap(Map map) { 12 | final createdAt = map['createdAt']; 13 | return Job( 14 | title: map['title'] as String, 15 | company: map['company'] as String, 16 | // https://stackoverflow.com/a/71731076/436422 17 | createdAt: createdAt != null ? (createdAt as Timestamp).toDate() : null, 18 | ); 19 | } 20 | 21 | Map toMap() => { 22 | 'title': title, 23 | 'company': company, 24 | if (createdAt != null) 'createdAt': Timestamp.fromDate(createdAt!), 25 | }; 26 | 27 | @override 28 | List get props => [title, company, createdAt]; 29 | } 30 | -------------------------------------------------------------------------------- /.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: "4cf269e36de2573851eaef3c763994f8f9be494d" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d 17 | base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d 18 | - platform: web 19 | create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d 20 | base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d 21 | 22 | # User provided section 23 | 24 | # List of Local paths (relative to this file) that should be 25 | # ignored by the migrate tool. 26 | # 27 | # Files that are not part of the templates will be ignored by default. 28 | unmanaged_files: 29 | - 'lib/main.dart' 30 | - 'ios/Runner.xcodeproj/project.pbxproj' 31 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 Andrea Bizzotto [bizz84@gmail.com](mailto:bizz84@gmail.com) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "faker_app_flutter_firebase", 3 | "short_name": "faker_app_flutter_firebase", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /functions/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | es6: true, 5 | node: true, 6 | }, 7 | extends: [ 8 | "eslint:recommended", 9 | "plugin:import/errors", 10 | "plugin:import/warnings", 11 | "plugin:import/typescript", 12 | "google", 13 | "plugin:@typescript-eslint/recommended", 14 | ], 15 | parser: "@typescript-eslint/parser", 16 | parserOptions: { 17 | project: ["tsconfig.json", "tsconfig.dev.json"], 18 | sourceType: "module", 19 | tsconfigRootDir: __dirname, 20 | }, 21 | ignorePatterns: [ 22 | "/lib/**/*", // Ignore built files. 23 | "/generated/**/*", // Ignore generated files. 24 | ], 25 | plugins: [ 26 | "@typescript-eslint", 27 | "import", 28 | ], 29 | rules: { 30 | "quotes": ["error", "double"], 31 | "import/no-unresolved": 0, 32 | "indent": ["error", 2], 33 | "semi": ["off"], 34 | "require-jsdoc": ["off"], 35 | "object-curly-spacing": ["off"], 36 | "spaced-comment": ["off"], 37 | "max-len": [ 38 | "error", 39 | { 40 | "code": 140, 41 | }, 42 | ], 43 | }, 44 | }; 45 | -------------------------------------------------------------------------------- /macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /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 in the flutter_test package. 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:faker_app_flutter_firebase/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(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .build/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | .swiftpm/ 13 | migrate_working_dir/ 14 | 15 | # IntelliJ related 16 | *.iml 17 | *.ipr 18 | *.iws 19 | .idea/ 20 | 21 | # The .vscode folder contains launch configuration and tasks you configure in 22 | # VS Code which you may wish to be included in version control, so this line 23 | # is commented out by default. 24 | #.vscode/ 25 | .vscode/settings.json 26 | 27 | # Flutter/Dart/Pub related 28 | **/doc/api/ 29 | **/ios/Flutter/.last_build_id 30 | .dart_tool/ 31 | .flutter-plugins 32 | .flutter-plugins-dependencies 33 | .packages 34 | .pub-cache/ 35 | .pub/ 36 | /build/ 37 | 38 | # Symbolication related 39 | app.*.symbols 40 | 41 | # Obfuscation related 42 | app.*.map.json 43 | 44 | # Android Studio will place build artifacts here 45 | /android/app/debug 46 | /android/app/profile 47 | /android/app/release 48 | 49 | # Firebase config 50 | .firebaserc 51 | firebase.json 52 | 53 | # Ignore the Firebase emulator seed folder used in the course 54 | seed/ 55 | 56 | # Firebase config files 57 | lib/firebase_options.dart 58 | ios/Runner/GoogleService-Info.plist 59 | ios/firebase_app_id_file.json 60 | macos/Runner/GoogleService-Info.plist 61 | macos/firebase_app_id_file.json 62 | android/app/google-services.json 63 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | faker_app_flutter_firebase 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "scripts": { 4 | "lint": "eslint --ext .js,.ts .", 5 | "build": "tsc", 6 | "build:watch": "tsc --watch", 7 | "serve": "npm run build && firebase emulators:start --only functions", 8 | "shell": "npm run build && firebase functions:shell", 9 | "start": "npm run shell", 10 | "deploy": "firebase deploy --only functions", 11 | "logs": "firebase functions:log" 12 | }, 13 | "engines": { 14 | "node": "20" 15 | }, 16 | "main": "lib/index.js", 17 | "dependencies": { 18 | "firebase-admin": "^12.6.0", 19 | "firebase-functions": "^6.0.1" 20 | }, 21 | "devDependencies": { 22 | "@types/babel__generator": "^7.27.0", 23 | "@types/babel__template": "^7.4.4", 24 | "@types/body-parser": "^1.19.5", 25 | "@types/caseless": "^0.12.5", 26 | "@types/istanbul-lib-report": "^3.0.3", 27 | "@types/qs": "^6.9.18", 28 | "@types/range-parser": "^1.2.7", 29 | "@types/send": "^0.17.4", 30 | "@types/serve-static": "^1.15.7", 31 | "@types/tough-cookie": "^4.0.5", 32 | "@types/yargs-parser": "^21.0.3", 33 | "@typescript-eslint/eslint-plugin": "^5.12.0", 34 | "@typescript-eslint/parser": "^5.12.0", 35 | "eslint": "^8.9.0", 36 | "eslint-config-google": "^0.14.0", 37 | "eslint-plugin-import": "^2.25.4", 38 | "firebase-functions-test": "^3.1.0", 39 | "typescript": "^4.9.0" 40 | }, 41 | "private": true 42 | } 43 | -------------------------------------------------------------------------------- /lib/src/data/firestore_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | import 'package:faker_app_flutter_firebase/src/data/job.dart'; 3 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 4 | 5 | class FirestoreRepository { 6 | FirestoreRepository(this._firestore); 7 | final FirebaseFirestore _firestore; 8 | 9 | Future addJob(String uid, String title, String company) => 10 | _firestore.collection('users/$uid/jobs').add({ 11 | 'title': title, 12 | 'company': company, 13 | 'createdAt': FieldValue.serverTimestamp(), 14 | }); 15 | 16 | Future updateJob( 17 | String uid, String jobId, String title, String company) => 18 | _firestore.doc('users/$uid/jobs/$jobId').update({ 19 | 'title': title, 20 | 'company': company, 21 | }); 22 | 23 | Future deleteJob(String uid, String jobId) => 24 | _firestore.doc('users/$uid/jobs/$jobId').delete(); 25 | 26 | Query jobsQuery(String uid) { 27 | return _firestore 28 | .collection('users/$uid/jobs') 29 | .withConverter( 30 | fromFirestore: (snapshot, _) => Job.fromMap(snapshot.data()!), 31 | toFirestore: (job, _) => job.toMap(), 32 | ) 33 | .orderBy('createdAt', descending: true); 34 | } 35 | } 36 | 37 | final firestoreRepositoryProvider = Provider((ref) { 38 | return FirestoreRepository(FirebaseFirestore.instance); 39 | }); 40 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /functions/src/index.ts: -------------------------------------------------------------------------------- 1 | import * as admin from "firebase-admin" 2 | import * as logger from "firebase-functions/logger" 3 | import * as functions from "firebase-functions/v2" 4 | 5 | admin.initializeApp() 6 | 7 | export const makeJobTitleUppercase = functions.firestore.onDocumentWritten("/users/{uid}/jobs/{jobId}", (e) => { 8 | const change = e.data 9 | if (change === undefined) { 10 | return 11 | } 12 | const data = change.after.data() 13 | if (data === undefined) { 14 | // If the document has been deleted, do nothing 15 | return 16 | } 17 | const uppercase = data.title.toUpperCase() 18 | // If the title is already uppercase, do nothing (prevents an infinite loop) 19 | if (uppercase == data.title) { 20 | return 21 | } 22 | // else, write back to the same document 23 | logger.log(`Uppercasing ${change.after.ref.path}: ${data.title} => ${uppercase}`) 24 | return change.after.ref.set({title: uppercase}, {merge: true}) 25 | }) 26 | 27 | export const deleteAllUserJobs = functions.https.onCall(async (context: functions.https.CallableRequest) => { 28 | const uid = context.auth?.uid 29 | if (uid === undefined) { 30 | throw new functions.https.HttpsError("unauthenticated", "You need to be authenticated to perform this action") 31 | } 32 | const firestore = admin.firestore() 33 | const collectionRef = firestore.collection(`/users/${uid}/jobs`) 34 | const docRefs = await collectionRef.listDocuments() 35 | for (const docRef of docRefs) { 36 | await docRef.delete() 37 | } 38 | logger.log(`Deleted ${docRefs.length} docs at ${collectionRef.path}`) 39 | return {"count": docRefs.length} 40 | }) 41 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '12.0' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def flutter_root 13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) 14 | unless File.exist?(generated_xcode_build_settings_path) 15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" 16 | end 17 | 18 | File.foreach(generated_xcode_build_settings_path) do |line| 19 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 20 | return matches[1].strip if matches 21 | end 22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" 23 | end 24 | 25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 26 | 27 | flutter_macos_podfile_setup 28 | 29 | target 'Runner' do 30 | pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '11.10.0' 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 35 | target 'RunnerTests' do 36 | inherit! :search_paths 37 | end 38 | end 39 | 40 | post_install do |installer| 41 | installer.pods_project.targets.each do |target| 42 | flutter_additional_macos_build_settings(target) 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /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 | pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '11.10.0' 32 | use_frameworks! 33 | use_modular_headers! 34 | 35 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 36 | target 'RunnerTests' do 37 | inherit! :search_paths 38 | end 39 | end 40 | 41 | post_install do |installer| 42 | installer.pods_project.targets.each do |target| 43 | flutter_additional_ios_build_settings(target) 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /android/app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("com.android.application") 3 | // START: FlutterFire Configuration 4 | id("com.google.gms.google-services") 5 | // END: FlutterFire Configuration 6 | id("kotlin-android") 7 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. 8 | id("dev.flutter.flutter-gradle-plugin") 9 | } 10 | 11 | android { 12 | namespace = "com.example.faker_app_flutter_firebase" 13 | compileSdk = flutter.compileSdkVersion 14 | ndkVersion = "27.0.12077973" 15 | 16 | compileOptions { 17 | sourceCompatibility = JavaVersion.VERSION_17 18 | targetCompatibility = JavaVersion.VERSION_17 19 | } 20 | 21 | kotlinOptions { 22 | jvmTarget = JavaVersion.VERSION_17.toString() 23 | } 24 | 25 | defaultConfig { 26 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 27 | applicationId = "com.example.faker_app_flutter_firebase" 28 | // You can update the following values to match your application needs. 29 | // For more information, see: https://flutter.dev/to/review-gradle-config. 30 | minSdk = 24 31 | targetSdk = flutter.targetSdkVersion 32 | versionCode = flutter.versionCode 33 | versionName = flutter.versionName 34 | } 35 | 36 | buildTypes { 37 | release { 38 | // TODO: Add your own signing config for the release build. 39 | // Signing with the debug keys for now, so `flutter run --release` works. 40 | signingConfig = signingConfigs.getByName("debug") 41 | } 42 | } 43 | } 44 | 45 | flutter { 46 | source = "../.." 47 | } 48 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Faker App Flutter Firebase 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | faker_app_flutter_firebase 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | CADisableMinimumFrameDurationOnPhone 45 | 46 | UIApplicationSupportsIndirectInputEvents 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /lib/src/routing/app_router.dart: -------------------------------------------------------------------------------- 1 | import 'package:faker_app_flutter_firebase/src/routing/go_router_refresh_stream.dart'; 2 | import 'package:faker_app_flutter_firebase/src/screens/custom_profile_screen.dart'; 3 | import 'package:faker_app_flutter_firebase/src/screens/custom_sign_in_screen.dart'; 4 | import 'package:faker_app_flutter_firebase/src/screens/home_screen.dart'; 5 | import 'package:firebase_auth/firebase_auth.dart'; 6 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 7 | import 'package:go_router/go_router.dart'; 8 | 9 | enum AppRoute { 10 | signIn, 11 | home, 12 | profile, 13 | } 14 | 15 | final firebaseAuthProvider = Provider((ref) { 16 | return FirebaseAuth.instance; 17 | }); 18 | 19 | final goRouterProvider = Provider((ref) { 20 | final firebaseAuth = ref.watch(firebaseAuthProvider); 21 | return GoRouter( 22 | initialLocation: '/sign-in', 23 | debugLogDiagnostics: true, 24 | redirect: (context, state) { 25 | final isLoggedIn = firebaseAuth.currentUser != null; 26 | if (isLoggedIn) { 27 | if (state.uri.path == '/sign-in') { 28 | return '/home'; 29 | } 30 | } else { 31 | if (state.uri.path.startsWith('/home')) { 32 | return '/sign-in'; 33 | } 34 | } 35 | return null; 36 | }, 37 | refreshListenable: GoRouterRefreshStream(firebaseAuth.authStateChanges()), 38 | routes: [ 39 | GoRoute( 40 | path: '/sign-in', 41 | name: AppRoute.signIn.name, 42 | builder: (context, state) => const CustomSignInScreen(), 43 | ), 44 | GoRoute( 45 | path: '/home', 46 | name: AppRoute.home.name, 47 | builder: (context, state) => const HomeScreen(), 48 | routes: [ 49 | GoRoute( 50 | path: 'profile', 51 | name: AppRoute.profile.name, 52 | builder: (context, state) => const CustomProfileScreen(), 53 | ), 54 | ], 55 | ), 56 | ], 57 | ); 58 | }); 59 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | import 'package:cloud_functions/cloud_functions.dart'; 3 | import 'package:faker_app_flutter_firebase/firebase_options.dart'; 4 | import 'package:faker_app_flutter_firebase/src/routing/app_router.dart'; 5 | import 'package:firebase_auth/firebase_auth.dart'; 6 | import 'package:firebase_core/firebase_core.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 9 | 10 | Future setupEmulators() async { 11 | await FirebaseAuth.instance.useAuthEmulator('127.0.0.1', 9099); 12 | FirebaseFirestore.instance.useFirestoreEmulator('127.0.0.1', 8080); 13 | FirebaseFunctions.instance.useFunctionsEmulator('127.0.0.1', 5001); 14 | } 15 | 16 | void main() async { 17 | WidgetsFlutterBinding.ensureInitialized(); 18 | await Firebase.initializeApp( 19 | options: DefaultFirebaseOptions.currentPlatform, 20 | ); 21 | // await setupEmulators(); 22 | runApp(const ProviderScope(child: MyApp())); 23 | } 24 | 25 | class MyApp extends ConsumerWidget { 26 | const MyApp({super.key}); 27 | 28 | @override 29 | Widget build(BuildContext context, WidgetRef ref) { 30 | final goRouter = ref.watch(goRouterProvider); 31 | return MaterialApp.router( 32 | routerConfig: goRouter, 33 | debugShowCheckedModeBanner: false, 34 | themeMode: ThemeMode.light, 35 | theme: ThemeData( 36 | primarySwatch: Colors.indigo, 37 | appBarTheme: const AppBarTheme( 38 | backgroundColor: Colors.indigo, 39 | foregroundColor: Colors.white, 40 | ), 41 | elevatedButtonTheme: ElevatedButtonThemeData( 42 | style: ElevatedButton.styleFrom( 43 | backgroundColor: Colors.indigo, // background (button) color 44 | foregroundColor: Colors.white, // foreground (text) color 45 | ), 46 | ), 47 | floatingActionButtonTheme: const FloatingActionButtonThemeData( 48 | backgroundColor: Colors.indigo, // background (button) color 49 | foregroundColor: Colors.white, // foreground (text) color 50 | ), 51 | ), 52 | ); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 16 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 31 | 34 | 35 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/src/common_widgets/alert_dialogs.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/foundation.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | const kDialogDefaultKey = Key('dialog-default-key'); 8 | 9 | /// Generic function to show a platform-aware Material or Cupertino dialog 10 | Future showAlertDialog({ 11 | required BuildContext context, 12 | required String title, 13 | String? content, 14 | String? cancelActionText, 15 | String defaultActionText = 'OK', 16 | }) async { 17 | if (kIsWeb || !Platform.isIOS) { 18 | return showDialog( 19 | context: context, 20 | barrierDismissible: cancelActionText != null, 21 | builder: (context) => AlertDialog( 22 | title: Text(title), 23 | content: content != null ? Text(content) : null, 24 | actions: [ 25 | if (cancelActionText != null) 26 | TextButton( 27 | child: Text(cancelActionText), 28 | onPressed: () => Navigator.of(context).pop(false), 29 | ), 30 | TextButton( 31 | key: kDialogDefaultKey, 32 | child: Text(defaultActionText), 33 | onPressed: () => Navigator.of(context).pop(true), 34 | ), 35 | ], 36 | ), 37 | ); 38 | } 39 | return showCupertinoDialog( 40 | context: context, 41 | barrierDismissible: cancelActionText != null, 42 | builder: (context) => CupertinoAlertDialog( 43 | title: Text(title), 44 | content: content != null ? Text(content) : null, 45 | actions: [ 46 | if (cancelActionText != null) 47 | CupertinoDialogAction( 48 | child: Text(cancelActionText), 49 | onPressed: () => Navigator.of(context).pop(false), 50 | ), 51 | CupertinoDialogAction( 52 | key: kDialogDefaultKey, 53 | child: Text(defaultActionText), 54 | onPressed: () => Navigator.of(context).pop(true), 55 | ), 56 | ], 57 | ), 58 | ); 59 | } 60 | 61 | /// Generic function to show a platform-aware Material or Cupertino error dialog 62 | Future showExceptionAlertDialog({ 63 | required BuildContext context, 64 | required String title, 65 | required dynamic exception, 66 | }) => 67 | showAlertDialog( 68 | context: context, 69 | title: title, 70 | content: exception.toString(), 71 | defaultActionText: 'OK', 72 | ); 73 | 74 | Future showNotImplementedAlertDialog({required BuildContext context}) => 75 | showAlertDialog( 76 | context: context, 77 | title: 'Not implemented', 78 | ); 79 | -------------------------------------------------------------------------------- /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.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 43 | 49 | 50 | 51 | 52 | 53 | 64 | 66 | 72 | 73 | 74 | 75 | 81 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 43 | 49 | 50 | 51 | 52 | 53 | 64 | 66 | 72 | 73 | 74 | 75 | 81 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /lib/src/screens/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | import 'package:cloud_functions/cloud_functions.dart'; 3 | import 'package:faker/faker.dart' hide Job; 4 | import 'package:faker_app_flutter_firebase/src/common_widgets/alert_dialogs.dart'; 5 | import 'package:faker_app_flutter_firebase/src/data/firestore_repository.dart'; 6 | import 'package:faker_app_flutter_firebase/src/data/functions_repository.dart'; 7 | import 'package:faker_app_flutter_firebase/src/data/job.dart'; 8 | import 'package:faker_app_flutter_firebase/src/routing/app_router.dart'; 9 | import 'package:firebase_ui_firestore/firebase_ui_firestore.dart'; 10 | import 'package:flutter/material.dart'; 11 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 12 | import 'package:go_router/go_router.dart'; 13 | 14 | class HomeScreen extends ConsumerWidget { 15 | const HomeScreen({super.key}); 16 | 17 | @override 18 | Widget build(BuildContext context, WidgetRef ref) { 19 | return Scaffold( 20 | appBar: AppBar(title: const Text('My Jobs'), actions: [ 21 | IconButton( 22 | icon: const Icon(Icons.delete), 23 | onPressed: () async { 24 | try { 25 | await ref.read(functionsRepositoryProvider).deleteAllUserJobs(); 26 | } catch (e) { 27 | if (e is FirebaseFunctionsException) { 28 | showAlertDialog( 29 | context: context, 30 | title: 'An error occurred', 31 | content: e.message, 32 | ); 33 | } 34 | } 35 | }, 36 | ), 37 | IconButton( 38 | icon: const Icon(Icons.person), 39 | onPressed: () => context.goNamed(AppRoute.profile.name), 40 | ) 41 | ]), 42 | body: const JobsListView(), 43 | floatingActionButton: FloatingActionButton( 44 | child: const Icon(Icons.add), 45 | onPressed: () { 46 | final user = ref.read(firebaseAuthProvider).currentUser; 47 | final faker = Faker(); 48 | final title = faker.job.title(); 49 | final company = faker.company.name(); 50 | ref.read(firestoreRepositoryProvider).addJob( 51 | user!.uid, 52 | title, 53 | company, 54 | ); 55 | }, 56 | ), 57 | ); 58 | } 59 | } 60 | 61 | class JobsListView extends ConsumerWidget { 62 | const JobsListView({super.key}); 63 | 64 | @override 65 | Widget build(BuildContext context, WidgetRef ref) { 66 | final firestoreRepository = ref.watch(firestoreRepositoryProvider); 67 | final user = ref.watch(firebaseAuthProvider).currentUser; 68 | return FirestoreListView( 69 | query: firestoreRepository.jobsQuery(user!.uid), 70 | pageSize: 20, 71 | errorBuilder: (context, error, stackTrace) => Center( 72 | child: Text(error.toString()), 73 | ), 74 | emptyBuilder: (context) => const Center(child: Text('No data')), 75 | itemBuilder: (BuildContext context, QueryDocumentSnapshot doc) { 76 | final job = doc.data(); 77 | return Dismissible( 78 | key: Key(doc.id), 79 | background: const ColoredBox(color: Colors.red), 80 | direction: DismissDirection.endToStart, 81 | onDismissed: (direction) { 82 | final user = ref.read(firebaseAuthProvider).currentUser; 83 | ref.read(firestoreRepositoryProvider).deleteJob(user!.uid, doc.id); 84 | }, 85 | child: ListTile( 86 | title: Text(job.title), 87 | subtitle: Text(job.company), 88 | trailing: job.createdAt != null 89 | ? Text(job.createdAt.toString(), 90 | style: Theme.of(context).textTheme.bodySmall) 91 | : null, 92 | onTap: () { 93 | final user = ref.read(firebaseAuthProvider).currentUser; 94 | final faker = Faker(); 95 | final title = faker.job.title(); 96 | final company = faker.company.name(); 97 | ref.read(firestoreRepositoryProvider).updateJob( 98 | user!.uid, 99 | doc.id, 100 | title, 101 | company, 102 | ); 103 | }, 104 | ), 105 | ); 106 | }, 107 | ); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /macos/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - cloud_firestore (5.6.6): 3 | - Firebase/CoreOnly (~> 11.10.0) 4 | - Firebase/Firestore (~> 11.10.0) 5 | - firebase_core 6 | - FlutterMacOS 7 | - cloud_functions (5.4.0): 8 | - Firebase/CoreOnly (~> 11.10.0) 9 | - Firebase/Functions (~> 11.10.0) 10 | - firebase_core 11 | - FlutterMacOS 12 | - desktop_webview_auth (0.0.1): 13 | - FlutterMacOS 14 | - Firebase/Auth (11.10.0): 15 | - Firebase/CoreOnly 16 | - FirebaseAuth (~> 11.10.0) 17 | - Firebase/CoreOnly (11.10.0): 18 | - FirebaseCore (~> 11.10.0) 19 | - Firebase/Firestore (11.10.0): 20 | - Firebase/CoreOnly 21 | - FirebaseFirestore (~> 11.10.0) 22 | - Firebase/Functions (11.10.0): 23 | - Firebase/CoreOnly 24 | - FirebaseFunctions (~> 11.10.0) 25 | - firebase_auth (5.5.2): 26 | - Firebase/Auth (~> 11.10.0) 27 | - Firebase/CoreOnly (~> 11.10.0) 28 | - firebase_core 29 | - FlutterMacOS 30 | - firebase_core (3.13.0): 31 | - Firebase/CoreOnly (~> 11.10.0) 32 | - FlutterMacOS 33 | - FirebaseAppCheckInterop (11.11.0) 34 | - FirebaseAuth (11.10.0): 35 | - FirebaseAppCheckInterop (~> 11.0) 36 | - FirebaseAuthInterop (~> 11.0) 37 | - FirebaseCore (~> 11.10.0) 38 | - FirebaseCoreExtension (~> 11.10.0) 39 | - GoogleUtilities/AppDelegateSwizzler (~> 8.0) 40 | - GoogleUtilities/Environment (~> 8.0) 41 | - GTMSessionFetcher/Core (< 5.0, >= 3.4) 42 | - RecaptchaInterop (~> 101.0) 43 | - FirebaseAuthInterop (11.11.0) 44 | - FirebaseCore (11.10.0): 45 | - FirebaseCoreInternal (~> 11.10.0) 46 | - GoogleUtilities/Environment (~> 8.0) 47 | - GoogleUtilities/Logger (~> 8.0) 48 | - FirebaseCoreExtension (11.10.0): 49 | - FirebaseCore (~> 11.10.0) 50 | - FirebaseCoreInternal (11.10.0): 51 | - "GoogleUtilities/NSData+zlib (~> 8.0)" 52 | - FirebaseFirestore (11.10.0): 53 | - FirebaseFirestoreBinary (= 11.10.0) 54 | - FirebaseFirestoreAbseilBinary (1.2024072200.0) 55 | - FirebaseFirestoreBinary (11.10.0): 56 | - FirebaseCore (= 11.10.0) 57 | - FirebaseCoreExtension (= 11.10.0) 58 | - FirebaseFirestoreInternalBinary (= 11.10.0) 59 | - FirebaseSharedSwift (= 11.10.0) 60 | - FirebaseFirestoreGRPCBoringSSLBinary (1.69.0) 61 | - FirebaseFirestoreGRPCCoreBinary (1.69.0): 62 | - FirebaseFirestoreAbseilBinary (= 1.2024072200.0) 63 | - FirebaseFirestoreGRPCBoringSSLBinary (= 1.69.0) 64 | - FirebaseFirestoreGRPCCPPBinary (1.69.0): 65 | - FirebaseFirestoreAbseilBinary (= 1.2024072200.0) 66 | - FirebaseFirestoreGRPCCoreBinary (= 1.69.0) 67 | - FirebaseFirestoreInternalBinary (11.10.0): 68 | - FirebaseCore (= 11.10.0) 69 | - FirebaseFirestoreAbseilBinary (= 1.2024072200.0) 70 | - FirebaseFirestoreGRPCCPPBinary (= 1.69.0) 71 | - leveldb-library (~> 1.22) 72 | - nanopb (~> 3.30910.0) 73 | - FirebaseFunctions (11.10.0): 74 | - FirebaseAppCheckInterop (~> 11.0) 75 | - FirebaseAuthInterop (~> 11.0) 76 | - FirebaseCore (~> 11.10.0) 77 | - FirebaseCoreExtension (~> 11.10.0) 78 | - FirebaseMessagingInterop (~> 11.0) 79 | - FirebaseSharedSwift (~> 11.0) 80 | - GTMSessionFetcher/Core (< 5.0, >= 3.4) 81 | - FirebaseMessagingInterop (11.11.0) 82 | - FirebaseSharedSwift (11.10.0) 83 | - FlutterMacOS (1.0.0) 84 | - GoogleUtilities/AppDelegateSwizzler (8.0.2): 85 | - GoogleUtilities/Environment 86 | - GoogleUtilities/Logger 87 | - GoogleUtilities/Network 88 | - GoogleUtilities/Privacy 89 | - GoogleUtilities/Environment (8.0.2): 90 | - GoogleUtilities/Privacy 91 | - GoogleUtilities/Logger (8.0.2): 92 | - GoogleUtilities/Environment 93 | - GoogleUtilities/Privacy 94 | - GoogleUtilities/Network (8.0.2): 95 | - GoogleUtilities/Logger 96 | - "GoogleUtilities/NSData+zlib" 97 | - GoogleUtilities/Privacy 98 | - GoogleUtilities/Reachability 99 | - "GoogleUtilities/NSData+zlib (8.0.2)": 100 | - GoogleUtilities/Privacy 101 | - GoogleUtilities/Privacy (8.0.2) 102 | - GoogleUtilities/Reachability (8.0.2): 103 | - GoogleUtilities/Logger 104 | - GoogleUtilities/Privacy 105 | - GTMSessionFetcher/Core (4.4.0) 106 | - leveldb-library (1.22.6) 107 | - nanopb (3.30910.0): 108 | - nanopb/decode (= 3.30910.0) 109 | - nanopb/encode (= 3.30910.0) 110 | - nanopb/decode (3.30910.0) 111 | - nanopb/encode (3.30910.0) 112 | 113 | DEPENDENCIES: 114 | - cloud_firestore (from `Flutter/ephemeral/.symlinks/plugins/cloud_firestore/macos`) 115 | - cloud_functions (from `Flutter/ephemeral/.symlinks/plugins/cloud_functions/macos`) 116 | - desktop_webview_auth (from `Flutter/ephemeral/.symlinks/plugins/desktop_webview_auth/macos`) 117 | - firebase_auth (from `Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos`) 118 | - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) 119 | - FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `11.10.0`) 120 | - FlutterMacOS (from `Flutter/ephemeral`) 121 | 122 | SPEC REPOS: 123 | trunk: 124 | - Firebase 125 | - FirebaseAppCheckInterop 126 | - FirebaseAuth 127 | - FirebaseAuthInterop 128 | - FirebaseCore 129 | - FirebaseCoreExtension 130 | - FirebaseCoreInternal 131 | - FirebaseFirestoreAbseilBinary 132 | - FirebaseFirestoreBinary 133 | - FirebaseFirestoreGRPCBoringSSLBinary 134 | - FirebaseFirestoreGRPCCoreBinary 135 | - FirebaseFirestoreGRPCCPPBinary 136 | - FirebaseFirestoreInternalBinary 137 | - FirebaseFunctions 138 | - FirebaseMessagingInterop 139 | - FirebaseSharedSwift 140 | - GoogleUtilities 141 | - GTMSessionFetcher 142 | - leveldb-library 143 | - nanopb 144 | 145 | EXTERNAL SOURCES: 146 | cloud_firestore: 147 | :path: Flutter/ephemeral/.symlinks/plugins/cloud_firestore/macos 148 | cloud_functions: 149 | :path: Flutter/ephemeral/.symlinks/plugins/cloud_functions/macos 150 | desktop_webview_auth: 151 | :path: Flutter/ephemeral/.symlinks/plugins/desktop_webview_auth/macos 152 | firebase_auth: 153 | :path: Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos 154 | firebase_core: 155 | :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos 156 | FirebaseFirestore: 157 | :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git 158 | :tag: 11.10.0 159 | FlutterMacOS: 160 | :path: Flutter/ephemeral 161 | 162 | CHECKOUT OPTIONS: 163 | FirebaseFirestore: 164 | :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git 165 | :tag: 11.10.0 166 | 167 | SPEC CHECKSUMS: 168 | cloud_firestore: 3ed0fa1005b94e117ec31c2aca9385f82be8da52 169 | cloud_functions: 2f830e885b0e339807983bfd6fab5c8e1de1b12e 170 | desktop_webview_auth: d7fba72ef3ee2292cf66d464eede3c1a4690da83 171 | Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2 172 | firebase_auth: 22945027646e71960caae1b9f2b2498d7a52a4c7 173 | firebase_core: efd50ad8177dc489af1b9163a560359cf1b30597 174 | FirebaseAppCheckInterop: f23709c9ce92d810aa53ff4ce12ad3e666a3c7be 175 | FirebaseAuth: c4146bdfdc87329f9962babd24dae89373f49a32 176 | FirebaseAuthInterop: ac22ed402c2f4e3a8c63ebd3278af9a06073c1be 177 | FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7 178 | FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac 179 | FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679 180 | FirebaseFirestore: e5c3d65fef6c6e07c47af2130aaadfb89dd07ea7 181 | FirebaseFirestoreAbseilBinary: 4cfa8823cedc1b774843e04fe578ad279b387f97 182 | FirebaseFirestoreBinary: 6cf15472267bbb89ce9ac5e645eb0abae29208ce 183 | FirebaseFirestoreGRPCBoringSSLBinary: c3dfef3ff448ae2c1c85f9baf9fac5afc4db99fa 184 | FirebaseFirestoreGRPCCoreBinary: 565534e160a0415d12185f7f171c52a567382fbd 185 | FirebaseFirestoreGRPCCPPBinary: 6c0134e8d230ee58b9d51dec2a30a48efd6d5dc7 186 | FirebaseFirestoreInternalBinary: 96b309279c4efdf00b83ab80e8af4d0a73d30258 187 | FirebaseFunctions: e89e0cf2091c9fb19aa58df270317c0a91963f4f 188 | FirebaseMessagingInterop: 87d4a0a3a78644576c681974ce895599f9a867c9 189 | FirebaseSharedSwift: 1baacae75939499b5def867cbe34129464536a38 190 | FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 191 | GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d 192 | GTMSessionFetcher: 75b671f9e551e4c49153d4c4f8659ef4f559b970 193 | leveldb-library: cc8b8f8e013647a295ad3f8cd2ddf49a6f19be19 194 | nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 195 | 196 | PODFILE CHECKSUM: b8efb74bf1c733a3460dd06826ba31d6d7648839 197 | 198 | COCOAPODS: 1.16.2 199 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - cloud_firestore (5.6.6): 3 | - Firebase/Firestore (= 11.10.0) 4 | - firebase_core 5 | - Flutter 6 | - cloud_functions (5.4.0): 7 | - Firebase/Functions (= 11.10.0) 8 | - firebase_core 9 | - Flutter 10 | - desktop_webview_auth (0.0.1): 11 | - Flutter 12 | - Firebase/Auth (11.10.0): 13 | - Firebase/CoreOnly 14 | - FirebaseAuth (~> 11.10.0) 15 | - Firebase/CoreOnly (11.10.0): 16 | - FirebaseCore (~> 11.10.0) 17 | - Firebase/DynamicLinks (11.10.0): 18 | - Firebase/CoreOnly 19 | - FirebaseDynamicLinks (~> 11.10.0) 20 | - Firebase/Firestore (11.10.0): 21 | - Firebase/CoreOnly 22 | - FirebaseFirestore (~> 11.10.0) 23 | - Firebase/Functions (11.10.0): 24 | - Firebase/CoreOnly 25 | - FirebaseFunctions (~> 11.10.0) 26 | - firebase_auth (5.5.2): 27 | - Firebase/Auth (= 11.10.0) 28 | - firebase_core 29 | - Flutter 30 | - firebase_core (3.13.0): 31 | - Firebase/CoreOnly (= 11.10.0) 32 | - Flutter 33 | - firebase_dynamic_links (6.1.5): 34 | - Firebase/DynamicLinks (= 11.10.0) 35 | - firebase_core 36 | - Flutter 37 | - FirebaseAppCheckInterop (11.11.0) 38 | - FirebaseAuth (11.10.0): 39 | - FirebaseAppCheckInterop (~> 11.0) 40 | - FirebaseAuthInterop (~> 11.0) 41 | - FirebaseCore (~> 11.10.0) 42 | - FirebaseCoreExtension (~> 11.10.0) 43 | - GoogleUtilities/AppDelegateSwizzler (~> 8.0) 44 | - GoogleUtilities/Environment (~> 8.0) 45 | - GTMSessionFetcher/Core (< 5.0, >= 3.4) 46 | - RecaptchaInterop (~> 101.0) 47 | - FirebaseAuthInterop (11.11.0) 48 | - FirebaseCore (11.10.0): 49 | - FirebaseCoreInternal (~> 11.10.0) 50 | - GoogleUtilities/Environment (~> 8.0) 51 | - GoogleUtilities/Logger (~> 8.0) 52 | - FirebaseCoreExtension (11.10.0): 53 | - FirebaseCore (~> 11.10.0) 54 | - FirebaseCoreInternal (11.10.0): 55 | - "GoogleUtilities/NSData+zlib (~> 8.0)" 56 | - FirebaseDynamicLinks (11.10.0): 57 | - FirebaseCore (~> 11.10.0) 58 | - FirebaseFirestore (11.10.0): 59 | - FirebaseFirestoreBinary (= 11.10.0) 60 | - FirebaseFirestoreAbseilBinary (1.2024072200.0) 61 | - FirebaseFirestoreBinary (11.10.0): 62 | - FirebaseCore (= 11.10.0) 63 | - FirebaseCoreExtension (= 11.10.0) 64 | - FirebaseFirestoreInternalBinary (= 11.10.0) 65 | - FirebaseSharedSwift (= 11.10.0) 66 | - FirebaseFirestoreGRPCBoringSSLBinary (1.69.0) 67 | - FirebaseFirestoreGRPCCoreBinary (1.69.0): 68 | - FirebaseFirestoreAbseilBinary (= 1.2024072200.0) 69 | - FirebaseFirestoreGRPCBoringSSLBinary (= 1.69.0) 70 | - FirebaseFirestoreGRPCCPPBinary (1.69.0): 71 | - FirebaseFirestoreAbseilBinary (= 1.2024072200.0) 72 | - FirebaseFirestoreGRPCCoreBinary (= 1.69.0) 73 | - FirebaseFirestoreInternalBinary (11.10.0): 74 | - FirebaseCore (= 11.10.0) 75 | - FirebaseFirestoreAbseilBinary (= 1.2024072200.0) 76 | - FirebaseFirestoreGRPCCPPBinary (= 1.69.0) 77 | - leveldb-library (~> 1.22) 78 | - nanopb (~> 3.30910.0) 79 | - FirebaseFunctions (11.10.0): 80 | - FirebaseAppCheckInterop (~> 11.0) 81 | - FirebaseAuthInterop (~> 11.0) 82 | - FirebaseCore (~> 11.10.0) 83 | - FirebaseCoreExtension (~> 11.10.0) 84 | - FirebaseMessagingInterop (~> 11.0) 85 | - FirebaseSharedSwift (~> 11.0) 86 | - GTMSessionFetcher/Core (< 5.0, >= 3.4) 87 | - FirebaseMessagingInterop (11.11.0) 88 | - FirebaseSharedSwift (11.10.0) 89 | - Flutter (1.0.0) 90 | - GoogleUtilities/AppDelegateSwizzler (8.0.2): 91 | - GoogleUtilities/Environment 92 | - GoogleUtilities/Logger 93 | - GoogleUtilities/Network 94 | - GoogleUtilities/Privacy 95 | - GoogleUtilities/Environment (8.0.2): 96 | - GoogleUtilities/Privacy 97 | - GoogleUtilities/Logger (8.0.2): 98 | - GoogleUtilities/Environment 99 | - GoogleUtilities/Privacy 100 | - GoogleUtilities/Network (8.0.2): 101 | - GoogleUtilities/Logger 102 | - "GoogleUtilities/NSData+zlib" 103 | - GoogleUtilities/Privacy 104 | - GoogleUtilities/Reachability 105 | - "GoogleUtilities/NSData+zlib (8.0.2)": 106 | - GoogleUtilities/Privacy 107 | - GoogleUtilities/Privacy (8.0.2) 108 | - GoogleUtilities/Reachability (8.0.2): 109 | - GoogleUtilities/Logger 110 | - GoogleUtilities/Privacy 111 | - GTMSessionFetcher/Core (4.4.0) 112 | - leveldb-library (1.22.6) 113 | - nanopb (3.30910.0): 114 | - nanopb/decode (= 3.30910.0) 115 | - nanopb/encode (= 3.30910.0) 116 | - nanopb/decode (3.30910.0) 117 | - nanopb/encode (3.30910.0) 118 | - RecaptchaInterop (101.0.0) 119 | 120 | DEPENDENCIES: 121 | - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) 122 | - cloud_functions (from `.symlinks/plugins/cloud_functions/ios`) 123 | - desktop_webview_auth (from `.symlinks/plugins/desktop_webview_auth/ios`) 124 | - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) 125 | - firebase_core (from `.symlinks/plugins/firebase_core/ios`) 126 | - firebase_dynamic_links (from `.symlinks/plugins/firebase_dynamic_links/ios`) 127 | - FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `11.10.0`) 128 | - Flutter (from `Flutter`) 129 | 130 | SPEC REPOS: 131 | trunk: 132 | - Firebase 133 | - FirebaseAppCheckInterop 134 | - FirebaseAuth 135 | - FirebaseAuthInterop 136 | - FirebaseCore 137 | - FirebaseCoreExtension 138 | - FirebaseCoreInternal 139 | - FirebaseDynamicLinks 140 | - FirebaseFirestoreAbseilBinary 141 | - FirebaseFirestoreBinary 142 | - FirebaseFirestoreGRPCBoringSSLBinary 143 | - FirebaseFirestoreGRPCCoreBinary 144 | - FirebaseFirestoreGRPCCPPBinary 145 | - FirebaseFirestoreInternalBinary 146 | - FirebaseFunctions 147 | - FirebaseMessagingInterop 148 | - FirebaseSharedSwift 149 | - GoogleUtilities 150 | - GTMSessionFetcher 151 | - leveldb-library 152 | - nanopb 153 | - RecaptchaInterop 154 | 155 | EXTERNAL SOURCES: 156 | cloud_firestore: 157 | :path: ".symlinks/plugins/cloud_firestore/ios" 158 | cloud_functions: 159 | :path: ".symlinks/plugins/cloud_functions/ios" 160 | desktop_webview_auth: 161 | :path: ".symlinks/plugins/desktop_webview_auth/ios" 162 | firebase_auth: 163 | :path: ".symlinks/plugins/firebase_auth/ios" 164 | firebase_core: 165 | :path: ".symlinks/plugins/firebase_core/ios" 166 | firebase_dynamic_links: 167 | :path: ".symlinks/plugins/firebase_dynamic_links/ios" 168 | FirebaseFirestore: 169 | :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git 170 | :tag: 11.10.0 171 | Flutter: 172 | :path: Flutter 173 | 174 | CHECKOUT OPTIONS: 175 | FirebaseFirestore: 176 | :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git 177 | :tag: 11.10.0 178 | 179 | SPEC CHECKSUMS: 180 | cloud_firestore: 07742f115155e19201e77b4cafb155011892d7b7 181 | cloud_functions: c8b74a1a9c96de6569ee9aca189a75b1c986f3fa 182 | desktop_webview_auth: 4cf620136c3d79796496eef85e59508e3a1a003d 183 | Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2 184 | firebase_auth: 34c515a8fa76a4ef678ac5ad5cfa3bb3120f5ab5 185 | firebase_core: 2d4534e7b489907dcede540c835b48981d890943 186 | firebase_dynamic_links: de53015750ee801a731f48a09e127b8a0b14c666 187 | FirebaseAppCheckInterop: f23709c9ce92d810aa53ff4ce12ad3e666a3c7be 188 | FirebaseAuth: c4146bdfdc87329f9962babd24dae89373f49a32 189 | FirebaseAuthInterop: ac22ed402c2f4e3a8c63ebd3278af9a06073c1be 190 | FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7 191 | FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac 192 | FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679 193 | FirebaseDynamicLinks: a76f75ddb0612301c34b3f598100449b41bc2669 194 | FirebaseFirestore: e5c3d65fef6c6e07c47af2130aaadfb89dd07ea7 195 | FirebaseFirestoreAbseilBinary: 4cfa8823cedc1b774843e04fe578ad279b387f97 196 | FirebaseFirestoreBinary: 6cf15472267bbb89ce9ac5e645eb0abae29208ce 197 | FirebaseFirestoreGRPCBoringSSLBinary: c3dfef3ff448ae2c1c85f9baf9fac5afc4db99fa 198 | FirebaseFirestoreGRPCCoreBinary: 565534e160a0415d12185f7f171c52a567382fbd 199 | FirebaseFirestoreGRPCCPPBinary: 6c0134e8d230ee58b9d51dec2a30a48efd6d5dc7 200 | FirebaseFirestoreInternalBinary: 96b309279c4efdf00b83ab80e8af4d0a73d30258 201 | FirebaseFunctions: e89e0cf2091c9fb19aa58df270317c0a91963f4f 202 | FirebaseMessagingInterop: 87d4a0a3a78644576c681974ce895599f9a867c9 203 | FirebaseSharedSwift: 1baacae75939499b5def867cbe34129464536a38 204 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 205 | GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d 206 | GTMSessionFetcher: 75b671f9e551e4c49153d4c4f8659ef4f559b970 207 | leveldb-library: cc8b8f8e013647a295ad3f8cd2ddf49a6f19be19 208 | nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 209 | RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba 210 | 211 | PODFILE CHECKSUM: c732c7388cf0c6c751fe63071067928ecd267c34 212 | 213 | COCOAPODS: 1.16.2 214 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | _flutterfire_internals: 5 | dependency: transitive 6 | description: 7 | name: _flutterfire_internals 8 | sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "1.3.54" 12 | args: 13 | dependency: transitive 14 | description: 15 | name: args 16 | sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "2.7.0" 20 | async: 21 | dependency: transitive 22 | description: 23 | name: async 24 | sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.12.0" 28 | boolean_selector: 29 | dependency: transitive 30 | description: 31 | name: boolean_selector 32 | sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "2.1.2" 36 | characters: 37 | dependency: transitive 38 | description: 39 | name: characters 40 | sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.4.0" 44 | clock: 45 | dependency: transitive 46 | description: 47 | name: clock 48 | sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.1.2" 52 | cloud_firestore: 53 | dependency: "direct main" 54 | description: 55 | name: cloud_firestore 56 | sha256: "89a5e32716794b6a8d0ec1b5dfda988194e92daedaa3f3bed66fa0d0a595252e" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "5.6.6" 60 | cloud_firestore_platform_interface: 61 | dependency: transitive 62 | description: 63 | name: cloud_firestore_platform_interface 64 | sha256: "9f012844eb59be6827ed97415875c5a29ccacd28bc79bf85b4680738251a33df" 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "6.6.6" 68 | cloud_firestore_web: 69 | dependency: transitive 70 | description: 71 | name: cloud_firestore_web 72 | sha256: b8b754269be0e907acd9ff63ad60f66b84c78d330ca1d7e474f86c9527ddc803 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "4.4.6" 76 | cloud_functions: 77 | dependency: "direct main" 78 | description: 79 | name: cloud_functions 80 | sha256: "91c87991b340975b734e17a777c8953a466651d1621b95a9be1220060f33f9ee" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "5.4.0" 84 | cloud_functions_platform_interface: 85 | dependency: transitive 86 | description: 87 | name: cloud_functions_platform_interface 88 | sha256: "816ff83f385356ca750b571c9b3b79f1c4aadfb94629c1bc87fb4d48d7ac1c13" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "5.6.5" 92 | cloud_functions_web: 93 | dependency: transitive 94 | description: 95 | name: cloud_functions_web 96 | sha256: "75b228748b141ebf02ac724dcf4f6dcc0cb493ca10350d8402ffdb2da2f63f5e" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "4.10.11" 100 | collection: 101 | dependency: transitive 102 | description: 103 | name: collection 104 | sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "1.19.1" 108 | crypto: 109 | dependency: transitive 110 | description: 111 | name: crypto 112 | sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "3.0.6" 116 | cupertino_icons: 117 | dependency: "direct main" 118 | description: 119 | name: cupertino_icons 120 | sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "1.0.8" 124 | desktop_webview_auth: 125 | dependency: transitive 126 | description: 127 | name: desktop_webview_auth 128 | sha256: c4dce73346a7be7243c90ac3b1a68586d9f0e2c2710e81e07d758e80a6ebd920 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "0.0.15" 132 | email_validator: 133 | dependency: transitive 134 | description: 135 | name: email_validator 136 | sha256: e9a90f27ab2b915a27d7f9c2a7ddda5dd752d6942616ee83529b686fc086221b 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "2.1.17" 140 | equatable: 141 | dependency: "direct main" 142 | description: 143 | name: equatable 144 | sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "2.0.7" 148 | fake_async: 149 | dependency: transitive 150 | description: 151 | name: fake_async 152 | sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "1.3.2" 156 | faker: 157 | dependency: "direct main" 158 | description: 159 | name: faker 160 | sha256: "544c34e9e1d322824156d5a8d451bc1bb778263b892aded24ec7ba77b0706624" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "2.2.0" 164 | firebase_auth: 165 | dependency: "direct main" 166 | description: 167 | name: firebase_auth 168 | sha256: "54c62b2d187709114dd09ce658a8803ee91f9119b0e0d3fc2245130ad9bff9ad" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "5.5.2" 172 | firebase_auth_platform_interface: 173 | dependency: transitive 174 | description: 175 | name: firebase_auth_platform_interface 176 | sha256: "5402d13f4bb7f29f2fb819f3b6b5a5a56c9f714aef2276546d397e25ac1b6b8e" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "7.6.2" 180 | firebase_auth_web: 181 | dependency: transitive 182 | description: 183 | name: firebase_auth_web 184 | sha256: "2be496911f0807895d5fe8067b70b7d758142dd7fb26485cbe23e525e2547764" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "5.14.2" 188 | firebase_core: 189 | dependency: "direct main" 190 | description: 191 | name: firebase_core 192 | sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "3.13.0" 196 | firebase_core_platform_interface: 197 | dependency: transitive 198 | description: 199 | name: firebase_core_platform_interface 200 | sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "5.4.0" 204 | firebase_core_web: 205 | dependency: transitive 206 | description: 207 | name: firebase_core_web 208 | sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "2.22.0" 212 | firebase_dynamic_links: 213 | dependency: transitive 214 | description: 215 | name: firebase_dynamic_links 216 | sha256: ae8844d78a14a335e1d69d9a198dd5bcc4571ba4b028e45c0972e093b48530f8 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "6.1.5" 220 | firebase_dynamic_links_platform_interface: 221 | dependency: transitive 222 | description: 223 | name: firebase_dynamic_links_platform_interface 224 | sha256: "7cb3b86956268a18c49badd66eb9a9279b71bf7188a7a2a48204f41db2642e78" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "0.2.7+5" 228 | firebase_ui_auth: 229 | dependency: "direct main" 230 | description: 231 | name: firebase_ui_auth 232 | sha256: cf2cd23625f3df3c6b27e37d04132980f17d707b1adc160bddf425afe1782eed 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "1.16.1" 236 | firebase_ui_firestore: 237 | dependency: "direct main" 238 | description: 239 | name: firebase_ui_firestore 240 | sha256: "9043b9e579cfb23fff6f3c6ab1bdb32697cd4dbebba734db969cb488dd960957" 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "1.7.1" 244 | firebase_ui_localizations: 245 | dependency: transitive 246 | description: 247 | name: firebase_ui_localizations 248 | sha256: "01c0c872ce08d16d217490af3438c97c4fcf1187e856dd2525f892178782fc46" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "1.13.1" 252 | firebase_ui_oauth: 253 | dependency: transitive 254 | description: 255 | name: firebase_ui_oauth 256 | sha256: f7a0a12e7d4f0518848709f093400796a5c7e3ef13f3498ac83793d291341d9e 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "1.6.1" 260 | firebase_ui_shared: 261 | dependency: transitive 262 | description: 263 | name: firebase_ui_shared 264 | sha256: f1d07c130a39104d32fba1dab274b7bcb13be2bf4e652624a4ccabb58f9781f1 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "1.4.1" 268 | flutter: 269 | dependency: "direct main" 270 | description: flutter 271 | source: sdk 272 | version: "0.0.0" 273 | flutter_lints: 274 | dependency: "direct dev" 275 | description: 276 | name: flutter_lints 277 | sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" 278 | url: "https://pub.dev" 279 | source: hosted 280 | version: "5.0.0" 281 | flutter_localizations: 282 | dependency: transitive 283 | description: flutter 284 | source: sdk 285 | version: "0.0.0" 286 | flutter_riverpod: 287 | dependency: "direct main" 288 | description: 289 | name: flutter_riverpod 290 | sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" 291 | url: "https://pub.dev" 292 | source: hosted 293 | version: "2.6.1" 294 | flutter_svg: 295 | dependency: transitive 296 | description: 297 | name: flutter_svg 298 | sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b 299 | url: "https://pub.dev" 300 | source: hosted 301 | version: "2.0.17" 302 | flutter_test: 303 | dependency: "direct dev" 304 | description: flutter 305 | source: sdk 306 | version: "0.0.0" 307 | flutter_web_plugins: 308 | dependency: transitive 309 | description: flutter 310 | source: sdk 311 | version: "0.0.0" 312 | go_router: 313 | dependency: "direct main" 314 | description: 315 | name: go_router 316 | sha256: "4cdfcc6a178632d1dbb7a728f8e84a1466211354704b9cdc03eee661d3277732" 317 | url: "https://pub.dev" 318 | source: hosted 319 | version: "15.0.0" 320 | http: 321 | dependency: transitive 322 | description: 323 | name: http 324 | sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f 325 | url: "https://pub.dev" 326 | source: hosted 327 | version: "1.3.0" 328 | http_parser: 329 | dependency: transitive 330 | description: 331 | name: http_parser 332 | sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" 333 | url: "https://pub.dev" 334 | source: hosted 335 | version: "4.1.2" 336 | intl: 337 | dependency: transitive 338 | description: 339 | name: intl 340 | sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf 341 | url: "https://pub.dev" 342 | source: hosted 343 | version: "0.19.0" 344 | leak_tracker: 345 | dependency: transitive 346 | description: 347 | name: leak_tracker 348 | sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec 349 | url: "https://pub.dev" 350 | source: hosted 351 | version: "10.0.8" 352 | leak_tracker_flutter_testing: 353 | dependency: transitive 354 | description: 355 | name: leak_tracker_flutter_testing 356 | sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 357 | url: "https://pub.dev" 358 | source: hosted 359 | version: "3.0.9" 360 | leak_tracker_testing: 361 | dependency: transitive 362 | description: 363 | name: leak_tracker_testing 364 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" 365 | url: "https://pub.dev" 366 | source: hosted 367 | version: "3.0.1" 368 | lints: 369 | dependency: transitive 370 | description: 371 | name: lints 372 | sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 373 | url: "https://pub.dev" 374 | source: hosted 375 | version: "5.1.1" 376 | logging: 377 | dependency: transitive 378 | description: 379 | name: logging 380 | sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 381 | url: "https://pub.dev" 382 | source: hosted 383 | version: "1.3.0" 384 | matcher: 385 | dependency: transitive 386 | description: 387 | name: matcher 388 | sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 389 | url: "https://pub.dev" 390 | source: hosted 391 | version: "0.12.17" 392 | material_color_utilities: 393 | dependency: transitive 394 | description: 395 | name: material_color_utilities 396 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec 397 | url: "https://pub.dev" 398 | source: hosted 399 | version: "0.11.1" 400 | meta: 401 | dependency: transitive 402 | description: 403 | name: meta 404 | sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c 405 | url: "https://pub.dev" 406 | source: hosted 407 | version: "1.16.0" 408 | path: 409 | dependency: transitive 410 | description: 411 | name: path 412 | sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" 413 | url: "https://pub.dev" 414 | source: hosted 415 | version: "1.9.1" 416 | path_parsing: 417 | dependency: transitive 418 | description: 419 | name: path_parsing 420 | sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" 421 | url: "https://pub.dev" 422 | source: hosted 423 | version: "1.1.0" 424 | petitparser: 425 | dependency: transitive 426 | description: 427 | name: petitparser 428 | sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" 429 | url: "https://pub.dev" 430 | source: hosted 431 | version: "6.1.0" 432 | plugin_platform_interface: 433 | dependency: transitive 434 | description: 435 | name: plugin_platform_interface 436 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" 437 | url: "https://pub.dev" 438 | source: hosted 439 | version: "2.1.8" 440 | riverpod: 441 | dependency: transitive 442 | description: 443 | name: riverpod 444 | sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959" 445 | url: "https://pub.dev" 446 | source: hosted 447 | version: "2.6.1" 448 | sky_engine: 449 | dependency: transitive 450 | description: flutter 451 | source: sdk 452 | version: "0.0.0" 453 | source_span: 454 | dependency: transitive 455 | description: 456 | name: source_span 457 | sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" 458 | url: "https://pub.dev" 459 | source: hosted 460 | version: "1.10.1" 461 | stack_trace: 462 | dependency: transitive 463 | description: 464 | name: stack_trace 465 | sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" 466 | url: "https://pub.dev" 467 | source: hosted 468 | version: "1.12.1" 469 | state_notifier: 470 | dependency: transitive 471 | description: 472 | name: state_notifier 473 | sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb 474 | url: "https://pub.dev" 475 | source: hosted 476 | version: "1.0.0" 477 | stream_channel: 478 | dependency: transitive 479 | description: 480 | name: stream_channel 481 | sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" 482 | url: "https://pub.dev" 483 | source: hosted 484 | version: "2.1.4" 485 | string_scanner: 486 | dependency: transitive 487 | description: 488 | name: string_scanner 489 | sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" 490 | url: "https://pub.dev" 491 | source: hosted 492 | version: "1.4.1" 493 | term_glyph: 494 | dependency: transitive 495 | description: 496 | name: term_glyph 497 | sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" 498 | url: "https://pub.dev" 499 | source: hosted 500 | version: "1.2.2" 501 | test_api: 502 | dependency: transitive 503 | description: 504 | name: test_api 505 | sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd 506 | url: "https://pub.dev" 507 | source: hosted 508 | version: "0.7.4" 509 | typed_data: 510 | dependency: transitive 511 | description: 512 | name: typed_data 513 | sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 514 | url: "https://pub.dev" 515 | source: hosted 516 | version: "1.4.0" 517 | vector_graphics: 518 | dependency: transitive 519 | description: 520 | name: vector_graphics 521 | sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" 522 | url: "https://pub.dev" 523 | source: hosted 524 | version: "1.1.18" 525 | vector_graphics_codec: 526 | dependency: transitive 527 | description: 528 | name: vector_graphics_codec 529 | sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" 530 | url: "https://pub.dev" 531 | source: hosted 532 | version: "1.1.13" 533 | vector_graphics_compiler: 534 | dependency: transitive 535 | description: 536 | name: vector_graphics_compiler 537 | sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" 538 | url: "https://pub.dev" 539 | source: hosted 540 | version: "1.1.16" 541 | vector_math: 542 | dependency: transitive 543 | description: 544 | name: vector_math 545 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 546 | url: "https://pub.dev" 547 | source: hosted 548 | version: "2.1.4" 549 | vm_service: 550 | dependency: transitive 551 | description: 552 | name: vm_service 553 | sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" 554 | url: "https://pub.dev" 555 | source: hosted 556 | version: "14.3.1" 557 | web: 558 | dependency: transitive 559 | description: 560 | name: web 561 | sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" 562 | url: "https://pub.dev" 563 | source: hosted 564 | version: "1.1.1" 565 | xml: 566 | dependency: transitive 567 | description: 568 | name: xml 569 | sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 570 | url: "https://pub.dev" 571 | source: hosted 572 | version: "6.5.0" 573 | sdks: 574 | dart: ">=3.7.0-0 <4.0.0" 575 | flutter: ">=3.22.0" 576 | -------------------------------------------------------------------------------- /macos/Runner/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 54; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0F54D7AA3829FFA73ECE1D47 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4B6C504E03164B6DA34F43D /* Pods_Runner.framework */; }; 11 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 12 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 13 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 14 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 15 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 16 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 17 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 18 | B9DDEFFAF9E3055FBD8481E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D331476D44CBCD2134D015AA /* Pods_RunnerTests.framework */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 97C146E61CF9000F007C117D /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 97C146ED1CF9000F007C117D; 27 | remoteInfo = Runner; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXCopyFilesBuildPhase section */ 32 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 33 | isa = PBXCopyFilesBuildPhase; 34 | buildActionMask = 2147483647; 35 | dstPath = ""; 36 | dstSubfolderSpec = 10; 37 | files = ( 38 | ); 39 | name = "Embed Frameworks"; 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXCopyFilesBuildPhase section */ 43 | 44 | /* Begin PBXFileReference section */ 45 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 46 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 47 | 2625397EAC640768458F4001 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 48 | 2C2D75BA7253E53D6C4FBFC8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 49 | 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 50 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 52 | 674413DA28C15C37D61A2D26 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 53 | 6A634B0A0FE2798F9EA35A89 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 54 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 55 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 56 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 57 | 7FD2990688F5423BC319610A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 58 | 8599B71C92F3015D3F1610AE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 59 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 60 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 61 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 63 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 64 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 65 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 66 | A4B6C504E03164B6DA34F43D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | D331476D44CBCD2134D015AA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | /* End PBXFileReference section */ 69 | 70 | /* Begin PBXFrameworksBuildPhase section */ 71 | 11A8B779225A21D900AC99D6 /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | B9DDEFFAF9E3055FBD8481E7 /* Pods_RunnerTests.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 80 | isa = PBXFrameworksBuildPhase; 81 | buildActionMask = 2147483647; 82 | files = ( 83 | 0F54D7AA3829FFA73ECE1D47 /* Pods_Runner.framework in Frameworks */, 84 | ); 85 | runOnlyForDeploymentPostprocessing = 0; 86 | }; 87 | /* End PBXFrameworksBuildPhase section */ 88 | 89 | /* Begin PBXGroup section */ 90 | 331C8082294A63A400263BE5 /* RunnerTests */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | 331C807B294A618700263BE5 /* RunnerTests.swift */, 94 | ); 95 | path = RunnerTests; 96 | sourceTree = ""; 97 | }; 98 | 3630342232640D97D7FACF90 /* Frameworks */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | A4B6C504E03164B6DA34F43D /* Pods_Runner.framework */, 102 | D331476D44CBCD2134D015AA /* Pods_RunnerTests.framework */, 103 | ); 104 | name = Frameworks; 105 | sourceTree = ""; 106 | }; 107 | 9740EEB11CF90186004384FC /* Flutter */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 111 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 112 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 113 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 114 | ); 115 | name = Flutter; 116 | sourceTree = ""; 117 | }; 118 | 97C146E51CF9000F007C117D = { 119 | isa = PBXGroup; 120 | children = ( 121 | 9740EEB11CF90186004384FC /* Flutter */, 122 | 97C146F01CF9000F007C117D /* Runner */, 123 | 97C146EF1CF9000F007C117D /* Products */, 124 | 331C8082294A63A400263BE5 /* RunnerTests */, 125 | D9955F6BE106246B88B51524 /* Pods */, 126 | 3630342232640D97D7FACF90 /* Frameworks */, 127 | ); 128 | sourceTree = ""; 129 | }; 130 | 97C146EF1CF9000F007C117D /* Products */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 97C146EE1CF9000F007C117D /* Runner.app */, 134 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */, 135 | ); 136 | name = Products; 137 | sourceTree = ""; 138 | }; 139 | 97C146F01CF9000F007C117D /* Runner */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 143 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 144 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 145 | 97C147021CF9000F007C117D /* Info.plist */, 146 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 147 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 148 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 149 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 150 | ); 151 | path = Runner; 152 | sourceTree = ""; 153 | }; 154 | D9955F6BE106246B88B51524 /* Pods */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 2C2D75BA7253E53D6C4FBFC8 /* Pods-Runner.debug.xcconfig */, 158 | 8599B71C92F3015D3F1610AE /* Pods-Runner.release.xcconfig */, 159 | 7FD2990688F5423BC319610A /* Pods-Runner.profile.xcconfig */, 160 | 6A634B0A0FE2798F9EA35A89 /* Pods-RunnerTests.debug.xcconfig */, 161 | 2625397EAC640768458F4001 /* Pods-RunnerTests.release.xcconfig */, 162 | 674413DA28C15C37D61A2D26 /* Pods-RunnerTests.profile.xcconfig */, 163 | ); 164 | name = Pods; 165 | path = Pods; 166 | sourceTree = ""; 167 | }; 168 | /* End PBXGroup section */ 169 | 170 | /* Begin PBXNativeTarget section */ 171 | 331C8080294A63A400263BE5 /* RunnerTests */ = { 172 | isa = PBXNativeTarget; 173 | buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; 174 | buildPhases = ( 175 | BD4E8D061E2E06B6A8ACD8BD /* [CP] Check Pods Manifest.lock */, 176 | 331C807D294A63A400263BE5 /* Sources */, 177 | 331C807F294A63A400263BE5 /* Resources */, 178 | 11A8B779225A21D900AC99D6 /* Frameworks */, 179 | ); 180 | buildRules = ( 181 | ); 182 | dependencies = ( 183 | 331C8086294A63A400263BE5 /* PBXTargetDependency */, 184 | ); 185 | name = RunnerTests; 186 | productName = RunnerTests; 187 | productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; 188 | productType = "com.apple.product-type.bundle.unit-test"; 189 | }; 190 | 97C146ED1CF9000F007C117D /* Runner */ = { 191 | isa = PBXNativeTarget; 192 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 193 | buildPhases = ( 194 | 06D4131840ABA1BA1D3AF7D0 /* [CP] Check Pods Manifest.lock */, 195 | 9740EEB61CF901F6004384FC /* Run Script */, 196 | 97C146EA1CF9000F007C117D /* Sources */, 197 | 97C146EB1CF9000F007C117D /* Frameworks */, 198 | 97C146EC1CF9000F007C117D /* Resources */, 199 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 200 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 201 | C9C89A8B51BB9EBCADB01149 /* [CP] Embed Pods Frameworks */, 202 | 0E45CA451F2D86688BE5A74B /* [CP] Copy Pods Resources */, 203 | ); 204 | buildRules = ( 205 | ); 206 | dependencies = ( 207 | ); 208 | name = Runner; 209 | productName = Runner; 210 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 211 | productType = "com.apple.product-type.application"; 212 | }; 213 | /* End PBXNativeTarget section */ 214 | 215 | /* Begin PBXProject section */ 216 | 97C146E61CF9000F007C117D /* Project object */ = { 217 | isa = PBXProject; 218 | attributes = { 219 | BuildIndependentTargetsInParallel = YES; 220 | LastUpgradeCheck = 1510; 221 | ORGANIZATIONNAME = ""; 222 | TargetAttributes = { 223 | 331C8080294A63A400263BE5 = { 224 | CreatedOnToolsVersion = 14.0; 225 | TestTargetID = 97C146ED1CF9000F007C117D; 226 | }; 227 | 97C146ED1CF9000F007C117D = { 228 | CreatedOnToolsVersion = 7.3.1; 229 | LastSwiftMigration = 1100; 230 | }; 231 | }; 232 | }; 233 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 234 | compatibilityVersion = "Xcode 9.3"; 235 | developmentRegion = en; 236 | hasScannedForEncodings = 0; 237 | knownRegions = ( 238 | en, 239 | Base, 240 | ); 241 | mainGroup = 97C146E51CF9000F007C117D; 242 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 243 | projectDirPath = ""; 244 | projectRoot = ""; 245 | targets = ( 246 | 97C146ED1CF9000F007C117D /* Runner */, 247 | 331C8080294A63A400263BE5 /* RunnerTests */, 248 | ); 249 | }; 250 | /* End PBXProject section */ 251 | 252 | /* Begin PBXResourcesBuildPhase section */ 253 | 331C807F294A63A400263BE5 /* Resources */ = { 254 | isa = PBXResourcesBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | ); 258 | runOnlyForDeploymentPostprocessing = 0; 259 | }; 260 | 97C146EC1CF9000F007C117D /* Resources */ = { 261 | isa = PBXResourcesBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 265 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 266 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 267 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | /* End PBXResourcesBuildPhase section */ 272 | 273 | /* Begin PBXShellScriptBuildPhase section */ 274 | 06D4131840ABA1BA1D3AF7D0 /* [CP] Check Pods Manifest.lock */ = { 275 | isa = PBXShellScriptBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | ); 279 | inputFileListPaths = ( 280 | ); 281 | inputPaths = ( 282 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 283 | "${PODS_ROOT}/Manifest.lock", 284 | ); 285 | name = "[CP] Check Pods Manifest.lock"; 286 | outputFileListPaths = ( 287 | ); 288 | outputPaths = ( 289 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | shellPath = /bin/sh; 293 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 294 | showEnvVarsInLog = 0; 295 | }; 296 | 0E45CA451F2D86688BE5A74B /* [CP] Copy Pods Resources */ = { 297 | isa = PBXShellScriptBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | ); 301 | inputFileListPaths = ( 302 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", 303 | ); 304 | name = "[CP] Copy Pods Resources"; 305 | outputFileListPaths = ( 306 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", 307 | ); 308 | runOnlyForDeploymentPostprocessing = 0; 309 | shellPath = /bin/sh; 310 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; 311 | showEnvVarsInLog = 0; 312 | }; 313 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 314 | isa = PBXShellScriptBuildPhase; 315 | alwaysOutOfDate = 1; 316 | buildActionMask = 2147483647; 317 | files = ( 318 | ); 319 | inputPaths = ( 320 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", 321 | ); 322 | name = "Thin Binary"; 323 | outputPaths = ( 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | shellPath = /bin/sh; 327 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 328 | }; 329 | 9740EEB61CF901F6004384FC /* Run Script */ = { 330 | isa = PBXShellScriptBuildPhase; 331 | alwaysOutOfDate = 1; 332 | buildActionMask = 2147483647; 333 | files = ( 334 | ); 335 | inputPaths = ( 336 | ); 337 | name = "Run Script"; 338 | outputPaths = ( 339 | ); 340 | runOnlyForDeploymentPostprocessing = 0; 341 | shellPath = /bin/sh; 342 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 343 | }; 344 | BD4E8D061E2E06B6A8ACD8BD /* [CP] Check Pods Manifest.lock */ = { 345 | isa = PBXShellScriptBuildPhase; 346 | buildActionMask = 2147483647; 347 | files = ( 348 | ); 349 | inputFileListPaths = ( 350 | ); 351 | inputPaths = ( 352 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 353 | "${PODS_ROOT}/Manifest.lock", 354 | ); 355 | name = "[CP] Check Pods Manifest.lock"; 356 | outputFileListPaths = ( 357 | ); 358 | outputPaths = ( 359 | "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | shellPath = /bin/sh; 363 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 364 | showEnvVarsInLog = 0; 365 | }; 366 | C9C89A8B51BB9EBCADB01149 /* [CP] Embed Pods Frameworks */ = { 367 | isa = PBXShellScriptBuildPhase; 368 | buildActionMask = 2147483647; 369 | files = ( 370 | ); 371 | inputFileListPaths = ( 372 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", 373 | ); 374 | name = "[CP] Embed Pods Frameworks"; 375 | outputFileListPaths = ( 376 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", 377 | ); 378 | runOnlyForDeploymentPostprocessing = 0; 379 | shellPath = /bin/sh; 380 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 381 | showEnvVarsInLog = 0; 382 | }; 383 | /* End PBXShellScriptBuildPhase section */ 384 | 385 | /* Begin PBXSourcesBuildPhase section */ 386 | 331C807D294A63A400263BE5 /* Sources */ = { 387 | isa = PBXSourcesBuildPhase; 388 | buildActionMask = 2147483647; 389 | files = ( 390 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, 391 | ); 392 | runOnlyForDeploymentPostprocessing = 0; 393 | }; 394 | 97C146EA1CF9000F007C117D /* Sources */ = { 395 | isa = PBXSourcesBuildPhase; 396 | buildActionMask = 2147483647; 397 | files = ( 398 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 399 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 400 | ); 401 | runOnlyForDeploymentPostprocessing = 0; 402 | }; 403 | /* End PBXSourcesBuildPhase section */ 404 | 405 | /* Begin PBXTargetDependency section */ 406 | 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { 407 | isa = PBXTargetDependency; 408 | target = 97C146ED1CF9000F007C117D /* Runner */; 409 | targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; 410 | }; 411 | /* End PBXTargetDependency section */ 412 | 413 | /* Begin PBXVariantGroup section */ 414 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 415 | isa = PBXVariantGroup; 416 | children = ( 417 | 97C146FB1CF9000F007C117D /* Base */, 418 | ); 419 | name = Main.storyboard; 420 | sourceTree = ""; 421 | }; 422 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 423 | isa = PBXVariantGroup; 424 | children = ( 425 | 97C147001CF9000F007C117D /* Base */, 426 | ); 427 | name = LaunchScreen.storyboard; 428 | sourceTree = ""; 429 | }; 430 | /* End PBXVariantGroup section */ 431 | 432 | /* Begin XCBuildConfiguration section */ 433 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 434 | isa = XCBuildConfiguration; 435 | buildSettings = { 436 | ALWAYS_SEARCH_USER_PATHS = NO; 437 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 438 | CLANG_ANALYZER_NONNULL = YES; 439 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 440 | CLANG_CXX_LIBRARY = "libc++"; 441 | CLANG_ENABLE_MODULES = YES; 442 | CLANG_ENABLE_OBJC_ARC = YES; 443 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 444 | CLANG_WARN_BOOL_CONVERSION = YES; 445 | CLANG_WARN_COMMA = YES; 446 | CLANG_WARN_CONSTANT_CONVERSION = YES; 447 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 448 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 449 | CLANG_WARN_EMPTY_BODY = YES; 450 | CLANG_WARN_ENUM_CONVERSION = YES; 451 | CLANG_WARN_INFINITE_RECURSION = YES; 452 | CLANG_WARN_INT_CONVERSION = YES; 453 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 454 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 455 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 456 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 457 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 458 | CLANG_WARN_STRICT_PROTOTYPES = YES; 459 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 460 | CLANG_WARN_UNREACHABLE_CODE = YES; 461 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 462 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 463 | COPY_PHASE_STRIP = NO; 464 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 465 | ENABLE_NS_ASSERTIONS = NO; 466 | ENABLE_STRICT_OBJC_MSGSEND = YES; 467 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 468 | GCC_C_LANGUAGE_STANDARD = gnu99; 469 | GCC_NO_COMMON_BLOCKS = YES; 470 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 471 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 472 | GCC_WARN_UNDECLARED_SELECTOR = YES; 473 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 474 | GCC_WARN_UNUSED_FUNCTION = YES; 475 | GCC_WARN_UNUSED_VARIABLE = YES; 476 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 477 | MTL_ENABLE_DEBUG_INFO = NO; 478 | SDKROOT = iphoneos; 479 | SUPPORTED_PLATFORMS = iphoneos; 480 | TARGETED_DEVICE_FAMILY = "1,2"; 481 | VALIDATE_PRODUCT = YES; 482 | }; 483 | name = Profile; 484 | }; 485 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 486 | isa = XCBuildConfiguration; 487 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 488 | buildSettings = { 489 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 490 | CLANG_ENABLE_MODULES = YES; 491 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 492 | DEVELOPMENT_TEAM = M54ZVB688G; 493 | ENABLE_BITCODE = NO; 494 | INFOPLIST_FILE = Runner/Info.plist; 495 | IPHONEOS_DEPLOYMENT_TARGET = 15.6; 496 | LD_RUNPATH_SEARCH_PATHS = ( 497 | "$(inherited)", 498 | "@executable_path/Frameworks", 499 | ); 500 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase; 501 | PRODUCT_NAME = "$(TARGET_NAME)"; 502 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 503 | SWIFT_VERSION = 5.0; 504 | VERSIONING_SYSTEM = "apple-generic"; 505 | }; 506 | name = Profile; 507 | }; 508 | 331C8088294A63A400263BE5 /* Debug */ = { 509 | isa = XCBuildConfiguration; 510 | baseConfigurationReference = 6A634B0A0FE2798F9EA35A89 /* Pods-RunnerTests.debug.xcconfig */; 511 | buildSettings = { 512 | BUNDLE_LOADER = "$(TEST_HOST)"; 513 | CODE_SIGN_STYLE = Automatic; 514 | CURRENT_PROJECT_VERSION = 1; 515 | GENERATE_INFOPLIST_FILE = YES; 516 | MARKETING_VERSION = 1.0; 517 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase.RunnerTests; 518 | PRODUCT_NAME = "$(TARGET_NAME)"; 519 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 520 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 521 | SWIFT_VERSION = 5.0; 522 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 523 | }; 524 | name = Debug; 525 | }; 526 | 331C8089294A63A400263BE5 /* Release */ = { 527 | isa = XCBuildConfiguration; 528 | baseConfigurationReference = 2625397EAC640768458F4001 /* Pods-RunnerTests.release.xcconfig */; 529 | buildSettings = { 530 | BUNDLE_LOADER = "$(TEST_HOST)"; 531 | CODE_SIGN_STYLE = Automatic; 532 | CURRENT_PROJECT_VERSION = 1; 533 | GENERATE_INFOPLIST_FILE = YES; 534 | MARKETING_VERSION = 1.0; 535 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase.RunnerTests; 536 | PRODUCT_NAME = "$(TARGET_NAME)"; 537 | SWIFT_VERSION = 5.0; 538 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 539 | }; 540 | name = Release; 541 | }; 542 | 331C808A294A63A400263BE5 /* Profile */ = { 543 | isa = XCBuildConfiguration; 544 | baseConfigurationReference = 674413DA28C15C37D61A2D26 /* Pods-RunnerTests.profile.xcconfig */; 545 | buildSettings = { 546 | BUNDLE_LOADER = "$(TEST_HOST)"; 547 | CODE_SIGN_STYLE = Automatic; 548 | CURRENT_PROJECT_VERSION = 1; 549 | GENERATE_INFOPLIST_FILE = YES; 550 | MARKETING_VERSION = 1.0; 551 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase.RunnerTests; 552 | PRODUCT_NAME = "$(TARGET_NAME)"; 553 | SWIFT_VERSION = 5.0; 554 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 555 | }; 556 | name = Profile; 557 | }; 558 | 97C147031CF9000F007C117D /* Debug */ = { 559 | isa = XCBuildConfiguration; 560 | buildSettings = { 561 | ALWAYS_SEARCH_USER_PATHS = NO; 562 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 563 | CLANG_ANALYZER_NONNULL = YES; 564 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 565 | CLANG_CXX_LIBRARY = "libc++"; 566 | CLANG_ENABLE_MODULES = YES; 567 | CLANG_ENABLE_OBJC_ARC = YES; 568 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 569 | CLANG_WARN_BOOL_CONVERSION = YES; 570 | CLANG_WARN_COMMA = YES; 571 | CLANG_WARN_CONSTANT_CONVERSION = YES; 572 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 573 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 574 | CLANG_WARN_EMPTY_BODY = YES; 575 | CLANG_WARN_ENUM_CONVERSION = YES; 576 | CLANG_WARN_INFINITE_RECURSION = YES; 577 | CLANG_WARN_INT_CONVERSION = YES; 578 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 579 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 580 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 581 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 582 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 583 | CLANG_WARN_STRICT_PROTOTYPES = YES; 584 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 585 | CLANG_WARN_UNREACHABLE_CODE = YES; 586 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 587 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 588 | COPY_PHASE_STRIP = NO; 589 | DEBUG_INFORMATION_FORMAT = dwarf; 590 | ENABLE_STRICT_OBJC_MSGSEND = YES; 591 | ENABLE_TESTABILITY = YES; 592 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 593 | GCC_C_LANGUAGE_STANDARD = gnu99; 594 | GCC_DYNAMIC_NO_PIC = NO; 595 | GCC_NO_COMMON_BLOCKS = YES; 596 | GCC_OPTIMIZATION_LEVEL = 0; 597 | GCC_PREPROCESSOR_DEFINITIONS = ( 598 | "DEBUG=1", 599 | "$(inherited)", 600 | ); 601 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 602 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 603 | GCC_WARN_UNDECLARED_SELECTOR = YES; 604 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 605 | GCC_WARN_UNUSED_FUNCTION = YES; 606 | GCC_WARN_UNUSED_VARIABLE = YES; 607 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 608 | MTL_ENABLE_DEBUG_INFO = YES; 609 | ONLY_ACTIVE_ARCH = YES; 610 | SDKROOT = iphoneos; 611 | TARGETED_DEVICE_FAMILY = "1,2"; 612 | }; 613 | name = Debug; 614 | }; 615 | 97C147041CF9000F007C117D /* Release */ = { 616 | isa = XCBuildConfiguration; 617 | buildSettings = { 618 | ALWAYS_SEARCH_USER_PATHS = NO; 619 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 620 | CLANG_ANALYZER_NONNULL = YES; 621 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 622 | CLANG_CXX_LIBRARY = "libc++"; 623 | CLANG_ENABLE_MODULES = YES; 624 | CLANG_ENABLE_OBJC_ARC = YES; 625 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 626 | CLANG_WARN_BOOL_CONVERSION = YES; 627 | CLANG_WARN_COMMA = YES; 628 | CLANG_WARN_CONSTANT_CONVERSION = YES; 629 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 630 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 631 | CLANG_WARN_EMPTY_BODY = YES; 632 | CLANG_WARN_ENUM_CONVERSION = YES; 633 | CLANG_WARN_INFINITE_RECURSION = YES; 634 | CLANG_WARN_INT_CONVERSION = YES; 635 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 636 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 637 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 638 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 639 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 640 | CLANG_WARN_STRICT_PROTOTYPES = YES; 641 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 642 | CLANG_WARN_UNREACHABLE_CODE = YES; 643 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 644 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 645 | COPY_PHASE_STRIP = NO; 646 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 647 | ENABLE_NS_ASSERTIONS = NO; 648 | ENABLE_STRICT_OBJC_MSGSEND = YES; 649 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 650 | GCC_C_LANGUAGE_STANDARD = gnu99; 651 | GCC_NO_COMMON_BLOCKS = YES; 652 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 653 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 654 | GCC_WARN_UNDECLARED_SELECTOR = YES; 655 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 656 | GCC_WARN_UNUSED_FUNCTION = YES; 657 | GCC_WARN_UNUSED_VARIABLE = YES; 658 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 659 | MTL_ENABLE_DEBUG_INFO = NO; 660 | SDKROOT = iphoneos; 661 | SUPPORTED_PLATFORMS = iphoneos; 662 | SWIFT_COMPILATION_MODE = wholemodule; 663 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 664 | TARGETED_DEVICE_FAMILY = "1,2"; 665 | VALIDATE_PRODUCT = YES; 666 | }; 667 | name = Release; 668 | }; 669 | 97C147061CF9000F007C117D /* Debug */ = { 670 | isa = XCBuildConfiguration; 671 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 672 | buildSettings = { 673 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 674 | CLANG_ENABLE_MODULES = YES; 675 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 676 | DEVELOPMENT_TEAM = M54ZVB688G; 677 | ENABLE_BITCODE = NO; 678 | INFOPLIST_FILE = Runner/Info.plist; 679 | IPHONEOS_DEPLOYMENT_TARGET = 15.6; 680 | LD_RUNPATH_SEARCH_PATHS = ( 681 | "$(inherited)", 682 | "@executable_path/Frameworks", 683 | ); 684 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase; 685 | PRODUCT_NAME = "$(TARGET_NAME)"; 686 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 687 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 688 | SWIFT_VERSION = 5.0; 689 | VERSIONING_SYSTEM = "apple-generic"; 690 | }; 691 | name = Debug; 692 | }; 693 | 97C147071CF9000F007C117D /* Release */ = { 694 | isa = XCBuildConfiguration; 695 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 696 | buildSettings = { 697 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 698 | CLANG_ENABLE_MODULES = YES; 699 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 700 | DEVELOPMENT_TEAM = M54ZVB688G; 701 | ENABLE_BITCODE = NO; 702 | INFOPLIST_FILE = Runner/Info.plist; 703 | IPHONEOS_DEPLOYMENT_TARGET = 15.6; 704 | LD_RUNPATH_SEARCH_PATHS = ( 705 | "$(inherited)", 706 | "@executable_path/Frameworks", 707 | ); 708 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fakerAppFlutterFirebase; 709 | PRODUCT_NAME = "$(TARGET_NAME)"; 710 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 711 | SWIFT_VERSION = 5.0; 712 | VERSIONING_SYSTEM = "apple-generic"; 713 | }; 714 | name = Release; 715 | }; 716 | /* End XCBuildConfiguration section */ 717 | 718 | /* Begin XCConfigurationList section */ 719 | 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { 720 | isa = XCConfigurationList; 721 | buildConfigurations = ( 722 | 331C8088294A63A400263BE5 /* Debug */, 723 | 331C8089294A63A400263BE5 /* Release */, 724 | 331C808A294A63A400263BE5 /* Profile */, 725 | ); 726 | defaultConfigurationIsVisible = 0; 727 | defaultConfigurationName = Release; 728 | }; 729 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 730 | isa = XCConfigurationList; 731 | buildConfigurations = ( 732 | 97C147031CF9000F007C117D /* Debug */, 733 | 97C147041CF9000F007C117D /* Release */, 734 | 249021D3217E4FDB00AE95B9 /* Profile */, 735 | ); 736 | defaultConfigurationIsVisible = 0; 737 | defaultConfigurationName = Release; 738 | }; 739 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 740 | isa = XCConfigurationList; 741 | buildConfigurations = ( 742 | 97C147061CF9000F007C117D /* Debug */, 743 | 97C147071CF9000F007C117D /* Release */, 744 | 249021D4217E4FDB00AE95B9 /* Profile */, 745 | ); 746 | defaultConfigurationIsVisible = 0; 747 | defaultConfigurationName = Release; 748 | }; 749 | /* End XCConfigurationList section */ 750 | }; 751 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 752 | } 753 | --------------------------------------------------------------------------------