Commit 264324d8 authored by Sandunika Senavirathna's avatar Sandunika Senavirathna

Merge branch 'IT20639280' into 'master'

update, bottom nav updated

See merge request !2
parents d4355dcc 21c8d902
No preview for this file type
// Flutter web plugin registrant file.
//
// Generated file. Do not edit.
//
// @dart = 2.13
// ignore_for_file: type=lint
import 'package:cloud_firestore_web/cloud_firestore_web.dart';
import 'package:firebase_auth_web/firebase_auth_web.dart';
import 'package:firebase_core_web/firebase_core_web.dart';
import 'package:firebase_storage_web/firebase_storage_web.dart';
import 'package:image_picker_for_web/image_picker_for_web.dart';
import 'package:rive_common/rive_web.dart';
import 'package:shared_preferences_web/shared_preferences_web.dart';
import 'package:url_launcher_web/url_launcher_web.dart';
import 'package:video_player_web/video_player_web.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
void registerPlugins([final Registrar? pluginRegistrar]) {
final Registrar registrar = pluginRegistrar ?? webPluginRegistrar;
FirebaseFirestoreWeb.registerWith(registrar);
FirebaseAuthWeb.registerWith(registrar);
FirebaseCoreWeb.registerWith(registrar);
FirebaseStorageWeb.registerWith(registrar);
ImagePickerPlugin.registerWith(registrar);
RivePlugin.registerWith(registrar);
SharedPreferencesPlugin.registerWith(registrar);
UrlLauncherPlugin.registerWith(registrar);
VideoPlayerPlugin.registerWith(registrar);
registrar.registerMessageHandler();
}
{
"configVersion": 2,
"packages": [
{
"name": "_flutterfire_internals",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/_flutterfire_internals-1.3.16",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "async",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/async-2.11.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "awesome_dialog",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/awesome_dialog-3.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "boolean_selector",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1",
"packageUri": "lib/",
"languageVersion": "2.17"
},
{
"name": "cached_network_image",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "cached_network_image_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "cached_network_image_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image_web-1.1.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "characters",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/characters-1.3.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "clock",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/clock-1.1.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "cloud_firestore",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "cloud_firestore_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_platform_interface-6.0.10",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "cloud_firestore_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "collection",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/collection-1.17.1",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "cross_file",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cross_file-0.3.3+7",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "crypto",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/crypto-3.0.3",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "csslib",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/csslib-1.0.0",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "cupertino_icons",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.6",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "fake_async",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/fake_async-1.3.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "ffi",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/ffi-2.1.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "file",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file-7.0.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "file_selector_linux",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "file_selector_macos",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "file_selector_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "file_selector_windows",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "firebase_auth",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_auth_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_platform_interface-7.0.9",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_auth_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_core",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_core_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_platform_interface-5.0.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_core_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_storage",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_storage_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_platform_interface-5.1.3",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "firebase_storage_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "flutter",
"rootUri": "file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "flutter_cache_manager",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1",
"packageUri": "lib/",
"languageVersion": "2.17"
},
{
"name": "flutter_lints",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_lints-2.0.3",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "flutter_plugin_android_lifecycle",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "flutter_test",
"rootUri": "file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter_test",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "flutter_web_plugins",
"rootUri": "file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter_web_plugins",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "graphs",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/graphs-2.3.1",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "html",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/html-0.15.4",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "http",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/http-1.1.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "http_parser",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/http_parser-4.0.2",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "image_picker",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker-1.0.7",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "image_picker_android",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "image_picker_for_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "image_picker_ios",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "image_picker_linux",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "image_picker_macos",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "image_picker_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.9.3",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "image_picker_windows",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "js",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/js-0.6.7",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "lints",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/lints-2.1.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "matcher",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/matcher-0.12.15",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "material_color_utilities",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/material_color_utilities-0.2.0",
"packageUri": "lib/",
"languageVersion": "2.13"
},
{
"name": "meta",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/meta-1.9.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "mime",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/mime-1.0.4",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "octo_image",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/octo_image-2.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "path",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path-1.8.3",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "path_provider",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider-2.1.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "path_provider_android",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "path_provider_foundation",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "path_provider_linux",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "path_provider_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "path_provider_windows",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "pie_chart",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/pie_chart-5.4.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "platform",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/platform-3.1.4",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "plugin_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.7",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "rive",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rive-0.11.17",
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "rive_common",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7",
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "rxdart",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rxdart-0.27.7",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "shared_preferences",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences-2.2.2",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "shared_preferences_android",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "shared_preferences_foundation",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "shared_preferences_linux",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "shared_preferences_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.3.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "shared_preferences_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.1",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "shared_preferences_windows",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "sky_engine",
"rootUri": "file:///Users/avishka/Desktop/FLUTTER/flutter/bin/cache/pkg/sky_engine",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "source_span",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/source_span-1.9.1",
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "sprintf",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sprintf-7.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "sqflite",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "sqflite_common",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite_common-2.5.3",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "stack_trace",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/stack_trace-1.11.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "stream_channel",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/stream_channel-2.1.1",
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "string_scanner",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/string_scanner-1.2.0",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "synchronized",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "term_glyph",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/term_glyph-1.2.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "test_api",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/test_api-0.5.1",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "typed_data",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/typed_data-1.3.2",
"packageUri": "lib/",
"languageVersion": "2.17"
},
{
"name": "url_launcher",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher-6.1.14",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "url_launcher_android",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "url_launcher_ios",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "url_launcher_linux",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "url_launcher_macos",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "url_launcher_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "url_launcher_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.19",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "url_launcher_windows",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "uuid",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/uuid-4.2.2",
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "vector_math",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/vector_math-2.1.4",
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "video_player",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player-2.7.2",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "video_player_android",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_android-2.4.11",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "video_player_avfoundation",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.4.11",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "video_player_platform_interface",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_platform_interface-6.2.2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "video_player_web",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_web-2.0.17",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "win32",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/win32-5.0.9",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "xdg_directories",
"rootUri": "file:///Users/avishkanew/.pub-cache/hosted/pub.dev/xdg_directories-1.0.4",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "mobile_application_kids",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "3.0"
}
],
"generated": "2024-02-19T06:34:56.311121Z",
"generator": "pub",
"generatorVersion": "3.0.1"
}
sky_engine
3.0
file:///Users/avishka/Desktop/FLUTTER/flutter/bin/cache/pkg/sky_engine/
file:///Users/avishka/Desktop/FLUTTER/flutter/bin/cache/pkg/sky_engine/lib/
flutter
3.0
file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter/
file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter/lib/
flutter_test
3.0
file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter_test/
file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter_test/lib/
flutter_web_plugins
3.0
file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter_web_plugins/
file:///Users/avishka/Desktop/FLUTTER/flutter/packages/flutter_web_plugins/lib/
_flutterfire_internals
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/_flutterfire_internals-1.3.16/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/_flutterfire_internals-1.3.16/lib/
async
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/async-2.11.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/async-2.11.0/lib/
awesome_dialog
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/awesome_dialog-3.1.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/awesome_dialog-3.1.0/lib/
boolean_selector
2.17
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1/lib/
cached_network_image
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image-3.3.1/lib/
cached_network_image_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image_platform_interface-4.0.0/lib/
cached_network_image_web
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image_web-1.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cached_network_image_web-1.1.1/lib/
characters
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/characters-1.3.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/characters-1.3.0/lib/
clock
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/clock-1.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/
cloud_firestore
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/lib/
cloud_firestore_platform_interface
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_platform_interface-6.0.10/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_platform_interface-6.0.10/lib/
cloud_firestore_web
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10/lib/
collection
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/collection-1.17.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/collection-1.17.1/lib/
cross_file
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cross_file-0.3.3+7/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cross_file-0.3.3+7/lib/
crypto
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/crypto-3.0.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/crypto-3.0.3/lib/
csslib
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/csslib-1.0.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/csslib-1.0.0/lib/
cupertino_icons
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.6/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.6/lib/
fake_async
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/fake_async-1.3.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/fake_async-1.3.1/lib/
ffi
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/ffi-2.1.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/ffi-2.1.0/lib/
file
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file-7.0.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file-7.0.0/lib/
file_selector_linux
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1/lib/
file_selector_macos
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3/lib/
file_selector_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_platform_interface-2.6.2/lib/
file_selector_windows
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1/lib/
firebase_auth
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/lib/
firebase_auth_platform_interface
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_platform_interface-7.0.9/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_platform_interface-7.0.9/lib/
firebase_auth_web
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12/lib/
firebase_core
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/lib/
firebase_core_platform_interface
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_platform_interface-5.0.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_platform_interface-5.0.0/lib/
firebase_core_web
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0/lib/
firebase_storage
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/lib/
firebase_storage_platform_interface
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_platform_interface-5.1.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_platform_interface-5.1.3/lib/
firebase_storage_web
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17/lib/
flutter_cache_manager
2.17
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_cache_manager-3.3.1/lib/
flutter_lints
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_lints-2.0.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_lints-2.0.3/lib/
flutter_plugin_android_lifecycle
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17/lib/
graphs
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/graphs-2.3.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/graphs-2.3.1/lib/
html
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/html-0.15.4/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/html-0.15.4/lib/
http
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/http-1.1.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/http-1.1.0/lib/
http_parser
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/http_parser-4.0.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/http_parser-4.0.2/lib/
image_picker
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker-1.0.7/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker-1.0.7/lib/
image_picker_android
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3/lib/
image_picker_for_web
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0/lib/
image_picker_ios
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1/lib/
image_picker_linux
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/lib/
image_picker_macos
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1/lib/
image_picker_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.9.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_platform_interface-2.9.3/lib/
image_picker_windows
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/lib/
js
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/js-0.6.7/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/js-0.6.7/lib/
lints
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/lints-2.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/lints-2.1.1/lib/
matcher
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/matcher-0.12.15/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/matcher-0.12.15/lib/
material_color_utilities
2.13
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/material_color_utilities-0.2.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/material_color_utilities-0.2.0/lib/
meta
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/meta-1.9.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/meta-1.9.1/lib/
mime
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/mime-1.0.4/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/mime-1.0.4/lib/
octo_image
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/octo_image-2.0.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/octo_image-2.0.0/lib/
path
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path-1.8.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path-1.8.3/lib/
path_provider
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider-2.1.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider-2.1.2/lib/
path_provider_android
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2/lib/
path_provider_foundation
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/lib/
path_provider_linux
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/
path_provider_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/
path_provider_windows
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/lib/
pie_chart
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/pie_chart-5.4.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/pie_chart-5.4.0/lib/
platform
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/platform-3.1.4/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/platform-3.1.4/lib/
plugin_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.7/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.7/lib/
rive
2.14
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rive-0.11.17/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rive-0.11.17/lib/
rive_common
2.14
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/lib/
rxdart
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rxdart-0.27.7/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/rxdart-0.27.7/lib/
shared_preferences
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences-2.2.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences-2.2.2/lib/
shared_preferences_android
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1/lib/
shared_preferences_foundation
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/lib/
shared_preferences_linux
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/lib/
shared_preferences_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.3.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_platform_interface-2.3.2/lib/
shared_preferences_web
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.1/lib/
shared_preferences_windows
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/lib/
source_span
2.14
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/source_span-1.9.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/source_span-1.9.1/lib/
sprintf
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sprintf-7.0.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
sqflite
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/lib/
sqflite_common
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite_common-2.5.3/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite_common-2.5.3/lib/
stack_trace
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/stack_trace-1.11.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/stack_trace-1.11.0/lib/
stream_channel
2.14
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/stream_channel-2.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/stream_channel-2.1.1/lib/
string_scanner
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/
synchronized
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/synchronized-3.1.0+1/lib/
term_glyph
2.12
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/
test_api
2.18
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/test_api-0.5.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/test_api-0.5.1/lib/
typed_data
2.17
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/typed_data-1.3.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/typed_data-1.3.2/lib/
url_launcher
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher-6.1.14/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher-6.1.14/lib/
url_launcher_android
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0/lib/
url_launcher_ios
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4/lib/
url_launcher_linux
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/lib/
url_launcher_macos
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/lib/
url_launcher_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.1/lib/
url_launcher_web
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.19/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.19/lib/
url_launcher_windows
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/lib/
uuid
2.14
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/uuid-4.2.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/uuid-4.2.2/lib/
vector_math
2.14
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/vector_math-2.1.4/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/
video_player
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player-2.7.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player-2.7.2/lib/
video_player_android
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_android-2.4.11/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_android-2.4.11/lib/
video_player_avfoundation
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.4.11/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.4.11/lib/
video_player_platform_interface
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_platform_interface-6.2.2/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_platform_interface-6.2.2/lib/
video_player_web
2.19
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_web-2.0.17/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_web-2.0.17/lib/
win32
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/win32-5.0.9/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/win32-5.0.9/lib/
xdg_directories
3.0
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/xdg_directories-1.0.4/
file:///Users/avishkanew/.pub-cache/hosted/pub.dev/xdg_directories-1.0.4/lib/
mobile_application_kids
3.0
file:///Users/avishkanew/Desktop/Avishk678/monitoring-and-recommendations-for-early-childhood-development/
file:///Users/avishkanew/Desktop/Avishk678/monitoring-and-recommendations-for-early-childhood-development/lib/
2
3.10.1
\ No newline at end of file
# This is a generated file; do not edit or check into version control.
cloud_firestore=/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/
cloud_firestore_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10/
file_selector_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1/
file_selector_macos=/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3/
file_selector_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1/
firebase_auth=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/
firebase_auth_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12/
firebase_core=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/
firebase_core_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0/
firebase_storage=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/
firebase_storage_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17/
flutter_plugin_android_lifecycle=/Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17/
image_picker=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker-1.0.7/
image_picker_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3/
image_picker_for_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0/
image_picker_ios=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1/
image_picker_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
image_picker_macos=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1/
image_picker_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
path_provider=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider-2.1.2/
path_provider_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2/
path_provider_foundation=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/
path_provider_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
path_provider_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/
rive_common=/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/
shared_preferences=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences-2.2.2/
shared_preferences_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1/
shared_preferences_foundation=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/
shared_preferences_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/
shared_preferences_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.1/
shared_preferences_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/
sqflite=/Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/
url_launcher=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher-6.1.14/
url_launcher_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0/
url_launcher_ios=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4/
url_launcher_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/
url_launcher_macos=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/
url_launcher_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.19/
url_launcher_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/
video_player=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player-2.7.2/
video_player_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_android-2.4.11/
video_player_avfoundation=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.4.11/
video_player_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_web-2.0.17/
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"cloud_firestore","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/","native_build":true,"dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/","native_build":true,"dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/","native_build":true,"dependencies":[]},{"name":"firebase_storage","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/","native_build":true,"dependencies":["firebase_core"]},{"name":"image_picker_ios","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1/","native_build":true,"dependencies":[]},{"name":"path_provider_foundation","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"rive_common","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/","native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"url_launcher_ios","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4/","native_build":true,"dependencies":[]},{"name":"video_player_avfoundation","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.4.11/","native_build":true,"dependencies":[]}],"android":[{"name":"cloud_firestore","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/","native_build":true,"dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/","native_build":true,"dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/","native_build":true,"dependencies":[]},{"name":"firebase_storage","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/","native_build":true,"dependencies":["firebase_core"]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17/","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]},{"name":"path_provider_android","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2/","native_build":true,"dependencies":[]},{"name":"rive_common","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/","native_build":true,"dependencies":[]},{"name":"shared_preferences_android","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1/","native_build":true,"dependencies":[]},{"name":"sqflite","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/","native_build":true,"dependencies":[]},{"name":"url_launcher_android","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0/","native_build":true,"dependencies":[]},{"name":"video_player_android","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_android-2.4.11/","native_build":true,"dependencies":[]}],"macos":[{"name":"cloud_firestore","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/","native_build":true,"dependencies":["firebase_core"]},{"name":"file_selector_macos","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3/","native_build":true,"dependencies":[]},{"name":"firebase_auth","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/","native_build":true,"dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/","native_build":true,"dependencies":[]},{"name":"firebase_storage","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/","native_build":true,"dependencies":["firebase_core"]},{"name":"image_picker_macos","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1/","native_build":false,"dependencies":["file_selector_macos"]},{"name":"path_provider_foundation","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"rive_common","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/","native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"url_launcher_macos","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/","native_build":true,"dependencies":[]}],"linux":[{"name":"file_selector_linux","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1/","native_build":true,"dependencies":[]},{"name":"image_picker_linux","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/","native_build":false,"dependencies":["file_selector_linux"]},{"name":"path_provider_linux","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[]},{"name":"shared_preferences_linux","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/","native_build":false,"dependencies":["path_provider_linux"]},{"name":"url_launcher_linux","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/","native_build":true,"dependencies":[]}],"windows":[{"name":"cloud_firestore","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/","native_build":true,"dependencies":["firebase_core"]},{"name":"file_selector_windows","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1/","native_build":true,"dependencies":[]},{"name":"firebase_auth","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/","native_build":true,"dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/","native_build":true,"dependencies":[]},{"name":"firebase_storage","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/","native_build":true,"dependencies":["firebase_core"]},{"name":"image_picker_windows","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/","native_build":false,"dependencies":["file_selector_windows"]},{"name":"path_provider_windows","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/","native_build":false,"dependencies":[]},{"name":"rive_common","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/","native_build":true,"dependencies":[]},{"name":"shared_preferences_windows","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/","native_build":false,"dependencies":["path_provider_windows"]},{"name":"url_launcher_windows","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/","native_build":true,"dependencies":[]}],"web":[{"name":"cloud_firestore_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10/","dependencies":["firebase_core_web"]},{"name":"firebase_auth_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12/","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0/","dependencies":[]},{"name":"firebase_storage_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17/","dependencies":["firebase_core_web"]},{"name":"image_picker_for_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0/","dependencies":[]},{"name":"rive_common","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/","dependencies":[]},{"name":"shared_preferences_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.1/","dependencies":[]},{"name":"url_launcher_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.19/","dependencies":[]},{"name":"video_player_web","path":"/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_web-2.0.17/","dependencies":[]}]},"dependencyGraph":[{"name":"cloud_firestore","dependencies":["cloud_firestore_web","firebase_core"]},{"name":"cloud_firestore_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"firebase_auth","dependencies":["firebase_auth_web","firebase_core"]},{"name":"firebase_auth_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"firebase_storage","dependencies":["firebase_core","firebase_storage_web"]},{"name":"firebase_storage_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"rive_common","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"sqflite","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]}],"date_created":"2024-02-19 10:34:56.397361","version":"3.10.1"}
\ No newline at end of file
This contains all the project files of Student Monitoring system # mobile_application_kids
\ No newline at end of file
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
...@@ -13,8 +13,7 @@ linter: ...@@ -13,8 +13,7 @@ linter:
# The lint rules applied to this project can be customized in the # The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml` # section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints # included above or to enable additional rules. A list of all available lints
# and their documentation is published at # and their documentation is published at https://dart.dev/lints.
# https://dart-lang.github.io/linter/lints/index.html.
# #
# Instead of disabling a lint rule for the entire project in the # Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code # section below, it can also be suppressed for a single line of code
......
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android" name="Android">
<configuration>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
<option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" />
<option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" />
<option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/app/src/main/kotlin" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
</content>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
</component>
</module>
...@@ -768,6 +768,8 @@ PODS: ...@@ -768,6 +768,8 @@ PODS:
- gRPC-Core/Interface (= 1.49.1) - gRPC-Core/Interface (= 1.49.1)
- gRPC-Core/Interface (1.49.1) - gRPC-Core/Interface (1.49.1)
- GTMSessionFetcher/Core (3.2.0) - GTMSessionFetcher/Core (3.2.0)
- image_picker_ios (0.0.1):
- Flutter
- leveldb-library (1.22.2) - leveldb-library (1.22.2)
- nanopb (2.30909.1): - nanopb (2.30909.1):
- nanopb/decode (= 2.30909.1) - nanopb/decode (= 2.30909.1)
...@@ -784,6 +786,7 @@ DEPENDENCIES: ...@@ -784,6 +786,7 @@ DEPENDENCIES:
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- rive_common (from `.symlinks/plugins/rive_common/ios`) - rive_common (from `.symlinks/plugins/rive_common/ios`)
SPEC REPOS: SPEC REPOS:
...@@ -817,6 +820,8 @@ EXTERNAL SOURCES: ...@@ -817,6 +820,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/firebase_core/ios" :path: ".symlinks/plugins/firebase_core/ios"
Flutter: Flutter:
:path: Flutter :path: Flutter
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
rive_common: rive_common:
:path: ".symlinks/plugins/rive_common/ios" :path: ".symlinks/plugins/rive_common/ios"
...@@ -840,6 +845,7 @@ SPEC CHECKSUMS: ...@@ -840,6 +845,7 @@ SPEC CHECKSUMS:
"gRPC-C++": 2df8cba576898bdacd29f0266d5236fa0e26ba6a "gRPC-C++": 2df8cba576898bdacd29f0266d5236fa0e26ba6a
gRPC-Core: a21a60aefc08c68c247b439a9ef97174b0c54f96 gRPC-Core: a21a60aefc08c68c247b439a9ef97174b0c54f96
GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8 GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
leveldb-library: f03246171cce0484482ec291f88b6d563699ee06 leveldb-library: f03246171cce0484482ec291f88b6d563699ee06
nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
1E3094811D54E8AAC80BCF5C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21F802EBAFB590B45871EB5A /* Pods_RunnerTests.framework */; }; 1CE2512DACF8905DA8C59AD7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0770FCB9B23987634F025F4 /* Pods_Runner.framework */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
6A1A0AA9AA1960F463A333F8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6192271BD1CB0561B12544B9 /* Pods_RunnerTests.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
EA1B1ABF15E58277B04EA897 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC662B1DBDA263B4395ECFEE /* Pods_Runner.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
...@@ -44,17 +44,18 @@ ...@@ -44,17 +44,18 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
1967C3552AEEA88D37C49E80 /* 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 = "<group>"; };
21F802EBAFB590B45871EB5A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
44FB3604305CC2485CCB1F6E /* 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 = "<group>"; }; 50E2ECA5E0F922E20F07C583 /* 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 = "<group>"; };
50E8CE15F935F97A509F7A56 /* 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 = "<group>"; };
55F4C9AFB486AF6440B40770 /* 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 = "<group>"; };
5A96C7E3980A9B5C02572D79 /* 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 = "<group>"; };
6192271BD1CB0561B12544B9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
78F5625B16293232FD4609D9 /* 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 = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9539A5218D00273A3807C064 /* 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 = "<group>"; }; 7ED8C57A1019059EC7EE124A /* 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 = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
...@@ -62,17 +63,16 @@ ...@@ -62,17 +63,16 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AC662B1DBDA263B4395ECFEE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A0770FCB9B23987634F025F4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C45AA856564DC2801C0F8F85 /* 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 = "<group>"; }; C3BD64C0F46136BC83AD1159 /* 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 = "<group>"; };
EEFACC269DCB9EB7B8665AD4 /* 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 = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
59B4EBBABBC74DABBC221D84 /* Frameworks */ = { 1F6875A812E2C4A5F4752493 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
1E3094811D54E8AAC80BCF5C /* Pods_RunnerTests.framework in Frameworks */, 6A1A0AA9AA1960F463A333F8 /* Pods_RunnerTests.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EA1B1ABF15E58277B04EA897 /* Pods_Runner.framework in Frameworks */, 1CE2512DACF8905DA8C59AD7 /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -95,20 +95,6 @@ ...@@ -95,20 +95,6 @@
path = RunnerTests; path = RunnerTests;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
477B9F07B6227EC314BED6C6 /* Pods */ = {
isa = PBXGroup;
children = (
EEFACC269DCB9EB7B8665AD4 /* Pods-Runner.debug.xcconfig */,
C45AA856564DC2801C0F8F85 /* Pods-Runner.release.xcconfig */,
9539A5218D00273A3807C064 /* Pods-Runner.profile.xcconfig */,
44FB3604305CC2485CCB1F6E /* Pods-RunnerTests.debug.xcconfig */,
78F5625B16293232FD4609D9 /* Pods-RunnerTests.release.xcconfig */,
1967C3552AEEA88D37C49E80 /* Pods-RunnerTests.profile.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = { 9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -127,8 +113,8 @@ ...@@ -127,8 +113,8 @@
97C146F01CF9000F007C117D /* Runner */, 97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */, 97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */, 331C8082294A63A400263BE5 /* RunnerTests */,
477B9F07B6227EC314BED6C6 /* Pods */, AE67F7FEA5184B511ED75CC7 /* Pods */,
B626433C042DEA0FD86F8134 /* Frameworks */, A4EF1BBF798FD28BEF731394 /* Frameworks */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
...@@ -156,15 +142,29 @@ ...@@ -156,15 +142,29 @@
path = Runner; path = Runner;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
B626433C042DEA0FD86F8134 /* Frameworks */ = { A4EF1BBF798FD28BEF731394 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
AC662B1DBDA263B4395ECFEE /* Pods_Runner.framework */, A0770FCB9B23987634F025F4 /* Pods_Runner.framework */,
21F802EBAFB590B45871EB5A /* Pods_RunnerTests.framework */, 6192271BD1CB0561B12544B9 /* Pods_RunnerTests.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
AE67F7FEA5184B511ED75CC7 /* Pods */ = {
isa = PBXGroup;
children = (
7ED8C57A1019059EC7EE124A /* Pods-Runner.debug.xcconfig */,
50E8CE15F935F97A509F7A56 /* Pods-Runner.release.xcconfig */,
C3BD64C0F46136BC83AD1159 /* Pods-Runner.profile.xcconfig */,
55F4C9AFB486AF6440B40770 /* Pods-RunnerTests.debug.xcconfig */,
5A96C7E3980A9B5C02572D79 /* Pods-RunnerTests.release.xcconfig */,
50E2ECA5E0F922E20F07C583 /* Pods-RunnerTests.profile.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
...@@ -172,10 +172,10 @@ ...@@ -172,10 +172,10 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = ( buildPhases = (
05A69704320B2C82FB4AF38B /* [CP] Check Pods Manifest.lock */, BE4312E9EA4D85C9D9E72A7A /* [CP] Check Pods Manifest.lock */,
331C807D294A63A400263BE5 /* Sources */, 331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */, 331C807F294A63A400263BE5 /* Resources */,
59B4EBBABBC74DABBC221D84 /* Frameworks */, 1F6875A812E2C4A5F4752493 /* Frameworks */,
); );
buildRules = ( buildRules = (
); );
...@@ -191,14 +191,14 @@ ...@@ -191,14 +191,14 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
41BD9E2855DA7E314B501CE7 /* [CP] Check Pods Manifest.lock */, 174C9C65E73B6285738B3C01 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */, 9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */, 97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */, 97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */, 9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
1C77D96CBBD0BEC50401521B /* [CP] Embed Pods Frameworks */, CB2BC8791B79570097BA1E00 /* [CP] Embed Pods Frameworks */,
); );
buildRules = ( buildRules = (
); );
...@@ -269,7 +269,7 @@ ...@@ -269,7 +269,7 @@
/* End PBXResourcesBuildPhase section */ /* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
05A69704320B2C82FB4AF38B /* [CP] Check Pods Manifest.lock */ = { 174C9C65E73B6285738B3C01 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
...@@ -284,47 +284,45 @@ ...@@ -284,47 +284,45 @@
outputFileListPaths = ( outputFileListPaths = (
); );
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
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"; 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";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
1C77D96CBBD0BEC50401521B /* [CP] Embed Pods Frameworks */ = { 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
); );
name = "[CP] Embed Pods Frameworks"; name = "Thin Binary";
outputFileListPaths = ( outputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
showEnvVarsInLog = 0;
}; };
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1; alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputPaths = ( inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
); );
name = "Thin Binary"; name = "Run Script";
outputPaths = ( outputPaths = (
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
}; };
41BD9E2855DA7E314B501CE7 /* [CP] Check Pods Manifest.lock */ = { BE4312E9EA4D85C9D9E72A7A /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
...@@ -339,27 +337,29 @@ ...@@ -339,27 +337,29 @@
outputFileListPaths = ( outputFileListPaths = (
); );
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
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"; 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";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
9740EEB61CF901F6004384FC /* Run Script */ = { CB2BC8791B79570097BA1E00 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
name = "Run Script"; name = "[CP] Embed Pods Frameworks";
outputPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
}; };
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
...@@ -484,7 +484,7 @@ ...@@ -484,7 +484,7 @@
}; };
331C8088294A63A400263BE5 /* Debug */ = { 331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 44FB3604305CC2485CCB1F6E /* Pods-RunnerTests.debug.xcconfig */; baseConfigurationReference = 55F4C9AFB486AF6440B40770 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
...@@ -502,7 +502,7 @@ ...@@ -502,7 +502,7 @@
}; };
331C8089294A63A400263BE5 /* Release */ = { 331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 78F5625B16293232FD4609D9 /* Pods-RunnerTests.release.xcconfig */; baseConfigurationReference = 5A96C7E3980A9B5C02572D79 /* Pods-RunnerTests.release.xcconfig */;
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
...@@ -518,7 +518,7 @@ ...@@ -518,7 +518,7 @@
}; };
331C808A294A63A400263BE5 /* Profile */ = { 331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 1967C3552AEEA88D37C49E80 /* Pods-RunnerTests.profile.xcconfig */; baseConfigurationReference = 50E2ECA5E0F922E20F07C583 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
......
No preview for this file type
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:video_player/video_player.dart';
class UserActivitiesScreen extends StatelessWidget {
final String userId;
UserActivitiesScreen({required this.userId});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('User Activities'),
),
body: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('activities')
.where('user', isEqualTo: userId)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Loading indicator
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}'); // Error handling
}
if (snapshot.data == null || snapshot.data!.docs.isEmpty) {
return Center(
child: Text('No activities found for this user.'),
); // No activities found
}
return ListView(
children: snapshot.data!.docs.map((document) {
final videoUrl = document['videoUrl'];
final imageUrl = document['imageUrl'];
if (videoUrl != null) {
return _buildVideoItem(videoUrl);
} else if (imageUrl != null) {
return _buildImageItem(imageUrl);
} else {
return SizedBox(); // Return an empty widget if neither video nor image URL is available
}
}).toList(),
);
},
),
);
}
Widget _buildVideoItem(String videoUrl) {
return ListTile(
title: Text('Activity Video'),
leading: FutureBuilder(
future: VideoPlayerController.network(videoUrl).initialize(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Placeholder while video loads
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
if (snapshot.connectionState == ConnectionState.done) {
try {
final controller = VideoPlayerController.network(videoUrl);
return AspectRatio(
aspectRatio: controller.value.aspectRatio,
child: VideoPlayer(controller),
);
} catch (e) {
return Text('Error playing video: $e');
}
} else {
return SizedBox(); // Return empty widget if still loading
}
},
),
onTap: () {
// Handle tap, e.g., navigate to a detail screen
},
);
}
Widget _buildImageItem(String imageUrl) {
return ListTile(
title: Text('Activity Image'),
leading: CachedNetworkImage(
imageUrl: imageUrl,
placeholder: (context, url) =>
CircularProgressIndicator(), // Placeholder while image loads
errorWidget: (context, url, error) => Icon(Icons.error),
),
onTap: () {
// Handle tap, e.g., navigate to a detail screen
},
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/teacherchat.dart'; import 'package:mobile_application_kids/teacherchat.dart';
import 'package:jema_app/classroomview.dart'; import 'package:mobile_application_kids/classroomview.dart';
import 'package:jema_app/addclassroom.dart'; import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'package:pie_chart/pie_chart.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Attendance extends StatelessWidget { import 'ChatScreen.dart';
import 'TeacherProfile.dart';
class Attendance extends StatefulWidget {
@override
_AttendanceState createState() => _AttendanceState();
}
class _AttendanceState extends State<Attendance> {
late User? user; late User? user;
late final Stream<QuerySnapshot> _usersStream; late final Stream<QuerySnapshot> _usersStream;
Attendance() { int absCount = 0;
int preCount = 0;
@override
void initState() {
super.initState();
user = FirebaseAuth.instance.currentUser; user = FirebaseAuth.instance.currentUser;
initializeStreams(); initializeStreams();
getAllStudentCountPresentAbs();
} }
Map<String, double> dataMap = {
"Present": 0,
"Absent": 0,
};
void initializeStreams() { void initializeStreams() {
_usersStream = FirebaseFirestore.instance _usersStream = FirebaseFirestore.instance
.collection('classroom') .collection('students')
.where('userId', isEqualTo: user?.uid) .where('user', isEqualTo: user?.uid)
.snapshots(); .snapshots();
} }
...@@ -37,7 +59,7 @@ class Attendance extends StatelessWidget { ...@@ -37,7 +59,7 @@ class Attendance extends StatelessWidget {
), ),
actions: [ actions: [
Text( Text(
'Attendance', 'Attendance ',
style: TextStyle( style: TextStyle(
color: Color(0xFF554994), color: Color(0xFF554994),
fontSize: 24, fontSize: 24,
...@@ -130,14 +152,23 @@ class Attendance extends StatelessWidget { ...@@ -130,14 +152,23 @@ class Attendance extends StatelessWidget {
), ),
const SizedBox(width: 2), const SizedBox(width: 2),
SizedBox( SizedBox(
width: 30, width: 30,
child: TextField( child: FutureBuilder<String>(
decoration: InputDecoration( future: getMaleStudentCount(
labelText: '06', 'Male', 0),
border: OutlineInputBorder(), builder: (context, snapshot) {
), if (snapshot.connectionState ==
), ConnectionState.waiting) {
), // Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
return Text(' ' +
snapshot.data.toString());
}
})),
], ],
), ),
), ),
...@@ -177,12 +208,22 @@ class Attendance extends StatelessWidget { ...@@ -177,12 +208,22 @@ class Attendance extends StatelessWidget {
const SizedBox(width: 2), const SizedBox(width: 2),
SizedBox( SizedBox(
width: 30, width: 30,
child: TextField( child: FutureBuilder<String>(
decoration: InputDecoration( future: getMaleStudentCount(
labelText: '06', 'Female', 0),
border: OutlineInputBorder(), builder: (context, snapshot) {
), if (snapshot.connectionState ==
), ConnectionState.waiting) {
// Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
return Text(' ' +
snapshot.data.toString());
}
}),
), ),
], ],
), ),
...@@ -224,16 +265,31 @@ class Attendance extends StatelessWidget { ...@@ -224,16 +265,31 @@ class Attendance extends StatelessWidget {
), ),
), ),
const SizedBox(width: 3), const SizedBox(width: 3),
Text( FutureBuilder<String>(
'12', future: getAllStudentCount(0),
style: TextStyle( builder: (context, snapshot) {
color: Colors.white, if (snapshot.connectionState ==
fontSize: 16, ConnectionState.waiting) {
fontFamily: 'Poppins', // Future is still loading, show a loading indicator
fontWeight: FontWeight.w600, return CircularProgressIndicator();
height: 0.06, } else if (snapshot.hasError) {
), // Error occurred while fetching data
),
return Text('0');
} else {
return Text(
snapshot.data.toString(),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.06,
),
);
}
},
)
], ],
), ),
), ),
...@@ -307,14 +363,23 @@ class Attendance extends StatelessWidget { ...@@ -307,14 +363,23 @@ class Attendance extends StatelessWidget {
), ),
const SizedBox(width: 2), const SizedBox(width: 2),
SizedBox( SizedBox(
width: 30, width: 30,
child: TextField( child: FutureBuilder<String>(
decoration: InputDecoration( future: getMaleStudentCount(
labelText: '06', 'Male', 1),
border: OutlineInputBorder(), builder: (context, snapshot) {
), if (snapshot.connectionState ==
), ConnectionState.waiting) {
), // Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
return Text(' ' +
snapshot.data.toString());
}
})),
], ],
), ),
), ),
...@@ -353,14 +418,23 @@ class Attendance extends StatelessWidget { ...@@ -353,14 +418,23 @@ class Attendance extends StatelessWidget {
), ),
const SizedBox(width: 2), const SizedBox(width: 2),
SizedBox( SizedBox(
width: 30, width: 30,
child: TextField( child: FutureBuilder<String>(
decoration: InputDecoration( future: getMaleStudentCount(
labelText: '06', 'Female', 1),
border: OutlineInputBorder(), builder: (context, snapshot) {
), if (snapshot.connectionState ==
), ConnectionState.waiting) {
), // Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
return Text(' ' +
snapshot.data.toString());
}
})),
], ],
), ),
), ),
...@@ -401,15 +475,32 @@ class Attendance extends StatelessWidget { ...@@ -401,15 +475,32 @@ class Attendance extends StatelessWidget {
), ),
), ),
const SizedBox(width: 3), const SizedBox(width: 3),
Text( FutureBuilder<String>(
'12', future: getAllStudentCount(1),
style: TextStyle( builder: (context, snapshot) {
color: Colors.white, if (snapshot.connectionState ==
fontSize: 16, ConnectionState.waiting) {
fontFamily: 'Poppins', // Future is still loading, show a loading indicator
fontWeight: FontWeight.w600, return CircularProgressIndicator();
height: 0.06, } else if (snapshot.hasError) {
), // Error occurred while fetching data
return Text('0');
} else {
// Data loaded successfully, display it
return Text(
snapshot.data.toString(),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.06,
),
);
}
},
), ),
], ],
), ),
...@@ -516,282 +607,41 @@ class Attendance extends StatelessWidget { ...@@ -516,282 +607,41 @@ class Attendance extends StatelessWidget {
), ),
Center( Center(
child: Container( child: Container(
width: 150, width: 300,
height: 150, height: 250,
child: Stack( child: Stack(
children: [ children: [
Positioned( PieChart(
left: 0, dataMap: dataMap,
top: 150, chartType: ChartType.disc,
child: Transform( chartRadius:
transform: Matrix4.identity() MediaQuery.of(context)
..translate(0.0, 0.0) .size
..rotateZ(-1.4), .width /
child: Container( 2.2,
width: 150, colorList: [
height: 150, Color.fromARGB(
decoration: ShapeDecoration( 255, 83, 172, 255),
color: Color.fromARGB( Color.fromARGB(
255, 34, 177, 16), 255, 106, 210, 255),
shape: OvalBorder(), ],
), legendOptions: LegendOptions(
), showLegendsInRow: true,
legendPosition:
LegendPosition.bottom,
showLegends: true,
legendTextStyle: TextStyle(
fontWeight:
FontWeight.bold),
), ),
), chartValuesOptions:
Positioned( ChartValuesOptions(
left: 0, showChartValueBackground:
top: 150, true,
child: Transform( showChartValues: true,
transform: Matrix4.identity() showChartValuesInPercentage:
..translate(0.0, 0.0) true,
..rotateZ(-1.5), showChartValuesOutside: false,
child: Container(
width: 150,
height: 150,
decoration: ShapeDecoration(
color: Color.fromARGB(
255, 180, 124, 13),
shape: OvalBorder(),
),
),
),
),
Positioned(
left: 0,
top: 150,
child: Transform(
transform: Matrix4.identity()
..translate(0.0, 0.0)
..rotateZ(-1.7),
child: Container(
width: 150,
height: 150,
decoration: ShapeDecoration(
color: Color.fromARGB(
255, 38, 138, 232),
shape: OvalBorder(),
),
),
),
),
],
),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(
10, 30, 0, 0),
child: Container(
width: 323,
height: 75,
clipBehavior: Clip.antiAlias,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(12),
),
shadows: [
BoxShadow(
color: Color(0x1E7090B0),
blurRadius: 40,
offset: Offset(0, 18),
spreadRadius: 0,
)
],
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
height: 37,
child: Column(
mainAxisSize:
MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets
.fromLTRB(
0, 20, 0, 0),
child: Container(
width: double.infinity,
height: 10,
child: Row(
mainAxisSize:
MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment
.start,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Container(
width: 8,
height: 8,
decoration:
ShapeDecoration(
color: Color(
0xFF53ACFF),
shape:
OvalBorder(),
),
),
const SizedBox(
width: 5),
SizedBox(
width: 55,
height: 10,
child: Text(
'Present',
style:
TextStyle(
color: Color(
0xFF21205B),
fontSize: 14,
fontFamily:
'Poppins',
fontWeight:
FontWeight
.w500,
height: 0.07,
letterSpacing:
-0.28,
),
),
),
const SizedBox(
height: 1),
Text(
'75%',
style: TextStyle(
color: Color(
0xFF2B3674),
fontSize: 18,
fontFamily:
'Poppins',
fontWeight:
FontWeight
.w600,
height: 0.06,
letterSpacing:
-0.36,
),
),
],
),
),
),
],
),
),
Container(
height: 37,
child: Column(
mainAxisSize:
MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Container(
width: double.infinity,
height: 10,
child: Row(
mainAxisSize:
MainAxisSize.min,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Container(
width: 8,
height: 8,
decoration:
ShapeDecoration(
color: Color(
0xFF6AD2FF),
shape:
OvalBorder(),
),
),
const SizedBox(
width: 5),
SizedBox(
width: 51,
height: 10,
child: Text(
'Absent',
style: TextStyle(
color: Color(
0xFF21205B),
fontSize: 14,
fontFamily:
'Poppins',
fontWeight:
FontWeight
.w500,
height: 0.07,
letterSpacing:
-0.28,
),
),
),
const SizedBox(
height: 2),
SizedBox(
width: 37,
height: 16,
child: Text(
'25%',
style: TextStyle(
color: Color(
0xFF2B3674),
fontSize: 18,
fontFamily:
'Poppins',
fontWeight:
FontWeight
.w600,
height: 0.06,
letterSpacing:
-0.36,
),
),
),
],
),
),
],
),
),
Transform(
transform: Matrix4.identity()
..translate(0.0, 0.0)
..rotateZ(-1.57),
child: Container(
width: 47,
decoration: ShapeDecoration(
shape:
RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign: BorderSide
.strokeAlignCenter,
color:
Color(0xFFF4F7FE),
),
),
),
), ),
), ),
], ],
...@@ -827,12 +677,28 @@ class Attendance extends StatelessWidget { ...@@ -827,12 +677,28 @@ class Attendance extends StatelessWidget {
), ),
], ],
selectedItemColor: Colors.blue, selectedItemColor: Colors.blue,
onTap: (index) { onTap: (index) async {
final prefs = await SharedPreferences.getInstance();
String rool = prefs.get('rool').toString();
// Handle bottom navigation item tap // Handle bottom navigation item tap
if (index == 0) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
}
if (index == 1) { if (index == 1) {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => TeacherChatPage()), MaterialPageRoute(builder: (context) => ChatScreen()),
);
}
if (index == 2) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(uid: user?.uid)),
); );
} }
}, },
...@@ -840,4 +706,70 @@ class Attendance extends StatelessWidget { ...@@ -840,4 +706,70 @@ class Attendance extends StatelessWidget {
), ),
); );
} }
Stream<QuerySnapshot> getStudentsStream(String genderFilter, int isCheck) {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('Sex', isEqualTo: genderFilter)
.where('isCheck', isEqualTo: isCheck)
.snapshots();
}
Future<String> getMaleStudentCount(String sex, int isCheck) async {
try {
QuerySnapshot snapshot = await getStudentsStream(sex, isCheck).first;
return snapshot.size.toString();
} catch (e) {
print('Error getting male student count: $e');
return '0';
}
}
Stream<QuerySnapshot> getAllStudentsStream(int isCheck) {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('isCheck', isEqualTo: isCheck)
.snapshots();
}
Future<String> getAllStudentCount(int isCheck) async {
try {
QuerySnapshot snapshot = await getAllStudentsStream(isCheck).first;
print('size' + snapshot.size.toString());
return snapshot.size.toString();
} catch (e) {
print('Error getting male student count: $e');
return '0';
}
}
Stream<QuerySnapshot> getAllStudentsStreams() {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
}
Future<void> getAllStudentCountPresentAbs() async {
try {
QuerySnapshot snapshot2 = await getAllStudentsStreams().first;
QuerySnapshot snapshot = await getAllStudentsStream(0).first;
QuerySnapshot snapshotAbs = await getAllStudentsStream(1).first;
preCount = snapshot.size;
absCount = snapshotAbs.size;
var pre = (snapshot.size / snapshot2.size) * 100;
var abs = (snapshotAbs.size / snapshot2.size) * 100;
setState(() {
dataMap["Present"] = pre.round().toDouble();
dataMap["Absent"] = abs.round().toDouble();
});
print("ss" + preCount.round().toString());
} catch (e) {
print('Error getting male student count: $e');
}
}
} }
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
class ChatScreen extends StatefulWidget {
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
final TextEditingController _textController = TextEditingController();
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final FirebaseAuth _auth = FirebaseAuth.instance;
late User? _user;
File? _imageFile;
String? _voiceFilePath;
String? _username;
@override
void initState() {
super.initState();
_user = _auth.currentUser;
fetchFullName(_user!.uid).then((fullName) {
if (fullName != null) {
_username = fullName;
} else {
print('No such document');
}
});
}
void _sendMessage() async {
try {
if (_textController.text.isNotEmpty ||
_imageFile != null ||
_voiceFilePath != null) {
String message = _textController.text.trim();
_textController.clear();
String imageUrl = '';
String voiceUrl = '';
if (_imageFile != null) {
imageUrl = await _uploadFile(_imageFile!);
}
if (_voiceFilePath != null) {
voiceUrl = await _uploadFile(File(_voiceFilePath!));
}
CollectionReference ref =
FirebaseFirestore.instance.collection('users');
DocumentSnapshot snapshot = await ref.doc(_user!.uid).get();
if (snapshot.exists) {
_username = (snapshot.data() as Map<String, dynamic>)['fullName'];
} else {
return null;
}
await _firestore.collection('messages').add({
'text': message,
'createdAt': Timestamp.now(),
'user': _user!.uid,
'imageUrl': imageUrl,
'voiceUrl': voiceUrl,
'userName': _username
});
_imageFile = null;
_voiceFilePath = null;
}
} catch (e, stackTrace) {
print('Error sending message: $e');
print('Stack trace: $stackTrace');
// Handle the error gracefully, e.g., show a snackbar or display an error message
}
}
Future<String> _uploadFile(File file) async {
Reference storageReference = FirebaseStorage.instance
.ref()
.child('uploads/${DateTime.now().millisecondsSinceEpoch}');
UploadTask uploadTask = storageReference.putFile(file);
await uploadTask.whenComplete(() => null);
return await storageReference.getDownloadURL();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Chat '),
),
body: Column(
children: <Widget>[
Expanded(
child: StreamBuilder(
stream: _firestore
.collection('messages')
.orderBy('createdAt', descending: true)
.snapshots(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return ListView.builder(
reverse: true,
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
var message = snapshot.data!.docs[index];
bool isCurrentUser = message['user'] == _user!.uid;
// Perform null check before accessing properties using []
String? text = (message.data()
as Map<String, dynamic>)['text'] as String?;
String? imageUrl = (message.data()
as Map<String, dynamic>)['imageUrl'] as String?;
String? voiceUrl = (message.data()
as Map<String, dynamic>)['voiceUrl'] as String?;
String? __username = (message.data()
as Map<String, dynamic>)['userName'] as String?;
return MessageBubble(
message: text ?? '',
imageUrl: imageUrl,
voiceUrl: voiceUrl,
isCurrentUser: isCurrentUser,
userName: __username!);
},
);
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: <Widget>[
IconButton(
icon: Icon(Icons.photo),
onPressed: () async {
XFile? image = await ImagePicker()
.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
_imageFile = File(image.path);
});
}
},
),
Expanded(
child: TextField(
controller: _textController,
decoration: InputDecoration(
labelText: 'Send a message...',
),
),
),
IconButton(
icon: Icon(Icons.send),
onPressed: _sendMessage,
),
],
),
),
],
),
);
}
Future<String?> getFullNameByUid(String uid) async {
CollectionReference ref = FirebaseFirestore.instance.collection('users');
DocumentSnapshot snapshot = await ref.doc(uid).get();
if (snapshot.exists) {
return (snapshot.data() as Map<String, dynamic>)['fullName'];
} else {
return null;
}
}
Future<String?> fetchFullName(String uid) async {
String? fullName = await getFullNameByUid(_user!.uid);
return fullName;
}
}
class MessageBubble extends StatelessWidget {
final String message;
final String? imageUrl;
final String? voiceUrl;
final bool isCurrentUser;
final String userName;
const MessageBubble({
Key? key,
required this.message,
required this.isCurrentUser,
this.imageUrl,
this.voiceUrl,
required this.userName,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0),
child: Align(
alignment: isCurrentUser ? Alignment.centerRight : Alignment.centerLeft,
child: Container(
decoration: BoxDecoration(
color: isCurrentUser ? Colors.blue : Colors.green,
borderRadius: BorderRadius.circular(12.0),
),
padding: EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
if (imageUrl != null &&
Uri.parse(imageUrl!)
.isAbsolute) // Check if imageUrl is not null and a valid network URL
Image.network(
imageUrl!,
width: 200,
),
if (message.isNotEmpty) Text(message),
Text(
userName,
style: TextStyle(
color: Color.fromARGB(255, 248, 4, 4),
fontSize: 8,
),
)
],
),
),
),
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/ChatScreen.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'package:mobile_application_kids/classroomview.dart';
import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'TeacherProfile.dart';
class CheckKidsPage extends StatelessWidget {
late User? user;
late final Stream<QuerySnapshot> _usersStream;
CheckKidsPage() {
user = FirebaseAuth.instance.currentUser;
initializeStreams();
}
void initializeStreams() {
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Check In / Out ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Bright Sparkle ',
style: TextStyle(
color: Color(0xFF11324D),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.04,
letterSpacing: -0.96,
),
),
SizedBox(height: 30),
Text(
'Select Kids ',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
SizedBox(height: 10),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (context, snapshot) {
print("--------------------------------------");
print(snapshot.data!.docs.length);
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
var itemCount = snapshot.data!.docs.length;
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
4, // Adjust this value to control the number of items per row
crossAxisSpacing:
8.0, // Adjust spacing between items horizontally
mainAxisSpacing:
8.0, // Adjust spacing between items vertically
),
itemCount: itemCount,
itemBuilder: (context, index) {
var document = snapshot.data!.docs[index];
var className = document['Firstname'];
var image = document['image'];
var isCheck = document['isCheck'];
return Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
child: InkWell(
onTap: () {
print(document);
if (isCheck == 1) {
updateStudentAge(document.id, 0);
} else {
// Handle view class button press
updateStudentAge(document.id, 1);
}
},
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 74.24,
height: 74.24,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
image: DecorationImage(
image: NetworkImage(
image,
),
fit: BoxFit.fill,
),
shape: OvalBorder(),
),
),
),
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
color: isCheck == 1
? Color.fromARGB(
71, 228, 11, 11)
: Color.fromARGB(
70, 70, 218, 11),
shape: OvalBorder(),
),
),
),
Positioned(
left: 7.42,
top: 51.97,
child: Container(
width: 59.40,
padding: const EdgeInsets.all(4.95),
decoration: ShapeDecoration(
color: isCheck == 1
? Color.fromARGB(
160, 28, 136, 224)
: Color.fromARGB(
71, 218, 49, 11),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(4.95),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
className,
style: TextStyle(
color: Colors.white,
fontSize: 12.37,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.08,
),
),
],
),
),
),
],
),
)
],
),
),
),
);
},
);
},
),
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
switch (index) {
case 0:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(
uid: user?.uid,
)),
);
break;
}
},
),
),
);
}
void updateStudentAge(String documentId, int check) async {
try {
await FirebaseFirestore.instance
.collection('students')
.doc(documentId)
.update({
'isCheck': check,
// Add more fields to update if needed
});
print('Document updated successfully!');
} catch (e) {
print('Error updating document: $e');
}
}
}
import 'dart:io';
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:cross_file/src/types/interface.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/ChatScreen.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'package:mobile_application_kids/classroomview.dart';
import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'TeacherProfile.dart';
class ChildrenActiPhone extends StatelessWidget {
late User? user;
String image;
late final Stream<QuerySnapshot> _usersStream;
ChildrenActiPhone({required this.image}) {
user = FirebaseAuth.instance.currentUser;
initializeStreams();
}
void initializeStreams() {
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
}
@override
Widget build(BuildContext context) {
final pickedFile = File(image);
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Photo ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: Container(
height: 400,
child:
Image(image: FileImage(pickedFile), fit: BoxFit.cover)),
), //)
SizedBox(height: 30),
Text(
'Select Kids ',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
SizedBox(height: 10),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (context, snapshot) {
print("--------------------------------------");
print(snapshot.data!.docs.length);
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
var itemCount = snapshot.data!.docs.length;
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
4, // Adjust this value to control the number of items per row
crossAxisSpacing:
8.0, // Adjust spacing between items horizontally
mainAxisSpacing:
8.0, // Adjust spacing between items vertically
),
itemCount: itemCount,
itemBuilder: (context, index) {
var document = snapshot.data!.docs[index];
var className = document['Firstname'];
var image = document['image'];
var isCheck = document['isCheck'];
return Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
child: InkWell(
onTap: () {
print(document);
if (isCheck == 1) {
updateStudentAge(document.id, 0);
} else {
// Handle view class button press
updateStudentAge(document.id, 1);
}
},
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 74.24,
height: 74.24,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
image: DecorationImage(
image: NetworkImage(
image,
),
fit: BoxFit.fill,
),
shape: OvalBorder(),
),
),
),
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
color: isCheck == 1
? Color.fromARGB(
72, 219, 219, 219)
: Color.fromARGB(
71, 218, 49, 11),
shape: OvalBorder(),
),
),
),
Positioned(
left: 7.42,
top: 51.97,
child: Container(
width: 59.40,
padding: const EdgeInsets.all(4.95),
decoration: ShapeDecoration(
color: isCheck == 1
? Color.fromARGB(
160, 28, 136, 224)
: Color.fromARGB(
71, 218, 49, 11),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(4.95),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
className,
style: TextStyle(
color: Colors.white,
fontSize: 12.37,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.08,
),
),
],
),
),
),
],
),
)
],
),
),
),
);
},
);
},
),
),
Center(
child: Container(
decoration: BoxDecoration(
border: Border.all(
color:
Colors.grey), // You can customize the color and width
borderRadius: BorderRadius.circular(
8), // You can customize the border radius
),
child: TextButton(
onPressed: () => {_showTimePicker(context)},
child: Text(
'Add Activity',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
),
))
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
switch (index) {
case 0:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(
uid: user?.uid,
)),
);
break;
}
},
),
),
);
}
void updateStudentAge(String documentId, int check) async {
try {
await FirebaseFirestore.instance
.collection('students')
.doc(documentId)
.update({
'isCheck': check,
// Add more fields to update if needed
});
print('Document updated successfully!');
} catch (e) {
print('Error updating document: $e');
}
}
Future<void> _showTimePicker(BuildContext context) async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
if (pickedTime != null) {
_uploadImage(File(image), context).then((imageUrl) {
_saveActivity(imageUrl, context);
});
print('Selected Time: ${pickedTime.format(context)}');
}
}
Future<String> _uploadImage(File imageFile, context) async {
try {
Reference storageReference = FirebaseStorage.instance
.ref()
.child('activity_images/${DateTime.now().millisecondsSinceEpoch}');
UploadTask uploadTask = storageReference.putFile(imageFile);
await uploadTask.whenComplete(() => null);
String imageUrl = await storageReference.getDownloadURL();
return imageUrl;
} catch (e) {
AwesomeDialog(
context: context,
dialogType: DialogType.error,
animType: AnimType.rightSlide,
title: 'Error',
desc: 'An error occurred while uploading your image!',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
return '';
}
}
Future<void> _saveActivity(String imageUrl, context) async {
try {
await FirebaseFirestore.instance.collection('activities').add({
'imageUrl': imageUrl,
'timestamp': Timestamp.now(),
'user': user!.uid,
// Add more fields as needed
});
AwesomeDialog(
context: context,
dialogType: DialogType.success,
animType: AnimType.rightSlide,
title: 'Activity Saved',
desc: 'Your activity has been saved successfully!',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
} catch (e) {
print('Error saving activity: $e');
AwesomeDialog(
context: context,
dialogType: DialogType.error,
animType: AnimType.rightSlide,
title: 'Error',
desc: 'An error occurred while saving your activity!',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
}
}
}
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:mobile_application_kids/Attendance.dart';
import 'package:mobile_application_kids/ChildrenVideo.dart';
import 'package:mobile_application_kids/ReportKids.dart';
import 'CheckKids.dart';
import 'ChildrenActiPhone.dart';
import 'ChildrenHomePage.dart';
import 'addstudent.dart';
class ChildrenActivity extends StatelessWidget {
late Future<List<DocumentSnapshot>> students = getStudentData();
final TextEditingController _searchController = TextEditingController();
late StreamController<String> _searchTermController;
late User? user;
ChildrenActivity({super.key}) {
user = FirebaseAuth.instance.currentUser;
}
Future<List<DocumentSnapshot>> getStudentData() async {
QuerySnapshot querySnapshot =
await FirebaseFirestore.instance.collection('students').get();
return querySnapshot.docs;
}
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context);
},
),
actions: [
Text(
'Activities ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(width * 0.1, 20, width * 0.1, 20),
child: Container(
width: 293,
height: 44,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 4,
offset: Offset(0, 1),
spreadRadius: 0,
),
],
),
child: TextField(
controller: _searchController,
onChanged: (value) {
_searchTermController.add(value);
},
decoration: InputDecoration(
hintText: 'Search',
border: InputBorder.none,
icon: Padding(
padding: const EdgeInsets.all(8.0),
child: Icon(Icons.search),
),
suffixIcon: Icon(Icons.mic),
contentPadding: EdgeInsets.all(8),
),
),
),
),
SizedBox(height: 10),
GridView.count(
crossAxisCount: 2,
childAspectRatio: (1 / 0.6),
shrinkWrap: true,
children: [
GestureDetector(
onTap: () {
openCamera(context);
},
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
width: 170,
height: 85,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'lib/assets/ac1.png'), // Replace 'path/to/your/image.jpg' with your image path
fit: BoxFit
.cover, // Adjust this according to your needs
)),
),
),
),
GestureDetector(
onTap: () {
openVideoRecorder(context);
},
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
width: 170,
height: 85,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'lib/assets/ac2.png'), // Replace 'path/to/your/image.jpg' with your image path
fit: BoxFit
.cover, // Adjust this according to your needs
)),
),
),
),
GestureDetector(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => ChildrenActivity(),
));
},
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
width: 170,
height: 85,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'lib/assets/ac3.png'), // Replace 'path/to/your/image.jpg' with your image path
fit: BoxFit
.cover, // Adjust this according to your needs
)),
),
),
),
GestureDetector(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => CheckKidsPage(),
));
},
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
width: 170,
height: 85,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'lib/assets/ac4.png'), // Replace 'path/to/your/image.jpg' with your image path
fit: BoxFit
.cover, // Adjust this according to your needs
)),
),
),
),
GestureDetector(
onTap: () {
// Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => ReportKidsPage( classroom: ),
// ));
},
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
width: 170,
height: 85,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'lib/assets/ac5.png'), // Replace 'path/to/your/image.jpg' with your image path
fit: BoxFit
.cover, // Adjust this according to your needs
)),
),
),
),
]),
],
),
),
),
);
}
void openCamera(context) async {
final picker = ImagePicker();
final pickedFile = await picker.pickImage(source: ImageSource.camera);
if (pickedFile != null) {
String imagePath = pickedFile.path;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ChildrenActiPhone(image: imagePath)),
);
// Use the picked file, for example, display it in an Image widget
// Image.file(File(pickedFile.path))
print('Image selected: ${pickedFile.path}');
} else {
print('No image selected');
}
}
void openVideoRecorder(context) async {
final picker = ImagePicker();
final pickedFile = await picker.pickVideo(source: ImageSource.camera);
if (pickedFile != null) {
String imagePath = pickedFile.path;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ChildrenVideo(video: imagePath)),
);
// Use the picked file, for example, display it in a Video widget
// Video.file(File(pickedFile.path))
print('Video selected: ${pickedFile.path}');
} else {
print('No video selected');
}
}
}
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/teacherchat.dart'; import 'package:mobile_application_kids/teacherchat.dart';
import 'package:jema_app/classroomview.dart'; import 'package:mobile_application_kids/classroomview.dart';
import 'package:jema_app/addclassroom.dart'; import 'package:mobile_application_kids/addclassroom.dart';
import 'childrenProfile.dart'; import 'childrenProfile.dart';
class ChildrenHomePage extends StatelessWidget { class ChildrenHomePage extends StatelessWidget {
late User? user; late User? user;
final TextEditingController _searchController = TextEditingController();
late StreamController<String> _searchTermController;
late final Stream<QuerySnapshot> _usersStream; late final Stream<QuerySnapshot> _usersStream;
ChildrenHomePage() { String classroom;
ChildrenHomePage({required this.classroom}) {
user = FirebaseAuth.instance.currentUser; user = FirebaseAuth.instance.currentUser;
initializeStreams();
_searchTermController = StreamController<String>.broadcast();
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('className', isEqualTo: classroom)
.snapshots();
_searchTermController.stream.listen((searchTerm) {
_usersStream = searchStudents(searchTerm);
});
}
final TextStyle poppinsTextStyle = TextStyle(
fontFamily: 'Poppins',
);
@override
void dispose() {
_searchController.dispose();
_searchTermController.close();
} }
void initializeStreams() { void initializeStreams() {
_usersStream = FirebaseFirestore.instance _usersStream = FirebaseFirestore.instance
.collection('classroom') .collection('students')
.where('userId', isEqualTo: user?.uid) .where('user', isEqualTo: user?.uid)
.where('className', isEqualTo: classroom)
.snapshots(); .snapshots();
} }
@override
void initState() {}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
return WillPopScope( return WillPopScope(
onWillPop: () async { onWillPop: () async {
// Disable the back button press // Disable the back button press
...@@ -40,7 +68,7 @@ class ChildrenHomePage extends StatelessWidget { ...@@ -40,7 +68,7 @@ class ChildrenHomePage extends StatelessWidget {
), ),
actions: [ actions: [
Text( Text(
'Children', 'Children ',
style: TextStyle( style: TextStyle(
color: Color(0xFF554994), color: Color(0xFF554994),
fontSize: 24, fontSize: 24,
...@@ -69,7 +97,7 @@ class ChildrenHomePage extends StatelessWidget { ...@@ -69,7 +97,7 @@ class ChildrenHomePage extends StatelessWidget {
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.fromLTRB(20, 40, 20, 20), padding: EdgeInsets.fromLTRB(width * 0.1, 40, width * 0.1, 40),
child: Container( child: Container(
width: 293, width: 293,
height: 44, height: 44,
...@@ -88,6 +116,10 @@ class ChildrenHomePage extends StatelessWidget { ...@@ -88,6 +116,10 @@ class ChildrenHomePage extends StatelessWidget {
], ],
), ),
child: TextField( child: TextField(
controller: _searchController,
onChanged: (value) {
_searchTermController.add(value);
},
decoration: InputDecoration( decoration: InputDecoration(
hintText: 'Search', hintText: 'Search',
border: InputBorder.none, border: InputBorder.none,
...@@ -120,125 +152,70 @@ class ChildrenHomePage extends StatelessWidget { ...@@ -120,125 +152,70 @@ class ChildrenHomePage extends StatelessWidget {
itemCount: snapshot.data!.docs.length, itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
var document = snapshot.data!.docs[index]; var document = snapshot.data!.docs[index];
var name = document['className']; var name = document['Firstname'];
var className = document['className']; var className = document['className'];
var image = document['image'];
return Padding( return ListTile(
padding: const EdgeInsets.all(8.0), leading: CircleAvatar(
child: Container( radius: 27.0,
width: 358, backgroundImage: NetworkImage(image),
height: 77, ),
child: Row( title: Column(
mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, children: [
crossAxisAlignment: CrossAxisAlignment.center, Row(
children: [ children: [
Container( Text(
child: Row( '$name',
mainAxisSize: MainAxisSize.min, style: poppinsTextStyle.copyWith(
mainAxisAlignment: MainAxisAlignment.start, fontWeight: FontWeight.bold),
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Container(
width: 77,
height: 77,
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage(
"lib/assets/tsignup1.png"),
fit: BoxFit.fill,
),
shape: OvalBorder(),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 12.32,
offset: Offset(0, 3.08),
spreadRadius: 0,
)
],
),
),
const SizedBox(width: 15),
Container(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
name,
style: TextStyle(
color: Colors.black,
fontSize: 20,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
letterSpacing: -0.80,
),
),
const SizedBox(height: 10),
Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
'Class Room 01',
style: TextStyle(
color: Colors.black,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w300,
height: 0.08,
letterSpacing: -0.56,
),
),
),
],
),
),
],
), ),
), ],
const SizedBox(width: 70), ),
InkWell( Row(
onTap: () { children: [
Navigator.of(context).push( Text(
MaterialPageRoute( '$className',
builder: (_) => ChildrenProfilePage(), style: poppinsTextStyle.copyWith(
), fontSize: 12.0),
); )
}, ],
child: Container( ),
width: 75, ],
height: 36, ),
padding: const EdgeInsets.symmetric( trailing: Container(
horizontal: 20, vertical: 12), height: 35.0,
decoration: ShapeDecoration( width: 80.0,
color: Color(0xFFB983FF), decoration: BoxDecoration(
shape: RoundedRectangleBorder( color: Color.fromARGB(203, 164, 88, 177),
borderRadius: borderRadius: BorderRadius.circular(4.0),
BorderRadius.circular(4)), ),
), child: TextButton(
child: Text( onPressed: () {
'View', print(document);
style: TextStyle( // Handle view class button press
color: Colors.white, Navigator.of(context).push(
fontSize: 14, MaterialPageRoute(
fontFamily: 'Poppins', builder: (_) =>
fontWeight: FontWeight.w600, ChildrenProfilePage(document),
height: 1,
),
textAlign: TextAlign.center,
),
), ),
);
},
child: Text(
'View',
style: TextStyle(
color: Colors.white,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
), ),
], ),
), ),
), ),
); );
;
}, },
); );
}, },
...@@ -247,8 +224,15 @@ class ChildrenHomePage extends StatelessWidget { ...@@ -247,8 +224,15 @@ class ChildrenHomePage extends StatelessWidget {
], ],
), ),
), ),
), ),
); );
} }
Stream<QuerySnapshot> searchStudents(String searchTerm) {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('FirstName', isGreaterThanOrEqualTo: searchTerm)
.snapshots();
}
} }
import 'dart:io';
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:cross_file/src/types/interface.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'package:mobile_application_kids/classroomview.dart';
import 'package:mobile_application_kids/addclassroom.dart';
import 'package:video_player/video_player.dart';
import 'TeacherProfile.dart';
class ChildrenVideo extends StatelessWidget {
late User? user;
late String video;
late VideoPlayerController videoPlayerController;
late final Stream<QuerySnapshot> _usersStream;
ChildrenVideo({required this.video}) {
user = FirebaseAuth.instance.currentUser;
initializeStreams();
}
Future<void> initializeStreams() async {
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
videoPlayerController = VideoPlayerController.file(File(video));
await videoPlayerController.initialize();
await videoPlayerController
.setLooping(true); // Optional: Set looping to true
await videoPlayerController.play();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Video ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: Container(
height: 400,
child: AspectRatio(
aspectRatio: videoPlayerController.value.aspectRatio,
child: VideoPlayer(videoPlayerController),
),
),
), //)
SizedBox(height: 30),
Text(
'Select Kids ',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
SizedBox(height: 10),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (context, snapshot) {
print("--------------------------------------");
print(snapshot.data!.docs.length);
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
var itemCount = snapshot.data!.docs.length;
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
4, // Adjust this value to control the number of items per row
crossAxisSpacing:
8.0, // Adjust spacing between items horizontally
mainAxisSpacing:
8.0, // Adjust spacing between items vertically
),
itemCount: itemCount,
itemBuilder: (context, index) {
var document = snapshot.data!.docs[index];
var className = document['Firstname'];
var image = document['image'];
var isCheck = document['isCheck'];
return Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
child: InkWell(
onTap: () {
print(document);
if (isCheck == 1) {
updateStudentAge(document.id, 0);
} else {
// Handle view class button press
updateStudentAge(document.id, 1);
}
},
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 74.24,
height: 74.24,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
image: DecorationImage(
image: NetworkImage(
image,
),
fit: BoxFit.fill,
),
shape: OvalBorder(),
),
),
),
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
color: isCheck == 1
? Color.fromARGB(
72, 219, 219, 219)
: Color.fromARGB(
71, 218, 49, 11),
shape: OvalBorder(),
),
),
),
Positioned(
left: 7.42,
top: 51.97,
child: Container(
width: 59.40,
padding: const EdgeInsets.all(4.95),
decoration: ShapeDecoration(
color: isCheck == 1
? Color.fromARGB(
160, 28, 136, 224)
: Color.fromARGB(
71, 218, 49, 11),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(4.95),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
className,
style: TextStyle(
color: Colors.white,
fontSize: 12.37,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.08,
),
),
],
),
),
),
],
),
)
],
),
),
),
);
},
);
},
),
),
Center(
child: Container(
decoration: BoxDecoration(
border: Border.all(
color:
Colors.grey), // You can customize the color and width
borderRadius: BorderRadius.circular(
8), // You can customize the border radius
),
child: TextButton(
onPressed: () => {_showTimePicker(context)},
child: Text(
'Add Activity',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
),
))
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
switch (index) {
case 0:
// Navigate to Home
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherChatPage()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(
uid: user?.uid,
)),
);
break;
}
},
),
),
);
}
void updateStudentAge(String documentId, int check) async {
try {
await FirebaseFirestore.instance
.collection('students')
.doc(documentId)
.update({
'isCheck': check,
// Add more fields to update if needed
});
print('Document updated successfully!');
} catch (e) {
print('Error updating document: $e');
}
}
Future<void> _showTimePicker(BuildContext context) async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
if (pickedTime != null) {
_uploadImage(File(video), context).then((videoUrl) {
_saveActivity(videoUrl, context);
});
print('Selected Time: ${pickedTime.format(context)}');
}
}
Future<String> _uploadImage(File videoFile, context) async {
try {
Reference storageReference = FirebaseStorage.instance
.ref()
.child('activity_video/${DateTime.now().millisecondsSinceEpoch}');
UploadTask uploadTask = storageReference.putFile(videoFile);
await uploadTask.whenComplete(() => null);
String videoUrl = await storageReference.getDownloadURL();
return videoUrl;
} catch (e) {
AwesomeDialog(
context: context,
dialogType: DialogType.error,
animType: AnimType.rightSlide,
title: 'Error',
desc: 'An error occurred while uploading your image!',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
return '';
}
}
Future<void> _saveActivity(String videoUrl, context) async {
try {
await FirebaseFirestore.instance.collection('activities').add({
'videoUrl': videoUrl,
'timestamp': Timestamp.now(),
'user': user!.uid,
// Add more fields as needed
});
AwesomeDialog(
context: context,
dialogType: DialogType.success,
animType: AnimType.rightSlide,
title: 'Activity Saved',
desc: 'Your activity has been saved successfully!',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
} catch (e) {
print('Error saving activity: $e');
AwesomeDialog(
context: context,
dialogType: DialogType.error,
animType: AnimType.rightSlide,
title: 'Error',
desc: 'An error occurred while saving your activity!',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
}
}
}
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/parentHome.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'main.dart';
class ParentLoginPage extends StatefulWidget {
const ParentLoginPage({Key? key, required this.backgroundColor})
: super(key: key);
final Color backgroundColor;
@override
_ParentLoginPage createState() =>
_ParentLoginPage(backgroundColor: backgroundColor);
}
class _ParentLoginPage extends State<ParentLoginPage> {
_ParentLoginPage({Key? key, required this.backgroundColor});
final Color backgroundColor;
TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
leading: IconButton(
icon: const Icon(
Icons.arrow_back,
color: Color.fromARGB(255, 0, 0, 0),
),
onPressed: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => MyHomePage(
title: '',
backgroundColor: Color.fromARGB(255, 181, 181, 181),
),
),
);
},
),
),
body: Container(
color: backgroundColor,
child: SafeArea(
child: SingleChildScrollView(
child: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
const SizedBox(height: 20),
Padding(
padding: const EdgeInsets.all(10.0),
child: Image.asset(
'lib/assets/teachersignin.png',
width: 290,
height: 250,
),
),
const SizedBox(height: 10),
const Text(
'Welcome back',
style: TextStyle(
color: Colors.purple,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 20),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: TextFormField(
controller: emailController,
style: const TextStyle(color: Colors.black),
decoration: InputDecoration(
labelText: 'Email',
labelStyle: TextStyle(color: Colors.black),
fillColor: Colors.grey[200],
filled: true,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
borderSide: BorderSide.none,
),
suffixIcon: Icon(Icons.email, color: Colors.black),
),
validator: (value) {
RegExp regex = new RegExp(r'^.{6,}$');
if (value!.isEmpty) {
return "Password cannot be empty";
}
if (!regex.hasMatch(value)) {
return ("please enter valid password min. 6 character");
} else {
return null;
}
},
),
),
const SizedBox(height: 10),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: TextFormField(
controller: passwordController,
style: const TextStyle(color: Colors.black),
obscureText: true,
decoration: InputDecoration(
labelText: 'Password',
labelStyle: TextStyle(color: Colors.black),
fillColor: Colors.grey[200],
filled: true,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
borderSide: BorderSide.none,
),
suffixIcon: Icon(Icons.lock, color: Colors.black),
),
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
signIn(emailController.text, passwordController.text,
context);
},
onLongPress: () {},
child: Container(
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.green,
),
child: Center(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Text(
'Login',
style: TextStyle(color: Colors.black),
),
),
),
),
style: ElevatedButton.styleFrom(
primary: Colors.transparent,
elevation: 0,
),
),
],
),
),
),
),
),
),
);
}
void route(context) {
User? user = FirebaseAuth.instance.currentUser;
var kk = FirebaseFirestore.instance
.collection('users')
.doc(user!.uid)
.get()
.then((DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists) {
if (documentSnapshot.get('rool') == "parent") {
AwesomeDialog(
context: context,
dialogType: DialogType.success,
animType: AnimType.rightSlide,
title: 'Successfully login',
desc: ' Go to your home page',
btnOkOnPress: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) =>
ParentHomePage(documentSnapshot.get('phoneNo'), "p"),
),
);
},
)..show();
print("login teacher");
} else {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => TeacherHomePage(),
),
);
}
} else {
AwesomeDialog(
context: context,
dialogType: DialogType.warning,
animType: AnimType.rightSlide,
title: 'Faild login',
desc: 'No user found for that email',
btnOkOnPress: () {},
)..show();
print('Document does not exist on the database');
}
});
}
void signIn(String email, String password, context) async {
try {
UserCredential userCredential =
await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
route(context);
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
AwesomeDialog(
context: context,
dialogType: DialogType.warning,
animType: AnimType.rightSlide,
title: 'Faild login',
desc: ' No user found for that email',
btnOkOnPress: () {},
)..show();
print('No user found for that email.');
} else if (e.code == 'wrong-password') {
AwesomeDialog(
context: context,
dialogType: DialogType.warning,
animType: AnimType.rightSlide,
title: 'Faild login',
desc: ' Wrong password',
btnOkOnPress: () {},
)..show();
print('Wrong password provided for that user.');
} else {
AwesomeDialog(
context: context,
dialogType: DialogType.error,
animType: AnimType.rightSlide,
title: 'Error',
desc: e.message,
btnOkOnPress: () {},
)..show();
}
}
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'package:mobile_application_kids/classroomview.dart';
import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'ChatScreen.dart';
import 'TeacherProfile.dart';
import 'kidsReport.dart'; // Import the AddClassroomPage file
class ReportKidsPage extends StatelessWidget {
late User? user;
late final Stream<QuerySnapshot> _usersStream;
String classroom;
ReportKidsPage({required this.classroom}) {
user = FirebaseAuth.instance.currentUser;
initializeStreams();
}
void initializeStreams() {
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('className', isEqualTo: classroom)
.snapshots();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Report ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Bright Sparkle ',
style: TextStyle(
color: Color(0xFF11324D),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.04,
letterSpacing: -0.96,
),
),
SizedBox(height: 30),
Text(
'Select Kids ',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
SizedBox(height: 10),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (context, snapshot) {
print("--------------------------------------");
print(snapshot.data!.docs.length);
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
var itemCount = snapshot.data!.docs.length;
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
4, // Adjust this value to control the number of items per row
crossAxisSpacing:
8.0, // Adjust spacing between items horizontally
mainAxisSpacing:
8.0, // Adjust spacing between items vertically
),
itemCount: itemCount,
itemBuilder: (context, index) {
var document = snapshot.data!.docs[index];
var className = document['Firstname'];
return Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
child: InkWell(
onTap: () {
print(document);
// Handle view class button press
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
KidsReportPage(id: document.id),
),
);
},
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 74.24,
height: 74.24,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage(
"lib/assets/Ellipse 8.png"),
fit: BoxFit.fill,
),
shape: OvalBorder(),
),
),
),
Positioned(
left: 0,
top: 0,
child: Container(
width: 74.24,
height: 74.24,
decoration: ShapeDecoration(
color: Color(0x4CB8B4B4),
shape: OvalBorder(),
),
),
),
Positioned(
left: 7.42,
top: 51.97,
child: Container(
width: 59.40,
padding: const EdgeInsets.all(4.95),
decoration: ShapeDecoration(
color: Color(0xDD7D8088),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(4.95),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
className,
style: TextStyle(
color: Colors.white,
fontSize: 12.37,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.08,
),
),
],
),
),
),
],
),
)
],
),
),
),
);
},
);
},
),
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
switch (index) {
case 0:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(
uid: user?.uid,
)),
);
break;
}
},
),
),
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/login.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'ChatScreen.dart';
class TeacherProfilePage extends StatefulWidget {
final String? uid; // Make uid nullable
TeacherProfilePage({required this.uid, Key? key});
@override
_TeacherProfilePageState createState() => _TeacherProfilePageState(uid);
}
class _TeacherProfilePageState extends State<TeacherProfilePage> {
late User? user;
late final Stream<QuerySnapshot> _usersStream;
late String fullName = "";
late String email = "";
late String state = "";
late String capacity = "";
late String school = "";
late Map<String, dynamic> targetDoc;
final FirebaseAuth _auth = FirebaseAuth.instance;
late String uid;
_TeacherProfilePageState(uid) {
this.uid = uid;
}
@override
void initState() {
super.initState();
user = FirebaseAuth.instance.currentUser;
initializeStreams();
getUserData();
}
void initializeStreams() {
print("Document does not exist " + uid);
FirebaseFirestore.instance
.collection('users')
.doc(
uid) // Assuming you want to get a specific document based on the user's UID
.get()
.then((DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists) {
// Access the data of the document
targetDoc = documentSnapshot.data() as Map<String, dynamic>? ?? {};
print("doc" + targetDoc.toString());
// Check if the document ID matches a specific value
setState(() {
// Process the document data
fullName = targetDoc['fullName'];
email = targetDoc['email'];
state = targetDoc['state'];
capacity = targetDoc['enrolmentCapacity'];
school = targetDoc['school'];
});
print(
"Full Name: $fullName, Email: $email, State: $state, Capacity: $capacity, School: $school");
} else {
print("Document does not exist");
}
}).catchError((error) {
print("Error getting document: $error");
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Profile ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Bright Sparkle ',
style: TextStyle(
color: Color(0xFF11324D),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.04,
letterSpacing: -0.96,
),
),
Padding(
padding: const EdgeInsets.fromLTRB(8, 30, 0, 0),
child: SingleChildScrollView(
child: Column(
children: [
Container(
width: 363,
height: 77,
padding: const EdgeInsets.symmetric(horizontal: 2),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 77,
height: 77,
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage("lib/assets/Ellipse 8.png"),
fit: BoxFit.cover,
),
shape: OvalBorder(),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 12.32,
offset: Offset(0, 3.08),
spreadRadius: 0,
)
],
),
),
const SizedBox(width: 120),
SizedBox(
width: 148,
child: Text(
'Bright Spark',
style: TextStyle(
color: Color(0xFF473D7F),
fontSize: 23,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0,
),
),
),
],
),
),
SizedBox(
height: 40,
),
Align(
alignment: Alignment.centerLeft,
child: Container(
width: 139,
height: 42,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Text(
'Full Name',
style: TextStyle(
color: Color(0xFF797C7B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.07,
),
),
),
Positioned(
left: 4,
top: 24,
child: Text(
fullName,
style: TextStyle(
color: Color(0xFF000D07),
fontSize: 18,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.06,
),
),
),
],
),
),
),
SizedBox(height: 10),
Align(
alignment: Alignment.centerLeft,
child: Container(
width: 265,
height: 42,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Text(
'Email Address',
style: TextStyle(
color: Color(0xFF797C7B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.07,
),
),
),
Positioned(
left: 4,
top: 24,
child: Text(
email,
style: TextStyle(
color: Color(0xFF000D07),
fontSize: 18,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.06,
),
),
),
],
),
)),
SizedBox(height: 10),
Align(
alignment: Alignment.centerLeft,
child: Container(
width: 291,
height: 42,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Text(
'Address',
style: TextStyle(
color: Color(0xFF797C7B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.07,
),
),
),
Positioned(
left: 4,
top: 24,
child: Text(
state,
style: TextStyle(
color: Color(0xFF000D07),
fontSize: 18,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.06,
),
),
),
],
),
)),
SizedBox(height: 10),
Align(
alignment: Alignment.centerLeft,
child: Container(
width: 291,
height: 42,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Text(
'Capacity',
style: TextStyle(
color: Color(0xFF797C7B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.07,
),
),
),
Positioned(
left: 4,
top: 24,
child: Text(
capacity,
style: TextStyle(
color: Color(0xFF000D07),
fontSize: 18,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.06,
),
),
),
],
),
)),
SizedBox(height: 10),
Align(
alignment: Alignment.centerLeft,
child: Container(
width: 291,
height: 42,
child: Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Text(
'School',
style: TextStyle(
color: Color(0xFF797C7B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.07,
),
),
),
Positioned(
left: 4,
top: 24,
child: Text(
school,
style: TextStyle(
color: Color(0xFF000D07),
fontSize: 18,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0.06,
),
),
),
],
),
)),
SizedBox(
height: 20,
),
Align(
alignment: Alignment.centerLeft,
child: Container(
width: 80,
height: 24,
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
Icons.help,
color: const Color.fromARGB(255, 185, 184, 179),
size: 30.0,
),
const SizedBox(width: 10),
Text(
'Help',
style: TextStyle(
color: Colors.black,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0,
),
),
],
),
)),
SizedBox(
height: 20,
),
Align(
alignment: Alignment.centerLeft,
child: GestureDetector(
onTap: () => {},
child: Container(
width: 92,
height: 24,
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
Icons.info,
color:
const Color.fromARGB(255, 166, 165, 160),
size: 30.0,
),
const SizedBox(width: 10),
Text(
'About',
style: TextStyle(
color: Colors.black,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0,
),
),
],
),
),
)),
SizedBox(
height: 20,
),
Align(
alignment: Alignment.centerLeft,
child: GestureDetector(
onTap: () {
_signOut(context);
},
child: Container(
width: 110,
height: 24,
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
Icons.home,
color:
const Color.fromARGB(255, 212, 212, 207),
size: 30.0,
),
const SizedBox(width: 10),
Text(
'Sign Out',
style: TextStyle(
color: Colors.black,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w400,
height: 0,
),
),
],
),
),
)),
],
)),
)
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
// Handle bottom navigation item tap
if (index == 0) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
}
if (index == 1) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
}
if (index == 2) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(uid: user?.uid)),
);
}
},
),
),
);
}
Future<void> _signOut(context) async {
try {
await _auth.signOut();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
LoginPage(backgroundColor: Color.fromARGB(255, 255, 255, 255))),
);
} catch (e) {
print('Error signing out: $e');
}
}
// Define a function to fetch user data from Firestore
Future<void> getUserData() async {
FirebaseFirestore.instance
.collection('users')
.doc(user
?.uid) // Assuming you want to get a specific document based on the user's UID
.get()
.then((DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists) {
// Access the data of the document
targetDoc = documentSnapshot.data() as Map<String, dynamic>? ?? {};
// Check if the document ID matches a specific value
setState(() {
// Process the document data
fullName = targetDoc['fullName'];
String email = targetDoc['email'];
String state = targetDoc['state'];
String capacity = targetDoc['enrolmentCapacity'];
String school = targetDoc['school'];
});
print(
"Full Name: $fullName, Email: $email, State: $state, Capacity: $capacity, School: $school");
} else {
print("Document does not exist");
}
}).catchError((error) {
print("Error getting document: $error");
});
}
}
...@@ -5,7 +5,7 @@ class ActivitiesPage extends StatelessWidget { ...@@ -5,7 +5,7 @@ class ActivitiesPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text('Activities'), title: Text('Activities '),
), ),
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
...@@ -162,7 +162,8 @@ class CameraScreen extends StatelessWidget { ...@@ -162,7 +162,8 @@ class CameraScreen extends StatelessWidget {
// Implement your camera screen UI here // Implement your camera screen UI here
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text(cameraType == CameraType.photo ? 'Take Photo' : 'Record Video'), title: Text(
cameraType == CameraType.photo ? 'Take Photo' : 'Record Video'),
), ),
body: Center( body: Center(
child: Text('Camera Screen Placeholder'), child: Text('Camera Screen Placeholder'),
......
...@@ -2,7 +2,7 @@ import 'package:awesome_dialog/awesome_dialog.dart'; ...@@ -2,7 +2,7 @@ import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/teacherhome.dart'; import 'package:mobile_application_kids/teacherhome.dart';
class AddClassroomPage extends StatefulWidget { class AddClassroomPage extends StatefulWidget {
@override @override
...@@ -17,59 +17,77 @@ class _AddClassroomPageState extends State<AddClassroomPage> { ...@@ -17,59 +17,77 @@ class _AddClassroomPageState extends State<AddClassroomPage> {
final TextEditingController roomCapacityController = TextEditingController(); final TextEditingController roomCapacityController = TextEditingController();
final TextEditingController ratioController = TextEditingController(); final TextEditingController ratioController = TextEditingController();
final TextStyle poppinsTextStyle = TextStyle(
fontFamily: 'Poppins',
);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text('Add Classroom'), title: Text('Add Classroom '),
), ),
body: Center( body: SingleChildScrollView(
child: Padding( child: Center(
padding: const EdgeInsets.all(16.0), child: Padding(
child: Column( padding: const EdgeInsets.all(16.0),
crossAxisAlignment: CrossAxisAlignment.center, child: Column(
mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ mainAxisAlignment: MainAxisAlignment.center,
Image.asset( children: [
'lib/assets/addclassroom.png', Image.asset(
height: 260, 'lib/assets/addclassroom.png',
width: 340, height: 260,
fit: BoxFit.contain, width: 340,
), fit: BoxFit.contain,
SizedBox(height: 20),
TextField(
controller: classNameController,
decoration: InputDecoration(
labelText: 'Classroom Name',
suffixIcon: Icon(Icons.school), // Classroom icon
), ),
), SizedBox(height: 20),
SizedBox(height: 10), TextFormField(
TextField( controller: classNameController,
controller: roomCapacityController, decoration: InputDecoration(
decoration: InputDecoration( labelText: 'Classroom Name',
labelText: 'Room Capacity', prefixIcon: Icon(Icons.school), // Classroom icon
suffixIcon: Icon(Icons.people), // People icon ),
), ),
keyboardType: TextInputType.number, SizedBox(height: 10),
), TextFormField(
SizedBox(height: 10), controller: roomCapacityController,
TextField( decoration: InputDecoration(
controller: ratioController, labelText: 'Room Capacity',
decoration: InputDecoration( prefixIcon: Icon(Icons.people), // People icon
labelText: 'Student to Staff Ratio', ),
suffixIcon: Icon(Icons.numbers), // Your ratio icon keyboardType: TextInputType.number,
), ),
keyboardType: TextInputType.number, SizedBox(height: 10),
), TextFormField(
SizedBox(height: 20), controller: ratioController,
ElevatedButton( decoration: InputDecoration(
onPressed: () { labelText: 'Student to Staff Ratio',
postDetailsToFirestore(context); prefixIcon: Icon(Icons.numbers), // Your ratio icon
}, ),
child: Text('Create Classroom'), keyboardType: TextInputType.number,
), ),
], SizedBox(height: 20),
Container(
height: 50.0,
width: 150.0,
decoration: BoxDecoration(
color: Color.fromARGB(203, 164, 88, 177),
borderRadius: BorderRadius.circular(4.0),
),
child: TextButton(
onPressed: () {
postDetailsToFirestore(context);
},
child: Text(
'Create Classroom',
style: poppinsTextStyle.copyWith(
color: Colors.white,
),
),
),
),
],
),
), ),
), ),
), ),
......
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'dart:io'; import 'dart:io';
class AddStudentPage extends StatefulWidget {
class AddStudent extends StatefulWidget { const AddStudentPage({required this.classname});
const AddStudent({Key? key}); final String classname;
@override @override
State<AddStudent> createState() => _AddStudentState(); State<AddStudentPage> createState() => _AddStudentState(classname);
} }
class _AddStudentState extends State<AddStudent> { class _AddStudentState extends State<AddStudentPage> {
final _formkey = GlobalKey<FormState>();
final _auth = FirebaseAuth.instance;
//Bio Part //Bio Part
TextEditingController _firstnameController = TextEditingController(); TextEditingController _firstnameController = TextEditingController();
TextEditingController _lastnameController = TextEditingController(); TextEditingController _lastnameController = TextEditingController();
...@@ -40,12 +46,11 @@ class _AddStudentState extends State<AddStudent> { ...@@ -40,12 +46,11 @@ class _AddStudentState extends State<AddStudent> {
TextEditingController _stateController = TextEditingController(); TextEditingController _stateController = TextEditingController();
//imagepicker //imagepicker
ImagePicker _imagePicker = ImagePicker(); ImagePicker _imagePicker = ImagePicker();
XFile? _selectedImage; XFile? _selectedImage;
String classname;
_AddStudentState(String classname) : this.classname = classname;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -54,6 +59,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -54,6 +59,7 @@ class _AddStudentState extends State<AddStudent> {
leading: IconButton( leading: IconButton(
icon: Icon(Icons.arrow_back), icon: Icon(Icons.arrow_back),
onPressed: () { onPressed: () {
// Handle back button press if needed
Navigator.pop(context); Navigator.pop(context);
}, },
), ),
...@@ -61,7 +67,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -61,7 +67,7 @@ class _AddStudentState extends State<AddStudent> {
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( child: Text(
'Add Kid', 'Add Kid ',
style: TextStyle( style: TextStyle(
fontSize: 20.0, fontSize: 20.0,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
...@@ -78,29 +84,25 @@ class _AddStudentState extends State<AddStudent> { ...@@ -78,29 +84,25 @@ class _AddStudentState extends State<AddStudent> {
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
child: Column( child: Column(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment.center, // Center the content vertically
children: [ children: [
GestureDetector(
onTap: () async {
GestureDetector( XFile? image = await _imagePicker.pickImage(
onTap: () async { source: ImageSource.gallery,
XFile? image = await _imagePicker.pickImage( imageQuality: 50,
source: ImageSource.gallery, );
imageQuality: 50, setState(() {
); _selectedImage = image;
setState(() { });
_selectedImage = image; },
}); child: CircleAvatar(
}, radius: 50.0,
child: CircleAvatar( backgroundImage: _selectedImage != null
radius: 50.0, ? Image.file(File(_selectedImage!.path)).image
backgroundImage: _selectedImage != null : AssetImage('lib/assets/classlogo.png'),
? Image.file(File(_selectedImage!.path)).image ),
: AssetImage('assets/profile_image.jpg'),
), ),
),
//Bio Part //Bio Part
SizedBox(height: 20), SizedBox(height: 20),
...@@ -117,6 +119,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -117,6 +119,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
), ),
// Add your other widgets here
], ],
), ),
SizedBox(height: 20), SizedBox(height: 20),
...@@ -186,7 +189,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -186,7 +189,7 @@ class _AddStudentState extends State<AddStudent> {
child: TextField( child: TextField(
controller: _sexController, controller: _sexController,
decoration: InputDecoration( decoration: InputDecoration(
hintText: 'Sex', hintText: 'Male/Female',
filled: true, filled: true,
fillColor: Color.fromARGB(107, 196, 196, 196), fillColor: Color.fromARGB(107, 196, 196, 196),
border: OutlineInputBorder( border: OutlineInputBorder(
...@@ -206,7 +209,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -206,7 +209,7 @@ class _AddStudentState extends State<AddStudent> {
Row( Row(
children: [ children: [
Container( Container(
child: Text( child: Text(
' Medicine', ' Medicine',
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
...@@ -293,7 +296,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -293,7 +296,7 @@ class _AddStudentState extends State<AddStudent> {
fillColor: Color.fromARGB(107, 196, 196, 196), fillColor: Color.fromARGB(107, 196, 196, 196),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0), borderRadius: BorderRadius.circular(10.0),
borderSide: BorderSide.none, borderSide: BorderSide.none, // Remove border color
), ),
suffixIcon: Icon(Icons.medication_outlined, suffixIcon: Icon(Icons.medication_outlined,
size: 23.0, color: Color.fromARGB(132, 12, 12, 12)), size: 23.0, color: Color.fromARGB(132, 12, 12, 12)),
...@@ -350,16 +353,13 @@ class _AddStudentState extends State<AddStudent> { ...@@ -350,16 +353,13 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
//Contact Part //Contact Part
SizedBox(height: 50), SizedBox(height: 50),
Row( Row(
children: [ children: [
Container( Container(
child: Text( child: Text(
' Contact', ' Contact',
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
...@@ -372,7 +372,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -372,7 +372,7 @@ class _AddStudentState extends State<AddStudent> {
], ],
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -393,7 +393,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -393,7 +393,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -414,8 +414,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -414,8 +414,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20),
SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -436,15 +435,13 @@ class _AddStudentState extends State<AddStudent> { ...@@ -436,15 +435,13 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
//Adress Part
//Adress Part
SizedBox(height: 50), SizedBox(height: 50),
Row( Row(
children: [ children: [
Container( Container(
child: Text( child: Text(
' Adress', ' Adress',
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
...@@ -454,11 +451,10 @@ class _AddStudentState extends State<AddStudent> { ...@@ -454,11 +451,10 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
), ),
// Add your other widgets here
], ],
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -479,7 +475,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -479,7 +475,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -500,7 +496,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -500,7 +496,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -521,7 +517,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -521,7 +517,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -542,7 +538,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -542,7 +538,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -563,7 +559,7 @@ class _AddStudentState extends State<AddStudent> { ...@@ -563,7 +559,7 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
Container( Container(
height: 55.0, height: 55.0,
child: TextField( child: TextField(
...@@ -584,63 +580,122 @@ class _AddStudentState extends State<AddStudent> { ...@@ -584,63 +580,122 @@ class _AddStudentState extends State<AddStudent> {
), ),
), ),
SizedBox(height: 30), SizedBox(height: 30),
ElevatedButton( Row(
onPressed: () { crossAxisAlignment: CrossAxisAlignment.center,
// Handle signup logic here mainAxisAlignment: MainAxisAlignment.center,
String firstname = _firstnameController.text; children: [
String lastname = _lastnameController.text; TextButton(
String birthday = _birthdayController.text; onPressed: () async {
String sex = _sexController.text; if (Image == null) {
AwesomeDialog(
//Medicine Part context: context,
String doctorname = _doctornameController.text; dialogType: DialogType.error,
String doctorphone = _doctorphoneController.text; animType: AnimType.rightSlide,
String allergies = _allergiesController.text; title: 'Please Select Image',
String medicine = _medicineController.text; btnOkOnPress: () {
Navigator.pop(context);
//Contact Part },
String parentname = _parentnameController.text; )..show();
String parentphone = _parentphoneController.text; } else {
String parentemail = _parentemailController.text; // Handle signup logic here
String firstname = _firstnameController.text;
//Adress Part String lastname = _lastnameController.text;
String adressline1 = _adressline1Controller.text; String birthday = _birthdayController.text;
String adressline2 = _adressline2Controller.text; String sex = _sexController.text;
String city = _cityController.text;
String zip = _zipController.text; //Medicine Part
String country = _countryController.text; String doctorname = _doctornameController.text;
String state = _stateController.text; String doctorphone = _doctorphoneController.text;
String allergies = _allergiesController.text;
print( String medicine = _medicineController.text;
'Firstname: $firstname,Lastname: $lastname ,Sex: $sex, Birthday: $birthday, Doctorname: $doctorname, Doctorphone: $doctorphone, Allergies: $allergies, Medicine: $medicine, Parentname: $parentname, Parentphone: $parentphone, Parentemail: $parentemail, Adressline1: $adressline1, Adressline2: $adressline2, City: $city, Zip: $zip, Country: $country, State: $state');
}, //Contact Part
style: ElevatedButton.styleFrom( String parentname = _parentnameController.text;
primary: Colors.blue, String parentphone = _parentphoneController.text;
onPrimary: Colors.white, String parentemail = _parentemailController.text;
),
child: Row( //Adress Part
children: [ String adressline1 = _adressline1Controller.text;
Column( String adressline2 = _adressline2Controller.text;
children: [ String city = _cityController.text;
Text('Add'), String zip = _zipController.text;
], String country = _countryController.text;
String state = _stateController.text;
var imageName = DateTime.now()
.millisecondsSinceEpoch
.toString();
var storageRef = FirebaseStorage.instance
.ref()
.child('student_images/$imageName.jpg');
var uploadTask;
var downloadUrl = "";
if (_selectedImage != null) {
uploadTask = storageRef
.putFile(File(_selectedImage!.path));
downloadUrl =
await (await uploadTask).ref.getDownloadURL();
}
// You can perform signup/authentication logic here
postDetailsToFirestore(
downloadUrl,
firstname,
lastname,
sex,
birthday,
doctorname,
doctorphone,
allergies,
medicine,
parentname,
parentphone,
parentemail,
adressline1,
adressline2,
city,
zip,
country,
state,
classname,
context);
}
},
style:
TextButton.styleFrom(backgroundColor: Colors.green),
child: Text(
'Save',
style: TextStyle(
color: Colors.white,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
),
), ),
Column( ),
children: [ TextButton(
Text('Kid'), onPressed: () {
], // Handle signup logic here
Navigator.pop(context);
},
style: TextButton.styleFrom(
backgroundColor: Colors.grey.shade200),
child: Text(
'Cancel',
style: TextStyle(
color: Colors.black,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
),
), ),
], )
), ],
), ),
], ],
), ),
), ),
...@@ -649,4 +704,65 @@ class _AddStudentState extends State<AddStudent> { ...@@ -649,4 +704,65 @@ class _AddStudentState extends State<AddStudent> {
), ),
); );
} }
postDetailsToFirestore(
String image,
String firstname,
String lastname,
String sex,
String birthday,
String doctorname,
String doctorphone,
String allergies,
String medicine,
String parentname,
String parentphone,
String parentemail,
String adressline1,
String adressline2,
String city,
String zip,
String country,
String state,
String classname,
context) async {
FirebaseFirestore firebaseFirestore = FirebaseFirestore.instance;
var user = _auth.currentUser;
CollectionReference ref = FirebaseFirestore.instance.collection('students');
ref.doc().set({
"Firstname": firstname,
"Lastname": lastname,
"Sex": sex,
"Birthday": birthday,
"Doctorname": doctorname,
"Doctorphone": doctorphone,
"Allergies": allergies,
"Medicine": medicine,
"Parentname": parentname,
"Parentphone": parentphone,
"Parentemail": parentemail,
"Adressline1": adressline1,
"Adressline2": adressline2,
"City": city,
"Zip": zip,
"Country": country,
"State": state,
"user": user!.uid,
"image": image,
"className": classname,
"isCheck": 0,
"role": 'Student'
});
AwesomeDialog(
context: context,
dialogType: DialogType.success,
animType: AnimType.rightSlide,
title: 'Successfully Created',
btnOkOnPress: () {
Navigator.pop(context);
},
)..show();
}
} }
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/teacherchat.dart'; import 'package:mobile_application_kids/teacherchat.dart';
import 'package:jema_app/classroomview.dart'; import 'package:mobile_application_kids/classroomview.dart';
import 'package:jema_app/addclassroom.dart'; // Import the AddClassroomPage file import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'package:url_launcher/url_launcher.dart';
import 'ActivitiesView.dart';
import 'ChatScreen.dart';
import 'TeacherProfile.dart';
import 'kidsReportView.dart';
class ChildrenProfilePage extends StatelessWidget { class ChildrenProfilePage extends StatelessWidget {
late User? user; late User? user;
late final Stream<QuerySnapshot> _usersStream; late final Stream<QuerySnapshot> _usersStream, _usersStream2;
ChildrenProfilePage() { int _age = 0;
late final userDetails;
ChildrenProfilePage(document) {
this.userDetails = document;
user = FirebaseAuth.instance.currentUser; user = FirebaseAuth.instance.currentUser;
initializeStreams(); initializeStreams();
calculateAge(userDetails['Birthday']);
} }
void initializeStreams() { void initializeStreams() {
...@@ -18,6 +29,11 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -18,6 +29,11 @@ class ChildrenProfilePage extends StatelessWidget {
.collection('classroom') .collection('classroom')
.where('userId', isEqualTo: user?.uid) .where('userId', isEqualTo: user?.uid)
.snapshots(); .snapshots();
_usersStream2 = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
} }
@override @override
...@@ -37,7 +53,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -37,7 +53,7 @@ class ChildrenProfilePage extends StatelessWidget {
), ),
actions: [ actions: [
Text( Text(
'Children', 'Children ',
style: TextStyle( style: TextStyle(
color: Color(0xFF554994), color: Color(0xFF554994),
fontSize: 24, fontSize: 24,
...@@ -49,7 +65,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -49,7 +65,7 @@ class ChildrenProfilePage extends StatelessWidget {
) )
], ],
), ),
body: Padding( body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
...@@ -136,7 +152,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -136,7 +152,7 @@ class ChildrenProfilePage extends StatelessWidget {
CrossAxisAlignment.start, CrossAxisAlignment.start,
children: [ children: [
Text( Text(
'David Smith', userDetails['Firstname'],
style: TextStyle( style: TextStyle(
color: Color(0xFF11324D), color: Color(0xFF11324D),
fontSize: 20, fontSize: 20,
...@@ -163,7 +179,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -163,7 +179,7 @@ class ChildrenProfilePage extends StatelessWidget {
), ),
const SizedBox(height: 11), const SizedBox(height: 11),
Text( Text(
'Student', userDetails['role'],
style: TextStyle( style: TextStyle(
color: Color(0xFF21205B), color: Color(0xFF21205B),
fontSize: 14, fontSize: 14,
...@@ -206,7 +222,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -206,7 +222,7 @@ class ChildrenProfilePage extends StatelessWidget {
), ),
), ),
TextSpan( TextSpan(
text: '05', text: _age.toString(),
style: TextStyle( style: TextStyle(
color: Color(0xFF21205B), color: Color(0xFF21205B),
fontSize: 14, fontSize: 14,
...@@ -240,7 +256,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -240,7 +256,7 @@ class ChildrenProfilePage extends StatelessWidget {
), ),
), ),
TextSpan( TextSpan(
text: '12. 02. 2019', text: userDetails['Birthday'],
style: TextStyle( style: TextStyle(
color: Color(0xFF21205B), color: Color(0xFF21205B),
fontSize: 14, fontSize: 14,
...@@ -256,7 +272,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -256,7 +272,7 @@ class ChildrenProfilePage extends StatelessWidget {
TextSpan( TextSpan(
children: [ children: [
TextSpan( TextSpan(
text: 'Gender', text: 'Sex',
style: TextStyle( style: TextStyle(
color: Color(0xFF21205B), color: Color(0xFF21205B),
fontSize: 14, fontSize: 14,
...@@ -274,7 +290,7 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -274,7 +290,7 @@ class ChildrenProfilePage extends StatelessWidget {
), ),
), ),
TextSpan( TextSpan(
text: 'Male', text: userDetails['Sex'],
style: TextStyle( style: TextStyle(
color: Color(0xFF21205B), color: Color(0xFF21205B),
fontSize: 14, fontSize: 14,
...@@ -330,37 +346,50 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -330,37 +346,50 @@ class ChildrenProfilePage extends StatelessWidget {
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.center, CrossAxisAlignment.center,
children: [ children: [
Container( GestureDetector(
height: double.infinity, onTap: () {
child: Row( Navigator.push(
mainAxisSize: context,
MainAxisSize.min, MaterialPageRoute(
mainAxisAlignment: builder: (context) =>
MainAxisAlignment ChatScreen()),
.start, );
crossAxisAlignment: },
CrossAxisAlignment child: Container(
.center, height: double.infinity,
children: [ child: Row(
Icon( mainAxisSize:
Icons.chat, MainAxisSize.min,
color: Colors.black26, mainAxisAlignment:
), MainAxisAlignment
Text( .start,
'Chat', crossAxisAlignment:
style: TextStyle( CrossAxisAlignment
color: Colors.black, .center,
fontSize: 12, children: [
fontFamily: Icon(
'Poppins', Icons.chat,
fontWeight: color:
FontWeight.w400, Colors.black26,
height: 0.08,
), ),
), Text(
const SizedBox( 'Chat',
width: 10), style: TextStyle(
], color:
Colors.black,
fontSize: 12,
fontFamily:
'Poppins',
fontWeight:
FontWeight
.w400,
height: 0.08,
),
),
const SizedBox(
width: 10),
],
),
), ),
), ),
], ],
...@@ -395,97 +424,119 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -395,97 +424,119 @@ class ChildrenProfilePage extends StatelessWidget {
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.center, CrossAxisAlignment.center,
children: [ children: [
Container( GestureDetector(
height: double.infinity, onTap: () {
child: Row( _getPhoneNumber(user?.uid);
mainAxisSize: },
MainAxisSize.min, child: Container(
mainAxisAlignment: height: double.infinity,
MainAxisAlignment.start, child: Row(
crossAxisAlignment: mainAxisSize:
CrossAxisAlignment MainAxisSize.min,
.center, mainAxisAlignment:
children: [ MainAxisAlignment
Icon( .start,
Icons.call, crossAxisAlignment:
color: Colors.black26, CrossAxisAlignment
), .center,
Text( children: [
'Call', Icon(
style: TextStyle( Icons.call,
color: Colors.black, color: Colors.black26,
fontSize: 12,
fontFamily: 'Poppins',
fontWeight:
FontWeight.w400,
height: 0.08,
), ),
), Text(
const SizedBox(width: 10), 'Call',
], style: TextStyle(
color: Colors.black,
fontSize: 12,
fontFamily:
'Poppins',
fontWeight:
FontWeight.w400,
height: 0.08,
),
),
const SizedBox(
width: 10),
],
),
), ),
), ),
], ],
), ),
), ),
const SizedBox(width: 16), const SizedBox(width: 16),
Container( GestureDetector(
padding: const EdgeInsets.only( onTap: () {
top: 11, Navigator.push(
bottom: 12, context,
), MaterialPageRoute(
decoration: ShapeDecoration( builder: (context) =>
color: Colors.white, UserActivitiesScreen(
shape: RoundedRectangleBorder( userId: user!.uid)),
borderRadius: );
BorderRadius.circular(6)), },
shadows: [ child: Container(
BoxShadow( padding: const EdgeInsets.only(
color: Color(0x3F000000), top: 11,
blurRadius: 4, bottom: 12,
offset: Offset(0, 1), ),
spreadRadius: 0, decoration: ShapeDecoration(
) color: Colors.white,
], shape: RoundedRectangleBorder(
), borderRadius:
child: Row( BorderRadius.circular(
mainAxisSize: MainAxisSize.min, 6)),
mainAxisAlignment: shadows: [
MainAxisAlignment.center, BoxShadow(
crossAxisAlignment: color: Color(0x3F000000),
CrossAxisAlignment.center, blurRadius: 4,
children: [ offset: Offset(0, 1),
Container( spreadRadius: 0,
height: double.infinity, )
child: Row( ],
mainAxisSize: ),
MainAxisSize.min, child: Row(
mainAxisAlignment: mainAxisSize: MainAxisSize.min,
MainAxisAlignment mainAxisAlignment:
.center, MainAxisAlignment.center,
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment CrossAxisAlignment.center,
.center, children: [
children: [ Container(
Icon( height: double.infinity,
Icons.book, child: Row(
color: Colors.black26, mainAxisSize:
), MainAxisSize.min,
Text( mainAxisAlignment:
'Activites', MainAxisAlignment
style: TextStyle( .center,
color: Colors.black, crossAxisAlignment:
fontSize: 12, CrossAxisAlignment
fontFamily: 'Poppins', .center,
fontWeight: children: [
FontWeight.w400, Icon(
Icons.book,
color: Colors.black26,
), ),
), Text(
const SizedBox(width: 10), 'Activites',
], style: TextStyle(
color: Colors.black,
fontSize: 12,
fontFamily:
'Poppins',
fontWeight:
FontWeight.w400,
),
),
const SizedBox(
width: 10),
],
),
), ),
), ],
], ),
), ),
), ),
], ],
...@@ -501,131 +552,122 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -501,131 +552,122 @@ class ChildrenProfilePage extends StatelessWidget {
Padding( Padding(
padding: const EdgeInsets.fromLTRB(8, 30, 0, 0), padding: const EdgeInsets.fromLTRB(8, 30, 0, 0),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Container( child: Column(
width: 358, mainAxisSize: MainAxisSize.min,
height: 171, mainAxisAlignment: MainAxisAlignment.start,
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, children: [
mainAxisAlignment: MainAxisAlignment.start, Container(
crossAxisAlignment: CrossAxisAlignment.start, width: 359,
children: [ height: 178,
Text( child: Column(
'Report', mainAxisSize: MainAxisSize.min,
style: TextStyle( mainAxisAlignment: MainAxisAlignment.start,
color: Color(0xFF21205B), crossAxisAlignment: CrossAxisAlignment.center,
fontSize: 16, children: [
fontFamily: 'Poppins', Container(
fontWeight: FontWeight.w500, width: 359,
height: 0.06, height: 128,
), clipBehavior: Clip.antiAlias,
), decoration: ShapeDecoration(
const SizedBox(height: 20), image: DecorationImage(
SingleChildScrollView( image: AssetImage("lib/assets/banner.png"),
child: Row( fit: BoxFit.cover,
mainAxisSize: MainAxisSize.min, ),
mainAxisAlignment: MainAxisAlignment.start, shape: RoundedRectangleBorder(
crossAxisAlignment: CrossAxisAlignment.start, borderRadius: BorderRadius.circular(10),
children: [ ),
const SizedBox(width: 18), shadows: [
Container( BoxShadow(
width: 150, color: Color(0x19000000),
height: 135, blurRadius: 20,
child: Stack( offset: Offset(0, 2),
children: [ spreadRadius: 0,
Positioned( )
left: 0, ],
top: 0, ),
child: Container( ),
width: 170, const SizedBox(height: 14),
height: 135, Container(
decoration: ShapeDecoration( child: Row(
color: Color(0xFFF1EFFF), mainAxisSize: MainAxisSize.min,
shape: RoundedRectangleBorder( mainAxisAlignment: MainAxisAlignment.start,
borderRadius: crossAxisAlignment: CrossAxisAlignment.start,
BorderRadius.circular(8.44), children: [
), Container(
), padding: const EdgeInsets.symmetric(
), horizontal: 40, vertical: 12),
decoration: ShapeDecoration(
color: Color(0xFF48B62C),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(4)),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 4,
offset: Offset(0, 1),
spreadRadius: 0,
)
],
), ),
Positioned( child: Row(
left: 16, mainAxisSize: MainAxisSize.min,
top: 17, mainAxisAlignment:
child: Container( MainAxisAlignment.center,
width: 119.18, crossAxisAlignment:
height: 100.88, CrossAxisAlignment.center,
child: Column( children: [
mainAxisSize: MainAxisSize.min, Text(
mainAxisAlignment: 'Play Here ',
MainAxisAlignment.start, style: TextStyle(
crossAxisAlignment: color: Colors.white,
CrossAxisAlignment.start, fontSize: 14,
children: [ fontFamily: 'Poppins',
Padding( fontWeight: FontWeight.w600,
padding: height: 0.06,
const EdgeInsets.fromLTRB( ),
0, 0, 0, 10),
child: Container(
width: 16.88,
height: 16.88,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(),
child: Stack(children: [
Icon(
Icons.book,
color: Colors.black26,
),
]),
),
),
const SizedBox(height: 1),
SizedBox(
width: 119.18,
child: Text.rich(
TextSpan(
children: [
TextSpan(
text: 'Monthly \n ',
style: TextStyle(
color:
Color(0xFF403572),
fontSize: 14,
fontFamily: 'Roboto',
fontWeight:
FontWeight.w500,
height: 0.09,
),
),
],
),
),
),
const SizedBox(height: 12),
SizedBox(
width: 119.18,
child: Opacity(
opacity: 0.70,
child: Text(
'Some short description of this type of report.',
style: TextStyle(
color: Color(0xFF8DAEAE),
fontSize: 10.55,
fontFamily: 'Roboto',
fontWeight: FontWeight.w400,
height: 0,
),
),
),
),
],
), ),
), ],
), ),
], ),
), ],
), ),
const SizedBox(width: 18), ),
Container( ],
width: 150, ),
),
SizedBox(
height: 10,
),
Text(
'Report',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
const SizedBox(height: 20),
SingleChildScrollView(
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ReportKidsViewPage(
sid: userDetails.id)),
);
},
child: Container(
width: MediaQuery.of(context).size.width * 0.4,
height: 135, height: 135,
child: Stack( child: Stack(
children: [ children: [
...@@ -633,10 +675,11 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -633,10 +675,11 @@ class ChildrenProfilePage extends StatelessWidget {
left: 0, left: 0,
top: 0, top: 0,
child: Container( child: Container(
width: 170, width:
MediaQuery.of(context).size.width,
height: 135, height: 135,
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: Color(0xFFC4F3F3), color: Color(0xFFF1EFFF),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: borderRadius:
BorderRadius.circular(8.44), BorderRadius.circular(8.44),
...@@ -681,10 +724,10 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -681,10 +724,10 @@ class ChildrenProfilePage extends StatelessWidget {
TextSpan( TextSpan(
children: [ children: [
TextSpan( TextSpan(
text: 'Monthly \n', text: 'Monthly \n ',
style: TextStyle( style: TextStyle(
color: color:
Color(0xFF479696), Color(0xFF403572),
fontSize: 14, fontSize: 14,
fontFamily: 'Roboto', fontFamily: 'Roboto',
fontWeight: fontWeight:
...@@ -720,11 +763,119 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -720,11 +763,119 @@ class ChildrenProfilePage extends StatelessWidget {
], ],
), ),
), ),
], ),
),
// GestureDetector(
// onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) =>
// ReportKidsViewPage(
// sid: userDetails.id)));
// },
// child: Container(
// width: 150,
// height: 135,
// child: Stack(
// children: [
// Positioned(
// left: 0,
// top: 0,
// child: Container(
// width: 170,
// height: 135,
// decoration: ShapeDecoration(
// color: Color(0xFFC4F3F3),
// shape: RoundedRectangleBorder(
// borderRadius:
// BorderRadius.circular(8.44),
// ),
// ),
// ),
// ),
// Positioned(
// left: 16,
// top: 17,
// child: Container(
// width: 119.18,
// height: 100.88,
// child: Column(
// mainAxisSize: MainAxisSize.min,
// mainAxisAlignment:
// MainAxisAlignment.start,
// crossAxisAlignment:
// CrossAxisAlignment.start,
// children: [
// Padding(
// padding:
// const EdgeInsets.fromLTRB(
// 0, 0, 0, 10),
// child: Container(
// width: 16.88,
// height: 16.88,
// clipBehavior: Clip.antiAlias,
// decoration: BoxDecoration(),
// child: Stack(children: [
// Icon(
// Icons.book,
// color: Colors.black26,
// ),
// ]),
// ),
// ),
// const SizedBox(height: 1),
// SizedBox(
// width: 119.18,
// child: Text.rich(
// TextSpan(
// children: [
// TextSpan(
// text: 'Monthly \n',
// style: TextStyle(
// color:
// Color(0xFF479696),
// fontSize: 14,
// fontFamily: 'Roboto',
// fontWeight:
// FontWeight.w500,
// height: 0.09,
// ),
// ),
// ],
// ),
// ),
// ),
// const SizedBox(height: 12),
// SizedBox(
// width: 119.18,
// child: Opacity(
// opacity: 0.70,
// child: Text(
// 'Some short description of this type of report.',
// style: TextStyle(
// color: Color(0xFF8DAEAE),
// fontSize: 10.55,
// fontFamily: 'Roboto',
// fontWeight:
// FontWeight.w400,
// height: 0,
// ),
// ),
// ),
// ),
// ],
// ),
// ),
// ),
// ],
// ),
// ),
// ),
],
), ),
], ),
), ],
), ),
), ),
) )
...@@ -749,10 +900,23 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -749,10 +900,23 @@ class ChildrenProfilePage extends StatelessWidget {
selectedItemColor: Colors.blue, selectedItemColor: Colors.blue,
onTap: (index) { onTap: (index) {
// Handle bottom navigation item tap // Handle bottom navigation item tap
if (index == 0) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
}
if (index == 1) { if (index == 1) {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => TeacherChatPage()), MaterialPageRoute(builder: (context) => ChatScreen()),
);
}
if (index == 2) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(uid: user?.uid)),
); );
} }
}, },
...@@ -760,4 +924,51 @@ class ChildrenProfilePage extends StatelessWidget { ...@@ -760,4 +924,51 @@ class ChildrenProfilePage extends StatelessWidget {
), ),
); );
} }
_launchPhone(url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Future<String?> _getPhoneNumber(userUID) async {
try {
var snapshot = await FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: userUID)
.get();
if (snapshot.docs.isNotEmpty) {
// Assuming 'phone' is the field containing the phone number
String mobile = snapshot.docs.first['Parentphone'];
final url = 'tel:$mobile';
_launchPhone(url);
} else {
return null; // Document not found
}
} catch (e) {
print("Error getting phone number: $e");
return null;
}
}
void calculateAge(birthday) {
String birthdayText = birthday.trim();
if (birthdayText.isNotEmpty) {
try {
DateTime birthday = DateTime.parse(birthdayText);
DateTime now = DateTime.now();
Duration difference = now.difference(birthday);
_age = (difference.inDays / 365).floor();
} catch (e) {
print('Invalid date format: $e');
// Handle invalid date format
}
} else {
// Handle empty input
}
}
} }
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/Attendance.dart'; import 'package:mobile_application_kids/Attendance.dart';
import 'package:mobile_application_kids/ChildrenActivity.dart';
import 'package:mobile_application_kids/ReportKids.dart';
import 'CheckKids.dart';
import 'ChildrenHomePage.dart'; import 'ChildrenHomePage.dart';
import 'activities.dart';
import 'addstudent.dart'; import 'addstudent.dart';
import 'kidscheck_in_out.dart';
import 'kidsreports.dart';
class ClassroomViewPage extends StatelessWidget { class ClassroomViewPage extends StatelessWidget {
var documents; var documents;
late Future<List<DocumentSnapshot>> students = getStudentData(); late Future<List<DocumentSnapshot>> students = getStudentData();
late User? user; late User? user;
final TextEditingController _searchController = TextEditingController();
late StreamController<String> _searchTermController;
ClassroomViewPage({super.key, required this.documents}) { ClassroomViewPage({super.key, required this.documents}) {
user = FirebaseAuth.instance.currentUser; user = FirebaseAuth.instance.currentUser;
...@@ -25,6 +29,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -25,6 +29,7 @@ class ClassroomViewPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
leading: IconButton( leading: IconButton(
...@@ -33,7 +38,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -33,7 +38,7 @@ class ClassroomViewPage extends StatelessWidget {
Navigator.pop(context); Navigator.pop(context);
}, },
), ),
title: Text('Class Room'), title: Text('Class Room '),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
child: Padding( child: Padding(
...@@ -49,22 +54,66 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -49,22 +54,66 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
ElevatedButton( Container(
onPressed: () { height: 35.0,
// Navigate to AddStudentPage width: 120.0,
Navigator.push( decoration: BoxDecoration(
context, color: Color.fromARGB(203, 164, 88, 177),
MaterialPageRoute(builder: (context) => AddStudent()), borderRadius: BorderRadius.circular(4.0),
); ),
}, child: TextButton(
child: Text('Add Student'), onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
AddStudentPage(classname: documents)),
);
},
child: Text(
'Add Student',
style: TextStyle(
color: Colors.white,
),
),
),
), ),
SizedBox(height: 10), SizedBox(height: 10),
TextField( Padding(
decoration: InputDecoration( padding: EdgeInsets.fromLTRB(width * 0.1, 20, width * 0.1, 20),
hintText: 'Search...', child: Container(
prefixIcon: Icon(Icons.search), width: 293,
border: OutlineInputBorder(), height: 44,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 4,
offset: Offset(0, 1),
spreadRadius: 0,
),
],
),
child: TextField(
controller: _searchController,
onChanged: (value) {
_searchTermController.add(value);
},
decoration: InputDecoration(
hintText: 'Search',
border: InputBorder.none,
icon: Padding(
padding: const EdgeInsets.all(8.0),
child: Icon(Icons.search),
),
suffixIcon: Icon(Icons.mic),
contentPadding: EdgeInsets.all(8),
),
),
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
...@@ -73,11 +122,11 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -73,11 +122,11 @@ class ClassroomViewPage extends StatelessWidget {
childAspectRatio: (1 / 0.6), childAspectRatio: (1 / 0.6),
shrinkWrap: true, shrinkWrap: true,
children: [ children: [
//Children
GestureDetector( GestureDetector(
onTap: () { onTap: () {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (_) => ChildrenHomePage(), builder: (_) =>
ChildrenHomePage(classroom: documents),
)); ));
}, },
child: Padding( child: Padding(
...@@ -145,7 +194,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -145,7 +194,7 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
TextSpan( TextSpan(
text: '10', text: '',
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 14, fontSize: 14,
...@@ -163,17 +212,18 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -163,17 +212,18 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
), ),
// Add Image widget inside the Stack
Positioned( Positioned(
right: 0, right: 0,
bottom: 0, bottom: 0,
child: Image.asset( child: Image.asset(
"lib/assets/Vector 2.png", "lib/assets/Vector 2.png", // Replace with your image URL
width: width:
59, 59, // Set the width as per your requirement
height: height:
81, 81, // Set the height as per your requirement
fit: BoxFit fit: BoxFit
.cover, .cover, // Adjust the BoxFit property as needed
), ),
), ),
], ],
...@@ -252,7 +302,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -252,7 +302,7 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
TextSpan( TextSpan(
text: '12', text: '',
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 14, fontSize: 14,
...@@ -274,7 +324,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -274,7 +324,7 @@ class ClassroomViewPage extends StatelessWidget {
right: 8, right: 8,
bottom: 8, bottom: 8,
child: Image.asset( child: Image.asset(
"lib/assets/Vector22.png", "lib/assets/Vector22.png", // Replace with your image URL
width: 59, width: 59,
height: 81, height: 81,
fit: BoxFit.cover, fit: BoxFit.cover,
...@@ -285,174 +335,172 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -285,174 +335,172 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
), ),
Padding( GestureDetector(
padding: const EdgeInsets.all(10.0),
child: GestureDetector(
onTap: () { onTap: () {
Navigator.push( Navigator.of(context).push(MaterialPageRoute(
context, builder: (_) => ChildrenActivity(),
MaterialPageRoute(builder: (context) => ActivitiesPage()), ));
);
}, },
child: Container( child: Padding(
width: 170, padding: const EdgeInsets.all(10.0),
height: 85, child: Container(
clipBehavior: Clip.antiAlias, width: 170,
decoration: ShapeDecoration( height: 85,
gradient: LinearGradient( clipBehavior: Clip.antiAlias,
begin: Alignment(1.00, -0.01), decoration: ShapeDecoration(
end: Alignment(-1, 0.01), gradient: LinearGradient(
colors: [Color(0xFF5670EC), Color(0xFF07BAFE)], begin: Alignment(1.00, -0.01),
), end: Alignment(-1, 0.01),
shape: RoundedRectangleBorder( colors: [Color(0xFF5670EC), Color(0xFF07BAFE)],
borderRadius: BorderRadius.circular(4), ),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 2,
offset: Offset(0, 1),
spreadRadius: 0,
)
],
), ),
shadows: [ child: Stack(
BoxShadow( children: [
color: Color(0x3F000000), Positioned(
blurRadius: 2, left: 8,
offset: Offset(0, 1), top: 35,
spreadRadius: 0, child: Container(
) child: Column(
], mainAxisSize: MainAxisSize.min,
), mainAxisAlignment: MainAxisAlignment.start,
child: Stack( crossAxisAlignment:
children: [ CrossAxisAlignment.start,
Positioned( children: [
left: 8, Text(
top: 35, 'Activities',
child: Container( style: TextStyle(
child: Column( color: Colors.white,
mainAxisSize: MainAxisSize.min, fontSize: 16,
mainAxisAlignment: MainAxisAlignment.start, fontFamily: 'Poppins',
crossAxisAlignment: CrossAxisAlignment.start, fontWeight: FontWeight.w700,
children: [ height: 0.06,
Text( letterSpacing: -0.64,
'Activities', ),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.06,
letterSpacing: -0.64,
), ),
), const SizedBox(height: 8),
const SizedBox(height: 8), ],
], ),
), ),
), ),
), Positioned(
Positioned( right: 8,
right: 8, bottom: 8,
bottom: 8, child: Image.asset(
child: Image.asset( "lib/assets/Vector23.png", // Replace with your image URL
"lib/assets/Vector23.png", width: 59,
width: 59, height: 81,
height: 81, fit: BoxFit.cover,
fit: BoxFit.cover, ),
), ),
), ],
], ),
), ),
), ),
), ),
), GestureDetector(
//check in and out onTap: () {
Navigator.of(context).push(MaterialPageRoute(
GestureDetector( builder: (_) => CheckKidsPage(),
onTap: () { ));
Navigator.push( },
context, child: Padding(
MaterialPageRoute(builder: (context) => KidsCheckssPage()), padding: const EdgeInsets.all(10.0),
); child: Container(
}, width: 170,
child: Container( height: 85,
width: 170, clipBehavior: Clip.antiAlias,
height: 85, decoration: ShapeDecoration(
clipBehavior: Clip.antiAlias, gradient: LinearGradient(
decoration: ShapeDecoration( begin: Alignment(1.00, -0.01),
gradient: LinearGradient( end: Alignment(-1, 0.01),
begin: Alignment(1.00, -0.01), colors: [Color(0xFF03BB9A), Color(0xFF08EBC3)],
end: Alignment(-1, 0.01), ),
colors: [Color(0xFF03BB9A), Color(0xFF08EBC3)], shape: RoundedRectangleBorder(
), borderRadius: BorderRadius.circular(4),
shape: RoundedRectangleBorder( ),
borderRadius: BorderRadius.circular(4), shadows: [
), BoxShadow(
shadows: [ color: Color(0x3F000000),
BoxShadow( blurRadius: 2,
color: Color(0x3F000000), offset: Offset(0, 1),
blurRadius: 2, spreadRadius: 0,
offset: Offset(0, 1), )
spreadRadius: 0, ],
) ),
], child: Stack(
), children: [
child: Stack( Positioned(
children: [ left: 8,
Positioned( top: 35,
left: 8, child: Container(
top: 35, child: Column(
child: Container( mainAxisSize: MainAxisSize.min,
child: Column( mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min, crossAxisAlignment:
mainAxisAlignment: MainAxisAlignment.start, CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Text(
Text( ' Check In',
' Check In', style: TextStyle(
style: TextStyle( color: Colors.white,
color: Colors.white, fontSize: 16,
fontSize: 16, fontFamily: 'Poppins',
fontFamily: 'Poppins', fontWeight: FontWeight.w700,
fontWeight: FontWeight.w700, height: 0.06,
height: 0.06, letterSpacing: -0.64,
letterSpacing: -0.64, ),
), ),
), const SizedBox(height: 8),
const SizedBox(height: 8), Padding(
Padding( padding: const EdgeInsets.all(8.0),
padding: const EdgeInsets.all(8.0), child: Text.rich(
child: Text.rich(
TextSpan(
children: [
TextSpan( TextSpan(
text: 'Check Out ', children: [
style: TextStyle( TextSpan(
color: Colors.white, text: 'Check Out ',
fontSize: 16, style: TextStyle(
fontFamily: 'Poppins', color: Colors.white,
fontWeight: FontWeight.w500, fontSize: 16,
height: 0.07, fontFamily: 'Poppins',
letterSpacing: -0.56, fontWeight: FontWeight.w500,
), height: 0.07,
letterSpacing: -0.56,
),
),
],
), ),
], ),
), ),
), ],
), ),
], ),
), ),
), Positioned(
), right: 8,
Positioned( bottom: 8,
right: 8, child: Image.asset(
bottom: 8, "lib/assets/Vector24.png", // Replace with your image URL
child: Image.asset( width: 59,
"lib/assets/Vector24.png", height: 81,
width: 59, fit: BoxFit.cover,
height: 81, ),
fit: BoxFit.cover, ),
), ],
), ),
], ),
), ),
), ),
),
//calendar
Padding( Padding(
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
child: Container( child: Container(
...@@ -508,7 +556,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -508,7 +556,7 @@ class ClassroomViewPage extends StatelessWidget {
right: 8, right: 8,
bottom: 8, bottom: 8,
child: Image.asset( child: Image.asset(
"lib/assets/Vector25.png", "lib/assets/Vector25.png", // Replace with your image URL
width: 59, width: 59,
height: 81, height: 81,
fit: BoxFit.cover, fit: BoxFit.cover,
...@@ -518,13 +566,11 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -518,13 +566,11 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
), ),
//report
GestureDetector( GestureDetector(
onTap: () { onTap: () {
Navigator.push( Navigator.of(context).push(MaterialPageRoute(
context, builder: (_) => ReportKidsPage(classroom: documents),
MaterialPageRoute(builder: (context) => KidsReportsPage()), ));
);
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
...@@ -547,7 +593,7 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -547,7 +593,7 @@ class ClassroomViewPage extends StatelessWidget {
blurRadius: 2, blurRadius: 2,
offset: Offset(0, 1), offset: Offset(0, 1),
spreadRadius: 0, spreadRadius: 0,
), )
], ],
), ),
child: Stack( child: Stack(
...@@ -555,31 +601,34 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -555,31 +601,34 @@ class ClassroomViewPage extends StatelessWidget {
Positioned( Positioned(
left: 8, left: 8,
top: 35, top: 35,
child: Column( child: Container(
mainAxisSize: MainAxisSize.min, child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ crossAxisAlignment:
Text( CrossAxisAlignment.start,
'Report', children: [
style: TextStyle( Text(
color: Colors.white, 'Report',
fontSize: 16, style: TextStyle(
fontFamily: 'Poppins', color: Colors.white,
fontWeight: FontWeight.w700, fontSize: 16,
height: 0.06, fontFamily: 'Poppins',
letterSpacing: -0.64, fontWeight: FontWeight.w700,
height: 0.06,
letterSpacing: -0.64,
),
), ),
), const SizedBox(height: 8),
const SizedBox(height: 8), ],
], ),
), ),
), ),
Positioned( Positioned(
right: 8, right: 8,
bottom: 8, bottom: 8,
child: Image.asset( child: Image.asset(
"lib/assets/Vector26.png", "lib/assets/Vector26.png", // Replace with your image URL
width: 59, width: 59,
height: 81, height: 81,
fit: BoxFit.cover, fit: BoxFit.cover,
...@@ -590,7 +639,6 @@ class ClassroomViewPage extends StatelessWidget { ...@@ -590,7 +639,6 @@ class ClassroomViewPage extends StatelessWidget {
), ),
), ),
), ),
]), ]),
], ],
), ),
......
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class KidsReportPage extends StatefulWidget {
String id;
KidsReportPage({required this.id});
@override
_kidsReportPageState createState() => _kidsReportPageState(id: id);
}
class _kidsReportPageState extends State<KidsReportPage> {
// value set to false
bool _valu1 = false;
bool _valu2 = false;
bool _valu3 = false;
bool _valu4 = false;
bool _valu5 = false;
final _formkey = GlobalKey<FormState>();
final _auth = FirebaseAuth.instance;
String id;
_kidsReportPageState({required this.id});
// App widget tree
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Student Report '), //IconButton
), //AppBar
body: SingleChildScrollView(
child: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Understanding'),
subtitle: const Text(
'Understanding commands, Answer questions, Keeping eye contact, Following rules.'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: _valu1,
value: _valu1,
onChanged: (bool? value) {
setState(() {
_valu1 = value ?? false;
});
},
), //CheckboxListTile
),
SizedBox(height: 20),
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Movements'),
subtitle: const Text('Motor activities, Correct posture.'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: _valu2,
value: _valu2,
onChanged: (bool? value) {
setState(() {
_valu2 = value ?? false;
});
},
), //CheckboxListTile
),
SizedBox(height: 20),
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Manipulating'),
subtitle: const Text(
'Can build/create new things, Knows how to handle accessories'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: _valu3,
value: _valu3,
onChanged: (bool? value) {
setState(() {
_valu3 = value ?? false;
});
},
), //CheckboxListTile
),
SizedBox(height: 20),
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Socializing'),
subtitle: const Text(
'Play with groups, Help each other, Friendly towards peers.'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: _valu4,
value: _valu4,
onChanged: (bool? value) {
setState(() {
_valu4 = value ?? false;
});
},
), //CheckboxListTile
),
// SizedBox(height: 20),
// Container(
// // decoration: BoxDecoration(
// // borderRadius: BorderRadius.circular(20),
// // boxShadow: [
// // BoxShadow(
// // color: Colors.black,
// // offset: const Offset(
// // 3.0,
// // 3.0,
// // ), //Offset
// // blurRadius: 10.0,
// // spreadRadius: 2.0,
// // ), //BoxShadow
// // BoxShadow(
// // color: Colors.white,
// // offset: const Offset(0.0, 0.0),
// // blurRadius: 0.0,
// // spreadRadius: 0.0,
// // ), //BoxShadow
// // ],
// // ), //BoxDecoration
// /** CheckboxListTile Widget **/
// child: CheckboxListTile(
// title: const Text('GeeksforGeeks'),
// subtitle: const Text(
// 'A computer science portal for geeks. Here you will find articles on all the technologies.'),
// // secondary: CircleAvatar(
// // backgroundImage: NetworkImage(
// // "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// // radius: 20,
// // ),
// autofocus: false,
// isThreeLine: true,
// activeColor: Colors.green,
// checkColor: Colors.white,
// selected: _valu5,
// value: _valu5,
// onChanged: (bool? value) {
// setState(() {
// _valu5 = value ?? false;
// });
// },
// ), //CheckboxListTile
// ),
// SizedBox(height: 20),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
onPressed: () async {
postDetailsToFirestore(context);
},
style:
TextButton.styleFrom(backgroundColor: Colors.green),
child: Text(
'Save',
style: TextStyle(
color: Colors.white,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
),
),
),
TextButton(
onPressed: () {
Navigator.pop(context);
},
style: TextButton.styleFrom(
backgroundColor: Colors.grey.shade200),
child: Text(
'Cancel',
style: TextStyle(
color: Colors.black,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
),
),
)
],
),
],
), //Container
), //Padding
), //Center
), //SizedBox
);
}
postDetailsToFirestore(context) async {
FirebaseFirestore firebaseFirestore = FirebaseFirestore.instance;
var user = _auth.currentUser;
CollectionReference ref = FirebaseFirestore.instance.collection('reports');
ref.doc(id).set({
"q1": _valu1,
'q2': _valu2,
'q3': _valu3,
"q4": _valu4,
'q5': _valu5,
'sId': id,
});
AwesomeDialog(
context: context,
dialogType: DialogType.success,
animType: AnimType.rightSlide,
title: 'Successfully Created',
btnOkOnPress: () {},
)..show();
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'ChatScreen.dart';
import 'TeacherProfile.dart';
import 'kidsReport.dart'; // Import the AddClassroomPage file
class ReportKidsViewPage extends StatelessWidget {
late User? user;
late final Stream<QuerySnapshot> _usersStream;
late String sid;
ReportKidsViewPage({sid}) {
this.sid = sid;
print(sid);
user = FirebaseAuth.instance.currentUser;
initializeStreams();
}
void initializeStreams() {
_usersStream = FirebaseFirestore.instance
.collection('reports')
.where('sId', isEqualTo: sid)
.snapshots();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Report ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Report View',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
SizedBox(height: 30),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (context, snapshot) {
print("--------------------------------------");
print(snapshot.data!.docs.length);
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
var itemCount = snapshot.data!.docs.length;
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
1, // Adjust this value to control the number of items per row
crossAxisSpacing:
8.0, // Adjust spacing between items horizontally
mainAxisSpacing:
8.0, // Adjust spacing between items vertically
),
itemCount: itemCount,
itemBuilder: (context, index) {
var document = snapshot.data!.docs[index];
index++;
var _valu = document['q' + index.toString()];
return Container(
color: Color(0xFFE5E5E5),
child: SingleChildScrollView(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Understanding'),
subtitle: const Text(
'Understanding commands, Answer questions, Keeping eye contact, Following rules.'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: document["q1"],
value: document["q1"],
onChanged: (bool? value) {
// setState(() {
// _valu1 = value ?? false;
// });
},
), //CheckboxListTile
),
SizedBox(height: 20),
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Movements'),
subtitle: const Text(
'Motor activities, Correct posture.'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: document["q2"],
value: document["q2"],
onChanged: (bool? value) {
// setState(() {
// _valu2 = value ?? false;
// });
},
), //CheckboxListTile
),
SizedBox(height: 20),
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Manipulating'),
subtitle: const Text(
'Can build/create new things, Knows how to handle accessories'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: document["q3"],
value: document["q3"],
onChanged: (bool? value) {
// setState(() {
// _valu3 = value ?? false;
// });
},
), //CheckboxListTile
),
SizedBox(height: 20),
Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
// boxShadow: [
// BoxShadow(
// color: Colors.black,
// offset: const Offset(
// 3.0,
// 3.0,
// ), //Offset
// blurRadius: 10.0,
// spreadRadius: 2.0,
// ), //BoxShadow
// BoxShadow(
// color: Colors.white,
// offset: const Offset(0.0, 0.0),
// blurRadius: 0.0,
// spreadRadius: 0.0,
// ), //BoxShadow
// ],
// ), //BoxDecoration
/** CheckboxListTile Widget **/
child: CheckboxListTile(
title: const Text('Socializing'),
subtitle: const Text(
'Play with groups, Help each other, Friendly towards peers.'),
// secondary: CircleAvatar(
// backgroundImage: NetworkImage(
// "https://pbs.twimg.com/profile_images/1304985167476523008/QNHrwL2q_400x400.jpg"), //NetworkImage
// radius: 20,
// ),
autofocus: false,
isThreeLine: true,
activeColor: Colors.green,
checkColor: Colors.white,
selected: document["q4"],
value: document["q4"],
onChanged: (bool? value) {
// setState(() {
// _valu4 = value ?? false;
// });
},
), //CheckboxListTile
),
],
),
),
);
},
);
},
),
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
switch (index) {
case 0:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(
uid: user?.uid,
)),
);
break;
}
},
),
),
);
}
}
...@@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; ...@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
class KidsReportsPage extends StatelessWidget { class KidsReportsPage extends StatelessWidget {
final List<KidData> kidsData = [ final List<KidData> kidsData = [
KidData(name: 'Adam', imageUrl: "lib/assets/Ellipse 8.png"), KidData(name: 'Adam', imageUrl: "lib/assets/Ellipse 8.png"),
KidData(name: 'Jude', imageUrl: "lib/assets/Ellipse 8.png"), KidData(name: 'Jude', imageUrl: "lib/assets/Ellipse 8.png"),
KidData(name: 'Anne', imageUrl: 'url_to_kid3_image'), KidData(name: 'Anne', imageUrl: 'url_to_kid3_image'),
KidData(name: 'Adam', imageUrl: 'url_to_kid3_image'), KidData(name: 'Adam', imageUrl: 'url_to_kid3_image'),
KidData(name: 'Jeny', imageUrl: 'url_to_kid3_image'), KidData(name: 'Jeny', imageUrl: 'url_to_kid3_image'),
...@@ -15,7 +15,7 @@ class KidsReportsPage extends StatelessWidget { ...@@ -15,7 +15,7 @@ class KidsReportsPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text('Reports'), title: Text('Reports '),
), ),
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
......
...@@ -2,7 +2,11 @@ import 'package:awesome_dialog/awesome_dialog.dart'; ...@@ -2,7 +2,11 @@ import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/teacherhome.dart'; import 'package:mobile_application_kids/parentHome.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'main.dart';
class LoginPage extends StatefulWidget { class LoginPage extends StatefulWidget {
const LoginPage({Key? key, required this.backgroundColor}) : super(key: key); const LoginPage({Key? key, required this.backgroundColor}) : super(key: key);
...@@ -29,7 +33,15 @@ class _LoginPage extends State<LoginPage> { ...@@ -29,7 +33,15 @@ class _LoginPage extends State<LoginPage> {
color: Color.fromARGB(255, 0, 0, 0), color: Color.fromARGB(255, 0, 0, 0),
), ),
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => MyHomePage(
title: '',
backgroundColor: Color.fromARGB(255, 181, 181, 181),
),
),
);
}, },
), ),
), ),
...@@ -165,7 +177,6 @@ class _LoginPage extends State<LoginPage> { ...@@ -165,7 +177,6 @@ class _LoginPage extends State<LoginPage> {
animType: AnimType.rightSlide, animType: AnimType.rightSlide,
title: 'Successfully login', title: 'Successfully login',
desc: ' Go to your home page', desc: ' Go to your home page',
btnCancelOnPress: () {},
btnOkOnPress: () { btnOkOnPress: () {
Navigator.pushReplacement( Navigator.pushReplacement(
context, context,
...@@ -178,12 +189,24 @@ class _LoginPage extends State<LoginPage> { ...@@ -178,12 +189,24 @@ class _LoginPage extends State<LoginPage> {
print("login teacher"); print("login teacher");
} else { } else {
Navigator.pushReplacement( AwesomeDialog(
context, context: context,
MaterialPageRoute( dialogType: DialogType.info,
builder: (context) => TeacherHomePage(), animType: AnimType.rightSlide,
), title: ' login Perent',
); desc: ' Go to your home page',
btnCancelOnPress: () {},
btnOkOnPress: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) =>
ParentHomePage(documentSnapshot.get('phoneNo'), "p"),
),
);
},
)..show();
print("login parent");
} }
} else { } else {
AwesomeDialog( AwesomeDialog(
......
import 'dart:async'; import 'dart:async';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/sign_in_up.dart'; import 'package:mobile_application_kids/sign_in_up.dart';
import 'firebase_options.dart'; import 'firebase_options.dart';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp( await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform, options: DefaultFirebaseOptions.currentPlatform,
); );
runApp(const MyApp()); runApp(const MyApp());
} }
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'ParentLogin.dart';
import 'login.dart'; import 'login.dart';
class ParentTeacherPage extends StatelessWidget { class ParentTeacherPage extends StatelessWidget {
const ParentTeacherPage({Key? key, required this.backgroundColor}) : super(key: key); const ParentTeacherPage({Key? key, required this.backgroundColor})
: super(key: key);
final Color backgroundColor; final Color backgroundColor;
...@@ -53,6 +55,14 @@ class ParentTeacherPage extends StatelessWidget { ...@@ -53,6 +55,14 @@ class ParentTeacherPage extends StatelessWidget {
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
// logic for navigating to the parent login page // logic for navigating to the parent login page
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ParentLoginPage(
backgroundColor: backgroundColor,
),
),
);
}, },
child: Container( child: Container(
width: 200, width: 200,
......
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/parentSignUp.dart';
import 'package:mobile_application_kids/teachersignup.dart';
import 'ParentLogin.dart';
import 'login.dart';
class ParentTeacherSignUpPage extends StatelessWidget {
const ParentTeacherSignUpPage({Key? key, required this.backgroundColor})
: super(key: key);
final Color backgroundColor;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
leading: IconButton(
icon: Icon(
Icons.arrow_back,
color: const Color.fromARGB(255, 0, 0, 0),
),
onPressed: () {
Navigator.pop(context);
},
),
),
body: Container(
color: backgroundColor,
child: SafeArea(
child: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(10.0),
child: Image.asset(
'lib/assets/p_or_t.png',
width: 280,
height: 450,
),
),
const SizedBox(height: 20),
Text(
'Which Best Describe You ?',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 105, 19, 145),
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// logic for navigating to the parent login page
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ParentSignupPage(),
),
);
},
child: Container(
width: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Color.fromARGB(220, 164, 68, 215),
),
child: Center(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Text(
'Parent',
style: TextStyle(color: Colors.white),
),
),
),
),
style: ElevatedButton.styleFrom(
primary: Colors.transparent,
elevation: 0,
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherSignupPage(),
),
);
},
child: Container(
width: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Color.fromARGB(220, 164, 68, 215),
),
child: Center(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Text(
'Teacher',
style: TextStyle(color: Colors.white),
),
),
),
),
style: ElevatedButton.styleFrom(
primary: Colors.transparent,
elevation: 0,
),
),
],
),
),
),
),
),
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/classroomview.dart';
import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'ChatScreen.dart';
import 'TeacherProfile.dart';
import 'childrenProfile.dart';
class ParentHomePage extends StatelessWidget {
late User? user;
late final Stream<QuerySnapshot> _usersStream;
late String phoneNo;
late String role;
ParentHomePage(param0, role) {
this.role = role;
this.phoneNo = param0;
user = FirebaseAuth.instance.currentUser;
initializeStreams();
}
void initializeStreams() {
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('Parentphone', isEqualTo: phoneNo)
.snapshots();
}
// Define a TextStyle with the Poppins font
final TextStyle poppinsTextStyle = TextStyle(
fontFamily: 'Poppins',
);
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
// leading: Flexible(
// child: Image.asset(
// 'lib/assets/logo.png',
// fit: BoxFit.contain,
// height: 150, // Adjust the height to make the logo bigger
// ),
// ),
actions: [
IconButton(
icon: Icon(Icons.notifications),
onPressed: () {
// Handle notification icon press
},
),
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 20),
Text(
'Explore, learn, and play in our magical world of wonder!',
style: poppinsTextStyle.copyWith(
// fontWeight: FontWeight.bold,
fontSize: 13,
),
),
SizedBox(height: 10),
Expanded(
child: Image.asset(
'lib/assets/teacherhome.png',
fit: BoxFit.contain,
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
onPressed: () {
// Navigate to the AddClassroomPage
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddClassroomPage()),
);
},
child: Row(
children: [],
),
),
],
),
Divider(),
SizedBox(height: 10),
Text(
'All Kids',
style: poppinsTextStyle.copyWith(
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 12),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (context, snapshot) {
print("--------------------------------------");
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
var itemcount = snapshot.data!.docs.length;
return ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
var document = snapshot.data!.docs[index];
var className = document['className'];
var name = document['Firstname'];
print(document);
return Padding(
padding: const EdgeInsets.only(
bottom: 8.0), // Adjust the spacing as needed
child: ListTile(
leading: CircleAvatar(
radius: 27.0,
backgroundImage:
AssetImage('lib/assets/classlogo.png'),
),
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Text(
'$name',
style: poppinsTextStyle.copyWith(
fontWeight: FontWeight.bold),
),
],
),
Row(
children: [
Text(
'$className',
style: poppinsTextStyle.copyWith(
fontSize: 12.0),
),
],
),
],
),
trailing: Container(
height: 35.0,
width: 80.0,
decoration: BoxDecoration(
color: Color.fromARGB(203, 164, 88, 177),
borderRadius: BorderRadius.circular(4.0),
),
child: TextButton(
onPressed: () {
print(document);
// Handle view class button press
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ChildrenProfilePage(
document,
),
),
);
},
child: Text(
'View',
style: poppinsTextStyle.copyWith(
color: Colors.white,
),
),
),
),
),
);
},
);
},
),
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
// Handle bottom navigation item tap
switch (index) {
case 0:
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(
uid: user?.uid,
)),
);
break;
}
},
),
),
);
}
}
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'login.dart';
class ParentSignupPage extends StatefulWidget {
const ParentSignupPage({Key? key}) : super(key: key);
@override
_ParentSignupPageState createState() => _ParentSignupPageState();
}
class _ParentSignupPageState extends State<ParentSignupPage> {
// TextEditingController for text input fields
final _formkey = GlobalKey<FormState>();
final _auth = FirebaseAuth.instance;
TextEditingController fullNameController = TextEditingController();
TextEditingController emailController = TextEditingController();
TextEditingController phoneNumberController = TextEditingController();
TextEditingController passwordController = TextEditingController();
// TextEditingController schoolNameController = TextEditingController();
// TextEditingController enrolmentCapacityController = TextEditingController();
// TextEditingController countryController = TextEditingController();
// TextEditingController stateRegionController = TextEditingController();
bool agreeTermsAndConditions = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Parent Signup'),
),
body: SingleChildScrollView(
child: Column(
children: [
Image.asset(
'lib/assets/tsignup1.png',
width: 240,
height: 270,
fit: BoxFit.cover,
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildTextInputWithIcon(
controller: fullNameController,
labelText: 'Full Name',
icon: Icons.person,
),
const SizedBox(height: 10),
_buildTextInputWithIcon(
controller: emailController,
labelText: 'Email',
icon: Icons.email,
),
const SizedBox(height: 10),
_buildTextInputWithIcon(
controller: phoneNumberController,
labelText: 'Phone Number',
icon: Icons.phone,
),
const SizedBox(height: 10),
_buildTextInputWithIcon(
controller: passwordController,
labelText: 'Password',
icon: Icons.lock,
obscureText: true,
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// Logic to navigate to the next page with additional information
signUp(emailController.text, passwordController.text,
'parent', context);
},
child: Text('Finish'),
),
],
),
),
],
),
),
);
}
Widget _buildTextInputWithIcon({
required TextEditingController controller,
required String labelText,
required IconData icon,
bool obscureText = false,
}) {
return TextFormField(
controller: controller,
obscureText: obscureText,
decoration: InputDecoration(
labelText: labelText,
suffixIcon: Icon(icon),
filled: true,
fillColor: Colors.grey[200], // Light gray background color
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Colors.transparent), // No border color when focused
borderRadius: BorderRadius.circular(10.0),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Colors.transparent), // No border color when not focused
borderRadius: BorderRadius.circular(10.0),
),
),
);
}
void signUp(String email, String password, String rool, context) async {
CircularProgressIndicator();
await _auth
.createUserWithEmailAndPassword(email: email, password: password)
.then((value) => {postDetailsToFirestore(email, rool, context)})
.catchError((e) {
AwesomeDialog(
context: context,
dialogType: DialogType.error,
animType: AnimType.rightSlide,
title: 'Error',
desc: ' error',
btnOkOnPress: () {},
)..show();
});
}
postDetailsToFirestore(String email, String rool, context) async {
FirebaseFirestore firebaseFirestore = FirebaseFirestore.instance;
var user = _auth.currentUser;
CollectionReference ref = FirebaseFirestore.instance.collection('users');
print("user!.uid == : " + emailController.text);
ref.doc(user!.uid).set({
"fullName": fullNameController.text,
'email': emailController.text,
'phoneNo': phoneNumberController.text,
"agreeTermsAndConditions": agreeTermsAndConditions,
'rool': rool
});
AwesomeDialog(
context: context,
dialogType: DialogType.success,
animType: AnimType.rightSlide,
title: 'Successfully Created',
desc: ' Go to Login page',
btnOkOnPress: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginPage(
backgroundColor: Color.fromARGB(255, 0, 183, 255),
)));
},
)..show();
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mobile_application_kids/teacherchat.dart';
import 'package:mobile_application_kids/classroomview.dart';
import 'package:mobile_application_kids/addclassroom.dart';
import 'package:mobile_application_kids/teacherhome.dart';
import 'package:pie_chart/pie_chart.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'ChatScreen.dart';
import 'TeacherProfile.dart';
class ProggressReport extends StatefulWidget {
@override
_ProggressReportState createState() => _ProggressReportState();
}
class _ProggressReportState extends State<ProggressReport> {
late User? user;
late final Stream<QuerySnapshot> _usersStream;
int absCount = 0;
int preCount = 0;
@override
void initState() {
super.initState();
user = FirebaseAuth.instance.currentUser;
initializeStreams();
getAllStudentCountPresentAbs();
}
Map<String, double> dataMap = {
"Present": 0,
"Absent": 0,
};
void initializeStreams() {
_usersStream = FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
// Disable the back button press
return false;
},
child: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Attendance ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Bright Sparkle ',
style: TextStyle(
color: Color(0xFF11324D),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.04,
letterSpacing: -0.96,
),
),
Padding(
padding: const EdgeInsets.fromLTRB(5, 5, 5, 5),
child: Container(
width: 358,
height: 76,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Today’s Absent Count',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
const SizedBox(height: 20),
Container(
width: double.infinity,
height: 40,
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: double.infinity,
padding: const EdgeInsets.symmetric(
horizontal: 21, vertical: 12),
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4)),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 1,
offset: Offset(0, 0),
spreadRadius: 0,
)
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'Male',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.07,
),
),
const SizedBox(width: 2),
SizedBox(
width: 30,
child: FutureBuilder<String>(
future: getMaleStudentCount(
'Male', 1),
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
// Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
return Text(' ' +
snapshot.data.toString());
}
})),
],
),
),
const SizedBox(width: 2),
Container(
height: double.infinity,
padding: const EdgeInsets.all(12),
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4)),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 1,
offset: Offset(0, 0),
spreadRadius: 0,
)
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'Female',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.07,
),
),
const SizedBox(width: 2),
SizedBox(
width: 30,
child: FutureBuilder<String>(
future: getMaleStudentCount(
'Female', 1),
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
// Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
return Text(' ' +
snapshot.data.toString());
}
})),
],
),
),
const SizedBox(width: 14),
Container(
height: double.infinity,
padding: const EdgeInsets.all(12),
decoration: ShapeDecoration(
color: Color(0xFFEF4B4B),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4)),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 1,
offset: Offset(0, 1),
spreadRadius: 0,
)
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
SizedBox(
width: 53,
child: Text(
'All',
style: TextStyle(
color: Colors.white,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.07,
),
),
),
const SizedBox(width: 3),
FutureBuilder<String>(
future: getAllStudentCount(1),
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
// Future is still loading, show a loading indicator
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Error occurred while fetching data
return Text('0');
} else {
// Data loaded successfully, display it
return Text(
snapshot.data.toString(),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.06,
),
);
}
},
),
],
),
),
],
),
),
],
),
)),
Padding(
padding: const EdgeInsets.fromLTRB(5, 5, 0, 5),
child: Container(
width: 358,
height: 362,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: double.infinity,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Attendance Summary ',
style: TextStyle(
color: Color(0xFF21205B),
fontSize: 16,
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
height: 0.06,
),
),
],
),
),
const SizedBox(height: 30),
Container(
width: double.infinity,
height: 316,
padding: const EdgeInsets.only(
top: 16,
left: 18,
right: 17,
bottom: 18,
),
clipBehavior: Clip.antiAlias,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8)),
shadows: [
BoxShadow(
color: Color(0x3F000000),
blurRadius: 3,
offset: Offset(0, 1),
spreadRadius: 0,
)
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 300,
height: 282,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
SizedBox(
width: 157,
height: 13,
child: Text(
'Attendance ',
style: TextStyle(
color: Color(0xFF2B3674),
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 0.07,
letterSpacing: -0.28,
),
),
),
],
),
),
Center(
child: Container(
width: 300,
height: 250,
child: Stack(
children: [
PieChart(
dataMap: dataMap,
chartType: ChartType.disc,
chartRadius:
MediaQuery.of(context)
.size
.width /
2.2,
colorList: [
Color.fromARGB(
255, 83, 172, 255),
Color.fromARGB(
255, 106, 210, 255),
],
legendOptions: LegendOptions(
showLegendsInRow: true,
legendPosition:
LegendPosition.bottom,
showLegends: true,
legendTextStyle: TextStyle(
fontWeight:
FontWeight.bold),
),
chartValuesOptions:
ChartValuesOptions(
showChartValueBackground:
true,
showChartValues: true,
showChartValuesInPercentage:
true,
showChartValuesOutside: false,
),
),
],
),
),
),
],
),
),
],
),
),
],
),
)),
],
),
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) async {
final prefs = await SharedPreferences.getInstance();
String rool = prefs.get('rool').toString();
// Handle bottom navigation item tap
if (index == 0) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
}
if (index == 1) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
}
if (index == 2) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(uid: user?.uid)),
);
}
},
),
),
);
}
Stream<QuerySnapshot> getStudentsStream(String genderFilter, int isCheck) {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('Sex', isEqualTo: genderFilter)
.where('isCheck', isEqualTo: isCheck)
.snapshots();
}
Future<String> getMaleStudentCount(String sex, int isCheck) async {
try {
QuerySnapshot snapshot = await getStudentsStream(sex, isCheck).first;
return snapshot.size.toString();
} catch (e) {
print('Error getting male student count: $e');
return '0';
}
}
Stream<QuerySnapshot> getAllStudentsStream(int isCheck) {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.where('isCheck', isEqualTo: isCheck)
.snapshots();
}
Future<String> getAllStudentCount(int isCheck) async {
try {
QuerySnapshot snapshot = await getAllStudentsStream(isCheck).first;
print('size' + snapshot.size.toString());
return snapshot.size.toString();
} catch (e) {
print('Error getting male student count: $e');
return '0';
}
}
Stream<QuerySnapshot> getAllStudentsStreams() {
return FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: user?.uid)
.snapshots();
}
Future<void> getAllStudentCountPresentAbs() async {
try {
QuerySnapshot snapshot2 = await getAllStudentsStreams().first;
QuerySnapshot snapshot = await getAllStudentsStream(0).first;
QuerySnapshot snapshotAbs = await getAllStudentsStream(1).first;
preCount = snapshot.size;
absCount = snapshotAbs.size;
var pre = (snapshot.size / snapshot2.size) * 100;
var abs = (snapshotAbs.size / snapshot2.size) * 100;
setState(() {
dataMap["Present"] = pre.round().toDouble();
dataMap["Absent"] = abs.round().toDouble();
});
print("ss" + preCount.round().toString());
} catch (e) {
print('Error getting male student count: $e');
}
}
}
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/p_or_t.dart'; import 'package:mobile_application_kids/p_or_t.dart';
import 'package:jema_app/teachersignup.dart'; import 'package:mobile_application_kids/parentSignUp.dart';
import 'package:mobile_application_kids/teachersignup.dart';
import 'p_or_t_s.dart';
class SignInUpPage extends StatelessWidget { class SignInUpPage extends StatelessWidget {
const SignInUpPage({Key? key, required this.backgroundColor}) const SignInUpPage({Key? key, required this.backgroundColor})
...@@ -30,13 +33,16 @@ class SignInUpPage extends StatelessWidget { ...@@ -30,13 +33,16 @@ class SignInUpPage extends StatelessWidget {
), ),
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
const SizedBox(height: 20),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
// Navigate to the signup page (TeacherSignupPage) // Navigate to the signup page (TeacherSignupPage)
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => TeacherSignupPage(), builder: (context) => ParentTeacherSignUpPage(
backgroundColor: backgroundColor,
),
), ),
); );
}, },
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'ChatScreen.dart';
class TeacherChatPage extends StatefulWidget { class TeacherChatPage extends StatefulWidget {
@override @override
_TeacherChatPageState createState() => _TeacherChatPageState(); _TeacherChatPageState createState() => _TeacherChatPageState();
...@@ -12,7 +14,10 @@ class _TeacherChatPageState extends State<TeacherChatPage> { ...@@ -12,7 +14,10 @@ class _TeacherChatPageState extends State<TeacherChatPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text('Chat'), title: GestureDetector(
onTap: () => Navigator.push(
context, MaterialPageRoute(builder: (context) => ChatScreen())),
child: Text('Chat')),
), ),
body: ChatList(), body: ChatList(),
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(
......
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jema_app/teacherchat.dart'; import 'package:mobile_application_kids/classroomview.dart';
import 'package:jema_app/classroomview.dart'; import 'package:mobile_application_kids/addclassroom.dart';
import 'package:jema_app/addclassroom.dart'; import 'package:mobile_application_kids/teacherchat.dart';
import 'ChatScreen.dart';
import 'TeacherProfile.dart';
class TeacherHomePage extends StatelessWidget { class TeacherHomePage extends StatelessWidget {
late User? user; late User? user;
...@@ -20,6 +23,11 @@ class TeacherHomePage extends StatelessWidget { ...@@ -20,6 +23,11 @@ class TeacherHomePage extends StatelessWidget {
.snapshots(); .snapshots();
} }
// Define a TextStyle with the Poppins font
final TextStyle poppinsTextStyle = TextStyle(
fontFamily: 'Poppins',
);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WillPopScope( return WillPopScope(
...@@ -29,12 +37,15 @@ class TeacherHomePage extends StatelessWidget { ...@@ -29,12 +37,15 @@ class TeacherHomePage extends StatelessWidget {
}, },
child: Scaffold( child: Scaffold(
appBar: AppBar( appBar: AppBar(
leading: Flexible( // leading: Padding(
child: Image.asset( // padding: const EdgeInsets.only(left: 20),
'lib/assets/logo.png', // child: SizedBox(
fit: BoxFit.contain, // child: Image.asset(
), // 'lib/assets/logo.png',
), // fit: BoxFit.contain,
// ),
// ),
// ),
actions: [ actions: [
IconButton( IconButton(
icon: Icon(Icons.notifications), icon: Icon(Icons.notifications),
...@@ -52,8 +63,9 @@ class TeacherHomePage extends StatelessWidget { ...@@ -52,8 +63,9 @@ class TeacherHomePage extends StatelessWidget {
SizedBox(height: 20), SizedBox(height: 20),
Text( Text(
'Explore, learn, and play in our magical world of wonder!', 'Explore, learn, and play in our magical world of wonder!',
style: TextStyle( style: poppinsTextStyle.copyWith(
fontSize: 12, // fontWeight: FontWeight.bold,
fontSize: 13,
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
...@@ -63,40 +75,59 @@ class TeacherHomePage extends StatelessWidget { ...@@ -63,40 +75,59 @@ class TeacherHomePage extends StatelessWidget {
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
SizedBox(height: 20), Row(
TextButton( mainAxisAlignment: MainAxisAlignment.center,
onPressed: () { children: [
// Navigate to the AddClassroomPage TextButton(
Navigator.push( onPressed: () {
context, // Navigate to the AddClassroomPage
MaterialPageRoute(builder: (context) => AddClassroomPage()), Navigator.push(
); context,
}, MaterialPageRoute(
child: Text( builder: (context) => AddClassroomPage()),
'Add Classroom', );
style: TextStyle( },
color: Colors.blue, child: Row(
fontSize: 16, children: [
fontWeight: FontWeight.bold, Text(
'Create New Class Room Here',
style: poppinsTextStyle.copyWith(
color: Color.fromARGB(255, 0, 0, 0),
fontSize: 16,
),
),
Container(
margin: EdgeInsets.only(left: 8.0),
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color.fromARGB(203, 164, 88, 177),
borderRadius: BorderRadius.circular(8.0),
),
child: Icon(
Icons.add,
color: Colors.white, // Set the icon color to white
),
),
],
),
), ),
), ],
), ),
Divider(), Divider(),
SizedBox(height: 10), SizedBox(height: 10),
Text( Text(
'Class Rooms', 'Class Rooms',
style: TextStyle( style: poppinsTextStyle.copyWith(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
SizedBox(height: 10), SizedBox(height: 12),
Expanded( Expanded(
child: StreamBuilder<QuerySnapshot>( child: StreamBuilder<QuerySnapshot>(
stream: _usersStream, stream: _usersStream,
builder: (context, snapshot) { builder: (context, snapshot) {
print("--------------------------------------"); print("--------------------------------------");
print(snapshot.data!.docs.length);
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); return CircularProgressIndicator();
} }
...@@ -111,26 +142,67 @@ class TeacherHomePage extends StatelessWidget { ...@@ -111,26 +142,67 @@ class TeacherHomePage extends StatelessWidget {
itemBuilder: (context, index) { itemBuilder: (context, index) {
var document = snapshot.data!.docs[index]; var document = snapshot.data!.docs[index];
var className = document['className']; var className = document['className'];
print(document);
return ListTile( return Padding(
leading: CircleAvatar( padding: const EdgeInsets.only(
backgroundImage: AssetImage('lib/assets/logo.png'), bottom: 8.0), // Adjust the spacing as needed
), child: ListTile(
title: Text(className), leading: CircleAvatar(
trailing: ElevatedButton( radius: 27.0,
onPressed: () { backgroundImage:
print(document); AssetImage('lib/assets/classlogo.png'),
// Handle view class button press ),
Navigator.push( title: Column(
context, crossAxisAlignment: CrossAxisAlignment.start,
MaterialPageRoute( children: [
builder: (context) => ClassroomViewPage( Row(
documents: className, children: [
Text(
'$className',
style: poppinsTextStyle.copyWith(
fontWeight: FontWeight.bold),
),
],
),
Row(
children: [
Text(
'Class $index',
style: poppinsTextStyle.copyWith(
fontSize: 12.0),
),
],
),
],
),
trailing: Container(
height: 35.0,
width: 80.0,
decoration: BoxDecoration(
color: Color.fromARGB(203, 164, 88, 177),
borderRadius: BorderRadius.circular(4.0),
),
child: TextButton(
onPressed: () {
print(document);
// Handle view class button press
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ClassroomViewPage(
documents: className,
),
),
);
},
child: Text(
'View',
style: poppinsTextStyle.copyWith(
color: Colors.white,
), ),
), ),
); ),
}, ),
child: Text('View'),
), ),
); );
}, },
...@@ -159,11 +231,25 @@ class TeacherHomePage extends StatelessWidget { ...@@ -159,11 +231,25 @@ class TeacherHomePage extends StatelessWidget {
selectedItemColor: Colors.blue, selectedItemColor: Colors.blue,
onTap: (index) { onTap: (index) {
// Handle bottom navigation item tap // Handle bottom navigation item tap
if (index == 1) { switch (index) {
Navigator.push( case 0:
context, // Navigate to Home
MaterialPageRoute(builder: (context) => TeacherChatPage()), break;
); case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Navigate to Profile
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(uid: user?.uid)),
);
break;
} }
}, },
), ),
......
...@@ -209,7 +209,6 @@ class AdditionalInfoPage extends StatelessWidget { ...@@ -209,7 +209,6 @@ class AdditionalInfoPage extends StatelessWidget {
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
// Logic to finish the teacher registration // Logic to finish the teacher registration
// You can add your own logic here
signUp(emailController.text, passwordController.text, rool, signUp(emailController.text, passwordController.text, rool,
context); context);
}, },
......
...@@ -6,6 +6,14 @@ ...@@ -6,6 +6,14 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <file_selector_linux/file_selector_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) { void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
} }
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux
url_launcher_linux
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
......
...@@ -6,13 +6,25 @@ import FlutterMacOS ...@@ -6,13 +6,25 @@ import FlutterMacOS
import Foundation import Foundation
import cloud_firestore import cloud_firestore
import file_selector_macos
import firebase_auth import firebase_auth
import firebase_core import firebase_core
import firebase_storage
import path_provider_foundation
import rive_common import rive_common
import shared_preferences_foundation
import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin")) RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
} }
...@@ -33,6 +33,30 @@ packages: ...@@ -33,6 +33,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.1"
cached_network_image:
dependency: "direct main"
description:
name: cached_network_image
sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
cached_network_image_platform_interface:
dependency: transitive
description:
name: cached_network_image_platform_interface
sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
cached_network_image_web:
dependency: transitive
description:
name: cached_network_image_web
sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
characters: characters:
dependency: transitive dependency: transitive
description: description:
...@@ -81,6 +105,30 @@ packages: ...@@ -81,6 +105,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.1" version: "1.17.1"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "2f9d2cbccb76127ba28528cb3ae2c2326a122446a83de5a056aaa3880d3882c5"
url: "https://pub.dev"
source: hosted
version: "0.3.3+7"
crypto:
dependency: transitive
description:
name: crypto
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
url: "https://pub.dev"
source: hosted
version: "3.0.3"
csslib:
dependency: transitive
description:
name: csslib
sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -105,6 +153,46 @@ packages: ...@@ -105,6 +153,46 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
file:
dependency: transitive
description:
name: file
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492"
url: "https://pub.dev"
source: hosted
version: "0.9.2+1"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6
url: "https://pub.dev"
source: hosted
version: "0.9.3+3"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.dev"
source: hosted
version: "2.6.2"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0
url: "https://pub.dev"
source: hosted
version: "0.9.3+1"
firebase_auth: firebase_auth:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -153,11 +241,43 @@ packages: ...@@ -153,11 +241,43 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.10.0" version: "2.10.0"
firebase_storage:
dependency: "direct main"
description:
name: firebase_storage
sha256: "75e6cb6bed65138b5bbd86bfd7cf9bc9a175fb0c31aacc400e9203df117ffbe6"
url: "https://pub.dev"
source: hosted
version: "11.6.0"
firebase_storage_platform_interface:
dependency: transitive
description:
name: firebase_storage_platform_interface
sha256: "545a3a8edf337850403bb0fa03c8074a53deb87c0107d19755c77a82ce07919e"
url: "https://pub.dev"
source: hosted
version: "5.1.3"
firebase_storage_web:
dependency: transitive
description:
name: firebase_storage_web
sha256: ee6870ff79aa304b8996ba18a4aefe1e8b3fc31fd385eab6574180267aa8d393
url: "https://pub.dev"
source: hosted
version: "3.6.17"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_cache_manager:
dependency: transitive
description:
name: flutter_cache_manager
sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:
...@@ -166,6 +286,14 @@ packages: ...@@ -166,6 +286,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.3" version: "2.0.3"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da
url: "https://pub.dev"
source: hosted
version: "2.0.17"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
...@@ -184,6 +312,14 @@ packages: ...@@ -184,6 +312,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.1"
html:
dependency: transitive
description:
name: html
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
url: "https://pub.dev"
source: hosted
version: "0.15.4"
http: http:
dependency: transitive dependency: transitive
description: description:
...@@ -200,6 +336,70 @@ packages: ...@@ -200,6 +336,70 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" version: "4.0.2"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "26222b01a0c9a2c8fe02fc90b8208bd3325da5ed1f4a2acabf75939031ac0bdd"
url: "https://pub.dev"
source: hosted
version: "1.0.7"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "39f2bfe497e495450c81abcd44b62f56c2a36a37a175da7d137b4454977b51b1"
url: "https://pub.dev"
source: hosted
version: "0.8.9+3"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3
url: "https://pub.dev"
source: hosted
version: "0.8.9+1"
image_picker_linux:
dependency: transitive
description:
name: image_picker_linux
sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
image_picker_macos:
dependency: transitive
description:
name: image_picker_macos
sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b
url: "https://pub.dev"
source: hosted
version: "2.9.3"
image_picker_windows:
dependency: transitive
description:
name: image_picker_windows
sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
js: js:
dependency: transitive dependency: transitive
description: description:
...@@ -240,6 +440,22 @@ packages: ...@@ -240,6 +440,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
mime:
dependency: transitive
description:
name: mime
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
url: "https://pub.dev"
source: hosted
version: "1.0.4"
octo_image:
dependency: transitive
description:
name: octo_image
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
path: path:
dependency: transitive dependency: transitive
description: description:
...@@ -248,6 +464,70 @@ packages: ...@@ -248,6 +464,70 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.3" version: "1.8.3"
path_provider:
dependency: transitive
description:
name: path_provider
sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
pie_chart:
dependency: "direct main"
description:
name: pie_chart
sha256: "58e6a46999ac938bfa1c3e5be414d6e149f037647197dca03ba3614324c12c82"
url: "https://pub.dev"
source: hosted
version: "5.4.0"
platform:
dependency: transitive
description:
name: platform
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
...@@ -272,6 +552,70 @@ packages: ...@@ -272,6 +552,70 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.7" version: "0.2.7"
rxdart:
dependency: transitive
description:
name: rxdart
sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
url: "https://pub.dev"
source: hosted
version: "0.27.7"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
url: "https://pub.dev"
source: hosted
version: "2.3.5"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf
url: "https://pub.dev"
source: hosted
version: "2.2.1"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
...@@ -285,6 +629,30 @@ packages: ...@@ -285,6 +629,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
sqflite:
dependency: transitive
description:
name: sqflite
sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6
url: "https://pub.dev"
source: hosted
version: "2.3.2"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5"
url: "https://pub.dev"
source: hosted
version: "2.5.3"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
...@@ -309,6 +677,14 @@ packages: ...@@ -309,6 +677,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
synchronized:
dependency: transitive
description:
name: synchronized
sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
url: "https://pub.dev"
source: hosted
version: "3.1.0+1"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
...@@ -333,6 +709,78 @@ packages: ...@@ -333,6 +709,78 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.2" version: "1.3.2"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27"
url: "https://pub.dev"
source: hosted
version: "6.1.14"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745
url: "https://pub.dev"
source: hosted
version: "6.3.0"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
url: "https://pub.dev"
source: hosted
version: "6.2.4"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811
url: "https://pub.dev"
source: hosted
version: "3.1.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234
url: "https://pub.dev"
source: hosted
version: "3.1.0"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f
url: "https://pub.dev"
source: hosted
version: "2.3.1"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: ba140138558fcc3eead51a1c42e92a9fb074a1b1149ed3c73e66035b2ccd94f2
url: "https://pub.dev"
source: hosted
version: "2.0.19"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7
url: "https://pub.dev"
source: hosted
version: "3.1.1"
uuid:
dependency: transitive
description:
name: uuid
sha256: "22c94e5ad1e75f9934b766b53c742572ee2677c56bc871d850a57dad0f82127f"
url: "https://pub.dev"
source: hosted
version: "4.2.2"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
...@@ -341,6 +789,62 @@ packages: ...@@ -341,6 +789,62 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
video_player:
dependency: "direct main"
description:
name: video_player
sha256: "74b86e63529cf5885130c639d74cd2f9232e7c8a66cbecbddd1dcb9dbd060d1e"
url: "https://pub.dev"
source: hosted
version: "2.7.2"
video_player_android:
dependency: transitive
description:
name: video_player_android
sha256: "7f8f25d7ad56819a82b2948357f3c3af071f6a678db33833b26ec36bbc221316"
url: "https://pub.dev"
source: hosted
version: "2.4.11"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
sha256: bf1a1322bf68bccd349982ba1f5a41314a3880861fb9a93d25d6d0a2345845f0
url: "https://pub.dev"
source: hosted
version: "2.4.11"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
sha256: "236454725fafcacf98f0f39af0d7c7ab2ce84762e3b63f2cbb3ef9a7e0550bc6"
url: "https://pub.dev"
source: hosted
version: "6.2.2"
video_player_web:
dependency: transitive
description:
name: video_player_web
sha256: "9c34a243785feca23148bfcd772dbb803d63c9304488177ec4f3f4463802fcb7"
url: "https://pub.dev"
source: hosted
version: "2.0.17"
win32:
dependency: transitive
description:
name: win32
sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3"
url: "https://pub.dev"
source: hosted
version: "5.0.9"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
url: "https://pub.dev"
source: hosted
version: "1.0.4"
sdks: sdks:
dart: ">=3.0.1 <4.0.0" dart: ">=3.0.1 <4.0.0"
flutter: ">=3.3.0" flutter: ">=3.10.0"
name: jema_app name: mobile_application_kids
description: A new Flutter project. description: A new Flutter project.
# The following line prevents the package from being accidentally published to # The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages. # pub.dev using `flutter pub publish`. This is preferred for private packages.
...@@ -35,11 +35,17 @@ dependencies: ...@@ -35,11 +35,17 @@ dependencies:
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
image_picker: ^0.8.0
firebase_core: ^2.24.2 firebase_core: ^2.24.2
firebase_auth: ^4.15.3 firebase_auth: ^4.15.3
cloud_firestore: ^4.13.6 cloud_firestore: ^4.13.6
awesome_dialog: ^3.1.0 awesome_dialog: ^3.1.0
image_picker: ^1.0.6
firebase_storage: ^11.6.0
pie_chart: ^5.4.0
video_player: ^2.7.2
shared_preferences: ^2.2.2
url_launcher: ^6.1.14
cached_network_image: ^3.3.1
dev_dependencies: dev_dependencies:
...@@ -82,6 +88,13 @@ flutter: ...@@ -82,6 +88,13 @@ flutter:
- lib/assets/Vector25.png - lib/assets/Vector25.png
- lib/assets/Vector26.png - lib/assets/Vector26.png
- lib/assets/Ellipse 8.png - lib/assets/Ellipse 8.png
- lib/assets/classlogo.png
- lib/assets/ac1.png
- lib/assets/ac2.png
- lib/assets/ac3.png
- lib/assets/ac4.png
- lib/assets/ac5.png
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:jema_app/main.dart'; import 'package:mobile_application_kids/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets('Counter increments smoke test', (WidgetTester tester) async {
......
...@@ -7,17 +7,26 @@ ...@@ -7,17 +7,26 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <cloud_firestore/cloud_firestore_plugin_c_api.h> #include <cloud_firestore/cloud_firestore_plugin_c_api.h>
#include <file_selector_windows/file_selector_windows.h>
#include <firebase_auth/firebase_auth_plugin_c_api.h> #include <firebase_auth/firebase_auth_plugin_c_api.h>
#include <firebase_core/firebase_core_plugin_c_api.h> #include <firebase_core/firebase_core_plugin_c_api.h>
#include <firebase_storage/firebase_storage_plugin_c_api.h>
#include <rive_common/rive_plugin.h> #include <rive_common/rive_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
CloudFirestorePluginCApiRegisterWithRegistrar( CloudFirestorePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("CloudFirestorePluginCApi")); registry->GetRegistrarForPlugin("CloudFirestorePluginCApi"));
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
FirebaseAuthPluginCApiRegisterWithRegistrar( FirebaseAuthPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi")); registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi"));
FirebaseCorePluginCApiRegisterWithRegistrar( FirebaseCorePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FirebaseStoragePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseStoragePluginCApi"));
RivePluginRegisterWithRegistrar( RivePluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("RivePlugin")); registry->GetRegistrarForPlugin("RivePlugin"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
} }
...@@ -4,9 +4,12 @@ ...@@ -4,9 +4,12 @@
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
cloud_firestore cloud_firestore
file_selector_windows
firebase_auth firebase_auth
firebase_core firebase_core
firebase_storage
rive_common rive_common
url_launcher_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment