diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..24476c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..b2f43ad --- /dev/null +++ b/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + base_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + - platform: android + create_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + base_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..2bd7c08 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# ejcsev + +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. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..3f2aba4 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,75 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'com.google.gms.google-services' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 33 + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.vba.ejcsev" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion 20 + targetSdkVersion 33 + multiDexEnabled = true + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation platform('com.google.firebase:firebase-bom:31.2.0') + implementation("androidx.multidex:multidex:2.0.1") + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..159575d --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,47 @@ +{ + "project_info": { + "project_number": "168286810051", + "project_id": "ejcsev-vba", + "storage_bucket": "ejcsev-vba.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:168286810051:android:c6e340309dc4e717dcd776", + "android_client_info": { + "package_name": "com.vba.ejcsev" + } + }, + "oauth_client": [ + { + "client_id": "168286810051-21ir7t79bq6eof5lfcoaue9ek2ukghq8.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.vba.ejcsev", + "certificate_hash": "5d6a425338d6c77b3b7fda0830b4b64c9afdf987" + } + }, + { + "client_id": "168286810051-9lmslu0cogqlhg7jj0pd94q366mmf9ev.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAQDPEnI2XUCVujF8De23Era6C8kpZBWDA" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "168286810051-9lmslu0cogqlhg7jj0pd94q366mmf9ev.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..de275be --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..fd7277c --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/vba/ejcsev/MainActivity.kt b/android/app/src/main/kotlin/com/vba/ejcsev/MainActivity.kt new file mode 100644 index 0000000..1eb7e22 --- /dev/null +++ b/android/app/src/main/kotlin/com/vba/ejcsev/MainActivity.kt @@ -0,0 +1,6 @@ +package com.vba.ejcsev + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..862f6ee --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..b8d3824 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..60c4045 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..6f0e180 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..1fa7609 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..3cfc5c9 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..de275be --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..815e4ac --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.google.gms:google-services:4.3.15' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cb24abd --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/assets/images/background_login.png b/assets/images/background_login.png new file mode 100644 index 0000000..39f9172 Binary files /dev/null and b/assets/images/background_login.png differ diff --git a/assets/images/citation1.jpg b/assets/images/citation1.jpg new file mode 100644 index 0000000..7f7f8c3 Binary files /dev/null and b/assets/images/citation1.jpg differ diff --git a/assets/images/citation2.jpg b/assets/images/citation2.jpg new file mode 100644 index 0000000..ba46381 Binary files /dev/null and b/assets/images/citation2.jpg differ diff --git a/assets/images/citation3.jpg b/assets/images/citation3.jpg new file mode 100644 index 0000000..99c627e Binary files /dev/null and b/assets/images/citation3.jpg differ diff --git a/assets/images/facebook_logo.png b/assets/images/facebook_logo.png new file mode 100644 index 0000000..1e38411 Binary files /dev/null and b/assets/images/facebook_logo.png differ diff --git a/assets/images/gmail_logo.png b/assets/images/gmail_logo.png new file mode 100644 index 0000000..f07c84a Binary files /dev/null and b/assets/images/gmail_logo.png differ diff --git a/assets/images/icon_app.jpg b/assets/images/icon_app.jpg new file mode 100644 index 0000000..da38fc8 Binary files /dev/null and b/assets/images/icon_app.jpg differ diff --git a/assets/images/instagram_logo.png b/assets/images/instagram_logo.png new file mode 100644 index 0000000..9f45a2e Binary files /dev/null and b/assets/images/instagram_logo.png differ diff --git a/assets/images/li.png b/assets/images/li.png new file mode 100644 index 0000000..093716b Binary files /dev/null and b/assets/images/li.png differ diff --git a/assets/images/linkedin_logo.png b/assets/images/linkedin_logo.png new file mode 100644 index 0000000..ec2276b Binary files /dev/null and b/assets/images/linkedin_logo.png differ diff --git a/assets/images/live_page.png b/assets/images/live_page.png new file mode 100644 index 0000000..4f9ca8d Binary files /dev/null and b/assets/images/live_page.png differ diff --git a/assets/images/login_toff.png b/assets/images/login_toff.png new file mode 100644 index 0000000..d988185 Binary files /dev/null and b/assets/images/login_toff.png differ diff --git a/assets/images/logos_home.png b/assets/images/logos_home.png new file mode 100644 index 0000000..2192efe Binary files /dev/null and b/assets/images/logos_home.png differ diff --git a/assets/images/no_connexion.png b/assets/images/no_connexion.png new file mode 100644 index 0000000..65ac0bf Binary files /dev/null and b/assets/images/no_connexion.png differ diff --git a/assets/images/no_living.png b/assets/images/no_living.png new file mode 100644 index 0000000..7f9af2e Binary files /dev/null and b/assets/images/no_living.png differ diff --git a/assets/images/pro_1.jpg b/assets/images/pro_1.jpg new file mode 100644 index 0000000..d39d197 Binary files /dev/null and b/assets/images/pro_1.jpg differ diff --git a/assets/images/pro_2.jpg b/assets/images/pro_2.jpg new file mode 100644 index 0000000..41dec03 Binary files /dev/null and b/assets/images/pro_2.jpg differ diff --git a/assets/images/pro_3.jpg b/assets/images/pro_3.jpg new file mode 100644 index 0000000..8f523b4 Binary files /dev/null and b/assets/images/pro_3.jpg differ diff --git a/assets/images/pro_4.jpg b/assets/images/pro_4.jpg new file mode 100644 index 0000000..d89cd25 Binary files /dev/null and b/assets/images/pro_4.jpg differ diff --git a/assets/images/pro_5.jpg b/assets/images/pro_5.jpg new file mode 100644 index 0000000..d521989 Binary files /dev/null and b/assets/images/pro_5.jpg differ diff --git a/assets/images/slide 44x.svg b/assets/images/slide 44x.svg new file mode 100644 index 0000000..ec156e5 --- /dev/null +++ b/assets/images/slide 44x.svg @@ -0,0 +1,3239 @@ + + + + + + diff --git a/assets/images/slide1.png b/assets/images/slide1.png new file mode 100644 index 0000000..68086b5 Binary files /dev/null and b/assets/images/slide1.png differ diff --git a/assets/images/slide11.png b/assets/images/slide11.png new file mode 100644 index 0000000..4b43f10 Binary files /dev/null and b/assets/images/slide11.png differ diff --git a/assets/images/slide22.jpg b/assets/images/slide22.jpg new file mode 100644 index 0000000..624675a Binary files /dev/null and b/assets/images/slide22.jpg differ diff --git a/assets/images/slide4.png b/assets/images/slide4.png new file mode 100644 index 0000000..362e719 Binary files /dev/null and b/assets/images/slide4.png differ diff --git a/assets/images/slide44.png b/assets/images/slide44.png new file mode 100644 index 0000000..23640bb Binary files /dev/null and b/assets/images/slide44.png differ diff --git a/assets/images/slide444.png b/assets/images/slide444.png new file mode 100644 index 0000000..5cba3e1 Binary files /dev/null and b/assets/images/slide444.png differ diff --git a/assets/images/slide44x.jpg b/assets/images/slide44x.jpg new file mode 100644 index 0000000..e5719aa Binary files /dev/null and b/assets/images/slide44x.jpg differ diff --git a/assets/images/slide5.png b/assets/images/slide5.png new file mode 100644 index 0000000..689c5c8 Binary files /dev/null and b/assets/images/slide5.png differ diff --git a/assets/images/slide55.png b/assets/images/slide55.png new file mode 100644 index 0000000..bd28588 Binary files /dev/null and b/assets/images/slide55.png differ diff --git a/assets/images/slide6.png b/assets/images/slide6.png new file mode 100644 index 0000000..7359121 Binary files /dev/null and b/assets/images/slide6.png differ diff --git a/assets/images/slider1.jpg b/assets/images/slider1.jpg new file mode 100644 index 0000000..1622b0b Binary files /dev/null and b/assets/images/slider1.jpg differ diff --git a/assets/images/slider2.jpg b/assets/images/slider2.jpg new file mode 100644 index 0000000..ccf9305 Binary files /dev/null and b/assets/images/slider2.jpg differ diff --git a/assets/images/splash_screen.jpg b/assets/images/splash_screen.jpg new file mode 100644 index 0000000..be44ad0 Binary files /dev/null and b/assets/images/splash_screen.jpg differ diff --git a/assets/images/twitter_logo.png b/assets/images/twitter_logo.png new file mode 100644 index 0000000..6427c81 Binary files /dev/null and b/assets/images/twitter_logo.png differ diff --git a/assets/images/youtube_logo.png b/assets/images/youtube_logo.png new file mode 100644 index 0000000..f30a4d7 Binary files /dev/null and b/assets/images/youtube_logo.png differ diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..ce0bb87 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,29 @@ +import 'package:ejcsev/screens/splash_screen.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_fonts/google_fonts.dart'; + +void main() async{ + WidgetsFlutterBinding.ensureInitialized(); + SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( + statusBarColor: Colors.transparent + )); + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + textTheme: GoogleFonts.openSansTextTheme(), + primarySwatch: Colors.blue, + ), + home: const SplashScreen(), + ); + } +} + diff --git a/lib/screens/global_app.dart b/lib/screens/global_app.dart new file mode 100644 index 0000000..b389824 --- /dev/null +++ b/lib/screens/global_app.dart @@ -0,0 +1,52 @@ +import 'package:ejcsev/screens/globals/playlist_page.dart'; +import 'package:ejcsev/screens/globals/profil.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'globals/direct_page.dart'; +import 'globals/programme_page.dart'; + +class GlobalApp extends StatefulWidget { + const GlobalApp({Key? key}) : super(key: key); + + @override + State createState() => _GlobalAppState(); +} + +class _GlobalAppState extends State { + int i = 0; + void clicked(int j) { + setState(() { + i = j; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + i == 0 ? Expanded(child: DirectPage()) : Container(), + i == 1 ? Expanded(child: PlayListPage()) : Container(), + i == 2 ? const Expanded(child: ProgrammePage()) : Container(), + i == 3 ? Expanded(child: ProfilPage()) : Container(), + ], + ), + bottomNavigationBar: BottomNavigationBar( + type: BottomNavigationBarType.fixed, + currentIndex: i, + onTap: clicked, + showUnselectedLabels: false, + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.home_filled), label: "Acceuil"), + BottomNavigationBarItem( + icon: Icon(Icons.video_collection), label: "Playlists"), + BottomNavigationBarItem( + icon: Icon(Icons.calendar_month), label: "Programme"), + BottomNavigationBarItem( + icon: Icon(Icons.settings), label: "Parametres"), + ], + ), + ); + } +} diff --git a/lib/screens/globals/direct_page.dart b/lib/screens/globals/direct_page.dart new file mode 100644 index 0000000..a8c03f1 --- /dev/null +++ b/lib/screens/globals/direct_page.dart @@ -0,0 +1,334 @@ +import 'dart:async'; +import 'dart:convert'; +import 'package:ejcsev/screens/globals/souspages/live.dart'; +import 'package:ejcsev/screens/globals/souspages/message_page.dart'; +import 'package:ejcsev/screens/globals/souspages/no_live.dart'; +import 'package:ejcsev/screens/globals/souspages/videos_playlist_page.dart'; +import 'package:flutter/material.dart'; +import 'package:carousel_nullsafety/carousel_nullsafety.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:http/http.dart' as http; +import 'package:flutter_carousel_widget/flutter_carousel_widget.dart'; + +class DirectPage extends StatefulWidget { + DirectPage({Key? key}) : super(key: key); + + @override + State createState() => _DirectPageState(); +} + +class _DirectPageState extends State { + String? code; + List items = ["citation1.jpg", "citation2.jpg", "citation3.jpg"]; + String url = + "https://api.airtable.com/v0/appO9A4qyRkO5HbJs/live?maxRecords=3&view=Grid%20view"; + Map headers = {"Authorization": "Bearer key8goi88RW8ugb2B"}; + void getCode() async { + var response = await http.get(Uri.parse(url), headers: headers); + if (response.statusCode == 200) { + var data = jsonDecode(response.body); + code = data["records"][0]["fields"]["code"]; + print(data); + setState(() {}); + } + } + + CodePass() { + Timer(const Duration(seconds: 5), () { + Navigator.pop(context); + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => code == null ? const NoLive() : Live(code: code!), + )); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Container( + width: 200, + height: 97.83, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/logos_home.png"), + fit: BoxFit.fill), + ), + ), + elevation: 0.0, + centerTitle: true, + toolbarHeight: 70, + ), + body: Container( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + child: Column( + children: [ + Container( + width: double.infinity, + color: Colors.red, + height: 60, + child: Container( + margin: const EdgeInsets.only(left: 20, right: 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Image.asset( + "assets/images/li.png", + width: 80, + height: 70, + )), + Container( + width: 190, + height: 30, + child: ElevatedButton( + style: const ButtonStyle( + backgroundColor: + MaterialStatePropertyAll(Colors.white), + elevation: MaterialStatePropertyAll(0.0)), + onPressed: () { + getCode(); + showDialog( + context: context, + builder: (context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0)), + content: SizedBox( + height: 100, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Center( + child: CircularProgressIndicator( + backgroundColor: Colors.blue, + color: Colors.white, + ), + ), + const SizedBox( + height: 10, + ), + Text( + "Accès au live en cours...", + style: GoogleFonts.openSans( + color: const Color(0xFF303030), + fontSize: 18, + fontWeight: FontWeight.w600), + ) + ], + ), + ), + ); + }, + ); + CodePass(); + }, + child: const Text( + "Suivre le direct", + style: TextStyle(color: Colors.red), + ), + ), + ) + ], + ), + ), + ), + Expanded( + child: ListView( + shrinkWrap: true, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height / 4, + child: const Carousel( + images: [ + AssetImage( + "assets/images/slider1.jpg", + ), + AssetImage( + "assets/images/slider2.jpg", + ), + AssetImage( + "assets/images/slide11.png", + ), + ], + animationDuration: Duration(seconds: 1), + boxFit: BoxFit.fill, + overlayShadow: false, + showIndicator: false, + animationCurve: Curves.easeOutQuad, + )), + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height / 4, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/slide44x.jpg"), + fit: BoxFit.fill + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + margin: const EdgeInsets.only(right: 20), + child: RichText( + textAlign: TextAlign.end, + text: const TextSpan( + style: TextStyle( + fontSize: 17, + color: Colors.blue, + ), + children: [ + TextSpan(text: "Méssage de bienvenue \n"), + TextSpan( + text: "du Couple Pastoral ", + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.blue)), + ]), + ), + ), + const SizedBox( + height: 10, + ), + Container( + margin: const EdgeInsets.only(right: 20), + width: 190, + height: 30, + child: ElevatedButton( + style: const ButtonStyle( + elevation: MaterialStatePropertyAll(0.0)), + onPressed: () { + Navigator.of(context).push(MaterialPageRoute(builder: (context) => const MessagePage(),)); + }, + child: const Text( + "Lire", + style: TextStyle(color: Colors.white), + ), + ), + ) + ], + ), + ), + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height / 4, + decoration: const BoxDecoration( + color: Colors.black, + image: DecorationImage( + image: AssetImage("assets/images/slide55.png"), + fit: BoxFit.fill), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + margin: const EdgeInsets.only(right: 20), + child: RichText( + textAlign: TextAlign.end, + text: const TextSpan( + style: TextStyle( + fontSize: 17, + ), + children: [ + TextSpan(text: "Découvrez "), + TextSpan( + text: + "l'oeuvre de DIEU \nau sein du Ministère ", + style: TextStyle( + fontWeight: FontWeight.bold)), + ]), + ), + ), + const SizedBox( + height: 10, + ), + Container( + margin: const EdgeInsets.only(right: 20), + width: 190, + height: 30, + child: ElevatedButton( + style: const ButtonStyle( + backgroundColor: + MaterialStatePropertyAll(Colors.white), + elevation: MaterialStatePropertyAll(0.0)), + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => VideosPlaylistPage( + playlistTitle: "Témoignages", + playlistId: + "PLAeIvKzUZNRs67iOSzJTOs9y5bMt09DxL", + ), + )); + }, + child: const Text( + "Suivre les témoignages", + style: TextStyle( + color: Colors.red, + fontWeight: FontWeight.w700), + ), + ), + ) + ], + ), + ), + InkWell( + onTap: () {}, + child: Stack( + children: [ + SizedBox( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height / 7.5, + child: Image.asset( + "assets/images/slide6.png", + height: 50, + fit: BoxFit.fill, + ), + ), + // Positioned(child: Icon(Icons.)) + ], + ), + ), + SizedBox( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height / 4, + child: FlutterCarousel( + items: List.generate(items.length, (index) => Card( + elevation: 5.0, + child: Container( + padding: const EdgeInsets.only(right: 40), + height: 100, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.red, + image: DecorationImage( + image: AssetImage("assets/images/${items[index]}"), + fit: BoxFit.cover + ) + ), + ), + )), + options: CarouselOptions( + autoPlayAnimationDuration: const Duration(seconds: 1), + autoPlayInterval: const Duration(seconds: 6), + autoPlay: true, + showIndicator: false, + padEnds: true, + enlargeCenterPage: false, + enableInfiniteScroll: true + ), + ) + ), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/screens/globals/no_connexion.dart b/lib/screens/globals/no_connexion.dart new file mode 100644 index 0000000..6940c29 --- /dev/null +++ b/lib/screens/globals/no_connexion.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class NoConnexion extends StatelessWidget { + const NoConnexion({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + decoration: const BoxDecoration( + color: Colors.white, + ), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + "assets/images/no_connexion.png", + width: 150, + ), + SizedBox( + height: 15, + ), + const Text( + "Pas de connexion internet", + style: TextStyle(fontSize: 25), + ), + SizedBox( + height: 10, + ), + TextButton( + onPressed: () { + SystemChannels.platform.invokeMethod('SystemNavigator.pop'); + }, + child: Text( + "Sortir", + style: TextStyle(color: Colors.red), + )) + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/globals/playlist_page.dart b/lib/screens/globals/playlist_page.dart new file mode 100644 index 0000000..614d930 --- /dev/null +++ b/lib/screens/globals/playlist_page.dart @@ -0,0 +1,106 @@ +import 'package:ejcsev/screens/globals/souspages/videos_playlist_page.dart'; +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:googleapis/youtube/v3.dart'; +import 'package:googleapis_auth/auth_io.dart'; + +class PlayListPage extends StatefulWidget { + const PlayListPage({Key? key}) : super(key: key); + + @override + State createState() => _PlayListPageState(); +} + +class _PlayListPageState extends State { + var apiKey = 'AIzaSyD2f7keTVvog-l-Kt_NWowb05FRwctg50k'; + //var channelId = 'UCeY0bbntWzzVIaj2z3QigXg'; + var channelId = 'UCDaIrBK-GVHEZPjJoRUrfVg'; + late final YouTubeApi youtube; + + List playlists = []; + + @override + void initState() { + super.initState(); + + youtube = YouTubeApi(clientViaApiKey(apiKey)); + getPlaylists(); + } + + Future getPlaylists() async { + var playlists = await youtube.playlists.list( + ['snippet', 'contentDetails', 'id'], + channelId: channelId, maxResults: 25); + setState(() { + this.playlists = playlists.items ?? []; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Color(0xFFF5F5F7), + appBar: AppBar( + title: Text( + "Playlists", + style: GoogleFonts.openSans(fontWeight: FontWeight.bold), + ), + actions: [ + Container( + margin: const EdgeInsets.only(right: 15), + child: const Icon( + Icons.video_collection, + size: 30, + )) + ], + elevation: 0.0, + ), + body: GridView.count( + crossAxisCount: 2, + crossAxisSpacing: 0, + mainAxisSpacing: 0, + childAspectRatio: 0.9, + children: List.generate(playlists.length, (index) { + final playlist = playlists[index]; + return Card( + elevation: 3.0, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0)), + child: InkWell( + onTap: () { + print("${playlist.id}"); + Navigator.of(context).push(MaterialPageRoute(builder: (context) => VideosPlaylistPage(playlistId: playlist.id.toString(),playlistTitle: playlist.snippet!.title.toString(),),)); + }, + child: Column( + children: [ + Expanded( + flex: 2, + child: Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.only(topRight: Radius.circular(5),topLeft: Radius.circular(5),), + image: DecorationImage( + image: NetworkImage(playlist.snippet?.thumbnails?.high?.url ?? '',), + fit: BoxFit.cover + ) + ), + ), + ), + Expanded( + child: Center( + child: Text("${playlist.snippet?.title!.toUpperCase()}" ?? '',style: GoogleFonts.openSans( + fontSize: 17, + fontWeight: FontWeight.bold,color: Color(0xFF303030)), + overflow: TextOverflow.ellipsis, + maxLines: 2, + ), + ), + ), + ], + ), + ), + ); + }), + ), + ); + } +} diff --git a/lib/screens/globals/profil.dart b/lib/screens/globals/profil.dart new file mode 100644 index 0000000..4ee2627 --- /dev/null +++ b/lib/screens/globals/profil.dart @@ -0,0 +1,182 @@ +import 'package:ejcsev/screens/globals/souspages/about.dart'; +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:share/share.dart'; +import '../../widgets/founctions.dart'; + +class ProfilPage extends StatefulWidget { + ProfilPage({Key? key}) : super(key: key); + + @override + State createState() => _ProfilPageState(); +} + +class _ProfilPageState extends State { + @override + Widget build(BuildContext context) { + + return Scaffold( + body: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/background_login.png"), + fit: BoxFit.fill)), + child: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + color: Colors.white, + child: Stack( + children: [ + Column( + children: [ + Container( + height: MediaQuery.of(context).size.height / 2.9, + width: double.infinity, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/images/background_login.png"), + fit: BoxFit.fill)), + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + + CircleAvatar( + backgroundImage: + AssetImage("assets/images/icon_app.jpg"), + radius: 60, + ), + SizedBox( + height: 10, + ), + Container( + width: double.infinity, + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: 8.0), + child: Text( + "Eglise Jesus Christ Source d'Eau Vie", + style: TextStyle( + fontSize: 25, + color: Colors.white, + fontWeight: FontWeight.bold + ), + textAlign: TextAlign.center, + ), + ), + ], + ), + )), + Container( + margin: EdgeInsets.symmetric(horizontal: 20), + color: Colors.white, + child: Padding( + padding: EdgeInsets.all(10.0), + child: Column( + children: [ + Container( + child: ListTile( + onTap: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => const AboutPage(), + )); + }, + leading:const Icon( + Icons.info_outline, + color: Colors.lightBlueAccent, + ), + title: Text("A propos de EJCSEV"), + ), + ), + Divider(height: 10,color:Colors.black ,), + SizedBox(height: 10,), + Container( + child: ListTile( + onTap: () { + Share.share( + 'Altaïr VBA tu est trop bon. Respect'); + }, + leading: const Icon( + Icons.share, + color: Colors.lightBlueAccent, + ), + title: Text("Partager"), + ), + ), + Divider(height: 10,color: Colors.black,) + ], + ), + ), + ), + const SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("Suivez nous sur : ",style: GoogleFonts.openSans(fontWeight: FontWeight.bold),), + SizedBox(width: 10,), + InkWell( + onTap: () => + Fonction().goUrl(url: "https://www.youtube.com/@eglisejesus-christsourcede1603"), + child: Image.asset( + "assets/images/youtube_logo.png", + width: 35, + ), + ), + SizedBox(width: 10,), + InkWell( + onTap: () => + Fonction().goUrl(url: "https://www.facebook.com/ejcsev"), + child: Image.asset( + "assets/images/facebook_logo.png", + width: 35, + ), + ), + ], + ), + const SizedBox( + height: 20, + ), + ], + ), + // Positioned( + // right: 0, + // left: 0, + // bottom: MediaQuery.of(context).size.height/8, + // child: Padding( + // padding: const EdgeInsets.only(left: 30, right: 30), + // child: SizedBox( + // height: 40, + // width: MediaQuery.of(context).size.width, + // child: ElevatedButton.icon( + // style: ButtonStyle( + // elevation: MaterialStatePropertyAll(0.0), + // shape: MaterialStatePropertyAll(RoundedRectangleBorder(borderRadius: BorderRadius.circular(4.0))) + // ), + // onPressed: () { + // Auths().logOut(); + // Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => LoginPage(),)); + // }, + // label:const Text( + // "Se déconnecter", + // style: TextStyle(fontSize: 18), + // ), + // icon:const Icon( + // Icons.logout, + // size: 25, + // ), + // ), + // ), + // ), + // ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/globals/programme_page.dart b/lib/screens/globals/programme_page.dart new file mode 100644 index 0000000..3a6382a --- /dev/null +++ b/lib/screens/globals/programme_page.dart @@ -0,0 +1,325 @@ +import 'dart:async'; +import 'package:carousel_nullsafety/carousel_nullsafety.dart'; +import 'package:ejcsev/screens/globals/souspages/map_page.dart'; +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +class ProgrammePage extends StatefulWidget { + const ProgrammePage({Key? key}) : super(key: key); + + @override + State createState() => _ProgrammePageState(); +} + +class _ProgrammePageState extends State { + final Completer _controller = Completer(); + + String valueT = "pointe-noire"; + + List programList = []; + + List> listPosition = [ + { + "annexeName": "Pointe-Noire", + "annexeProgram": [ + "slide4.png", + "slide5.png", + "slide6.png", + ], + "annexeMap": { + "lat": -4.8176264, + "long": 11.8695326, + }, + }, + { + "annexeName": "Paris", + "annexeProgram": [ + "pro_4.jpg", + "slider1.jpg", + "slider2.jpg", + ], + "annexeMap": { + "lat": 48.8583764, + "long": 2.142055, + }, + }, + { + "annexeName": "Oyo", + "annexeProgram": [ + "slide444.png", + "slide55.png", + "slide1.png", + "pro_3.jpg" + ], + "annexeMap": { + "lat": -4.2615394, + "long": 15.2120594, + }, + }, + ]; + double lat = 0.0; + double long = 0.0; + String annexeName = ""; + int i = 0; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + "Programmes", + style: GoogleFonts.openSans(fontWeight: FontWeight.bold), + ), + elevation: 0.0, + actions: [ + Container( + margin: const EdgeInsets.only(right: 15), + child: const Icon( + Icons.calendar_month, + size: 30, + )) + ], + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.all(5.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + // color: Colors.grey + ), + height: 50, + margin: const EdgeInsets.only(top: 10, left: 5.0, right: 10), + child: Container( + padding: const EdgeInsets.all(8.0), + decoration: BoxDecoration( + color: Colors.grey.shade200, + borderRadius: BorderRadius.circular(5.0)), + child: DropdownButton( + enableFeedback: true, + borderRadius: BorderRadius.zero, + underline: const Text(""), + hint: const Text( + "Selectionner une region", + style: TextStyle(color: Colors.black), + ), + isExpanded: true, + value: valueT, + icon: const Icon(Icons.location_on_sharp), + items: List.generate( + listPosition.length, + (index) { + switch (valueT) { + case "pointe-noire": + setState(() { + i = 0; + programList = listPosition[0]["annexeProgram"]; + lat = listPosition[0]["annexeMap"]["lat"]; + long = listPosition[0]["annexeMap"]["long"]; + annexeName = listPosition[0]["annexeName"]; + print("La liste de Pn : $programList"); + }); + break; + case "paris": + setState(() { + i = 1; + programList = listPosition[1]["annexeProgram"]; + lat = listPosition[1]["annexeMap"]["lat"]; + long = listPosition[1]["annexeMap"]["long"]; + annexeName = listPosition[1]["annexeName"]; + print("La liste de Paris : $programList"); + }); + break; + case "oyo": + setState(() { + i = 2; + programList = listPosition[2]["annexeProgram"]; + lat = listPosition[2]["annexeMap"]["lat"]; + long = listPosition[2]["annexeMap"]["long"]; + annexeName = listPosition[2]["annexeName"]; + print("La liste de oyo : $programList"); + }); + break; + default: + setState(() { + i = 0; + programList = listPosition[0]["annexeProgram"]; + lat = listPosition[0]["annexeMap"]["lat"]; + long = listPosition[0]["annexeMap"]["long"]; + annexeName = listPosition[0]["annexeName"]; + print("La liste de Pn : $programList"); + }); + } + return DropdownMenuItem( + child: Text("${listPosition[index]["annexeName"]}"), + value: + "${listPosition[index]["annexeName"].toString().toLowerCase()}", + ); + }, + ), + onChanged: (value) { + setState(() { + valueT = value!; + print("la valeur actuel est de : $valueT"); + }); + }, + ), + ), + ), + Container( + margin: const EdgeInsets.only(top: 10, bottom: 10, left: 10), + child: Text( + "Nos activités hebdomadaires", + style: GoogleFonts.openSans( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + textAlign: TextAlign.start, + ), + ), + Container( + padding: const EdgeInsets.symmetric(vertical: 2), + width: double.infinity, + height: MediaQuery.of(context).size.height / 3.8, + child: const Carousel( + boxFit: BoxFit.fill, + // images: List.generate(programList.length, (index) { + // return AssetImage("assets/images/${programList[0]}"); + // }), + images: [ + AssetImage("assets/images/pro_1.jpg"), + AssetImage("assets/images/pro_2.jpg"), + AssetImage("assets/images/pro_3.jpg"), + AssetImage("assets/images/pro_4.jpg"), + AssetImage("assets/images/pro_5.jpg"), + ], + showIndicator: false, + ), + ), + const SizedBox( + height: 10, + ), + Expanded( + child: Column( + children: [ + i == 0 ? Expanded(child: SizedBox( + child: GoogleMap( + markers: Set.of([ + Marker( + markerId: MarkerId("Pointe - Noire"), + position: LatLng(-4.8176264, 11.8695326), + infoWindow: InfoWindow( + title: "EJCSEV", + snippet: "Pointe - Noire", + ), + ), + ]), + mapType: MapType.normal, + initialCameraPosition: CameraPosition( + target: LatLng(-4.8176264, 11.8695326), + zoom: 10.643167, + ), + onMapCreated: (GoogleMapController controller) { + _controller.complete(controller); + }, + ), + ),) : Container(), + + i == 1 ? Expanded(child: SizedBox( + child: GoogleMap( + markers: Set.of([ + Marker( + markerId: MarkerId("Paris"), + position: LatLng(48.8583764, 2.142055), + infoWindow: InfoWindow( + title: "EJCSEV", + snippet: "Paris", + ), + ), + ]), + mapType: MapType.normal, + initialCameraPosition: CameraPosition( + target: LatLng(48.8583764, 2.142055), + zoom: 10.643167, + ), + onMapCreated: (GoogleMapController controller) { + _controller.complete(controller); + }, + ), + ),) : Container(), + + i == 2 ? Expanded(child: SizedBox( + child: GoogleMap( + markers: Set.of([ + Marker( + markerId: MarkerId("Oyo"), + position: LatLng(-4.2615394, 15.2120594), + infoWindow: InfoWindow( + title: "EJCSEV", + snippet: "Oyo", + ), + ), + ]), + mapType: MapType.normal, + initialCameraPosition: CameraPosition( + target: LatLng(-4.2615394, 15.2120594), + zoom: 10.643167, + ), + onMapCreated: (GoogleMapController controller) { + _controller.complete(controller); + }, + ), + ),) : Container(), + ], + ) + ,), + // Expanded( + // child: SizedBox( + // child: GoogleMap( + // markers: Set.of([ + // Marker( + // markerId: MarkerId(annexeName), + // position: LatLng(lat, long), + // infoWindow: InfoWindow( + // title: "EJCSEV", + // snippet: annexeName, + // ), + // ), + // ]), + // mapType: MapType.normal, + // initialCameraPosition: CameraPosition( + // target: LatLng(lat, long), + // zoom: 10.643167, + // ), + // onMapCreated: (GoogleMapController controller) { + // _controller.complete(controller); + // }, + // ), + // ), + // ), + ], + ), + floatingActionButton: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FloatingActionButton.extended( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => MapPage( + city: annexeName, + lat: lat, + long: long, + zoom: 10.643167), + )); + }, + label: const Text("Agrandir"), + ), + ], + ), + ); + } +} diff --git a/lib/screens/globals/souspages/about.dart b/lib/screens/globals/souspages/about.dart new file mode 100644 index 0000000..fa1f760 --- /dev/null +++ b/lib/screens/globals/souspages/about.dart @@ -0,0 +1,85 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class AboutPage extends StatelessWidget { + const AboutPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Stack( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + padding: const EdgeInsets.all(10.0), + color: Colors.lightBlueAccent, + width: double.infinity, + height: MediaQuery.of(context).size.height / 2.9, + child: Center( + child: Image.asset("assets/images/login_toff.png"), + ), + ), + SizedBox(height: 17.0,), + Expanded( + child: SingleChildScrollView( + child: Container( + margin: EdgeInsets.all(20.0), + child:RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: + GoogleFonts.openSans(color: Colors.black, fontSize: 17), + children: [ + const TextSpan(text: "A PROPOS DE EJCSEV\n"), + const TextSpan(text: "\n"), + TextSpan(text: "Notre Vision\n",style: GoogleFonts.openSans(fontWeight: FontWeight.bold)), + const TextSpan(text: "\n"), + const TextSpan(text: "L'éternel déclara dans Mathieu au Chapitre 28: 19-20\n"), + const TextSpan(text: '\n'), + const TextSpan( + text: + "Allez faites de toutes les nations des disciples, les baptisant au nom du "), + TextSpan(text: 'Père, du Fils et du Saint Esprit...\n',style: GoogleFonts.openSans(fontWeight: FontWeight.bold)), + const TextSpan(text: '\n'), + const TextSpan( + text: + "Puisse cette demande de l'éternel soit une source de lumière pour vous qui recevrer le "), + TextSpan( + text: "Seigneur Jésus Christ ", + style: GoogleFonts.openSans( + fontWeight: FontWeight.bold)), + const TextSpan(text: " dans vos vie. "), + const TextSpan( + text: + "Imaginez Dieu vous répondre en vous attirant près de lui et en vous étreignant dans sa grâce!\n"), + const TextSpan( + text: + "Son désir est de vous faire connaître sa présence, il est un Dieu de proximité. Imaginez qu’il vous sourit de plaisir et qu’il est rempli d’affection pour vous, alors même qu’il vous bénit.\n"), + const TextSpan(text: '\n'), + const TextSpan( + text: + "Que la vraie paix qui ne vient que de Dieu, vous accompagne, celle qui offre une plénitude intérieure quelles que soient les circonstances.\n"), + ]), + ), + ), + ), + ), + ], + ), + Positioned( + top: 30, + left: 0, + width: 100, + child: IconButton( + onPressed: (){ + Navigator.pop(context); + }, + icon: Icon(Icons.arrow_back,color: Colors.white,size: 30), + ),), + ], + ), + ); + } +} diff --git a/lib/screens/globals/souspages/live.dart b/lib/screens/globals/souspages/live.dart new file mode 100644 index 0000000..91742c4 --- /dev/null +++ b/lib/screens/globals/souspages/live.dart @@ -0,0 +1,123 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; +class Live extends StatefulWidget { + final String code; + const Live({Key? key,required this.code}) : super(key: key); + + @override + State createState() => _LiveState(); +} + +class _LiveState extends State { + // void initState() { + // super.initState(); + // SystemChrome.setPreferredOrientations([ + // DeviceOrientation.landscapeLeft, + // DeviceOrientation.landscapeRight, + // ]); + // } + // + // @override + // void dispose() { + // SystemChrome.setPreferredOrientations([ + // DeviceOrientation.portraitUp, + // DeviceOrientation.portraitDown, + // ]); + // super.dispose(); + // } + late YoutubePlayerController _controller; + late TextEditingController _idController; + late TextEditingController _seekToController; + + late PlayerState _playerState; + late YoutubeMetaData _videoMetaData; + bool _isPlayerReady = false; + + + @override + void initState() { + super.initState(); + _controller = YoutubePlayerController( + initialVideoId: widget.code, + flags: const YoutubePlayerFlags( + mute: false, + autoPlay: true, + disableDragSeek: false, + loop: false, + isLive: false, + forceHD: false, + enableCaption: true, + ), + )..addListener(listener); + _idController = TextEditingController(); + _seekToController = TextEditingController(); + _videoMetaData = const YoutubeMetaData(); + _playerState = PlayerState.unknown; + } + + void listener() { + if (_isPlayerReady && mounted && !_controller.value.isFullScreen) { + setState(() { + _playerState = _controller.value.playerState; + _videoMetaData = _controller.metadata; + }); + } + } + + @override + void deactivate() { + _controller.pause(); + super.deactivate(); + } + + @override + void dispose() { + _controller.dispose(); + _idController.dispose(); + _seekToController.dispose(); + super.dispose(); + } + @override + Widget build(BuildContext context) { + return YoutubePlayerBuilder( + player: YoutubePlayer( + controller: _controller, + showVideoProgressIndicator: true, + progressIndicatorColor: Colors.red, + topActions: [ + const SizedBox(width: 8.0), + Expanded( + child: Text( + _controller.metadata.title, + style: const TextStyle( + color: Colors.white, + fontSize: 18.0, + ), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ], + onReady: () { + _isPlayerReady = true; + }, + ), + builder: (context, player) => Scaffold( + appBar: AppBar( + // backgroundColor: Colors.black, + title: Text( + "Le direct", + style: GoogleFonts.openSans(color: Colors.white,fontSize: 16), + ), + ), + body: ListView( + children: [ + player, + ], + ), + ), + ); +} +} diff --git a/lib/screens/globals/souspages/map_page.dart b/lib/screens/globals/souspages/map_page.dart new file mode 100644 index 0000000..2c2b91a --- /dev/null +++ b/lib/screens/globals/souspages/map_page.dart @@ -0,0 +1,55 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +class MapPage extends StatefulWidget { + double lat, long, zoom; + String city; + MapPage( + {Key? key, + required this.city, + required this.lat, + required this.long, + required this.zoom}) + : super(key: key); + + @override + State createState() => _MapPageState(); +} + +class _MapPageState extends State { + final Completer _controller = + Completer(); + MapType mapType = MapType.normal; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + elevation: 0.0, + title: Text( + "Lieu de culte - ${widget.city}", + ), + ), + body: GoogleMap( + mapType: mapType, + initialCameraPosition: CameraPosition( + target: LatLng(widget.lat, widget.long), + zoom: widget.zoom, + ), + markers: Set.of([ + Marker( + markerId: MarkerId("VBA"), + position: LatLng(widget.lat, widget.long), + infoWindow: InfoWindow( + title: "EJCSEV", + snippet: "${widget.city}", + ), + ), + ]), + onMapCreated: (GoogleMapController controller) { + _controller.complete(controller); + }, + ), + ); + } +} diff --git a/lib/screens/globals/souspages/message_page.dart b/lib/screens/globals/souspages/message_page.dart new file mode 100644 index 0000000..b5a8221 --- /dev/null +++ b/lib/screens/globals/souspages/message_page.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; + +class MessagePage extends StatefulWidget { + const MessagePage({Key? key}) : super(key: key); + + @override + State createState() => _MessagePageState(); +} + +class _MessagePageState extends State { +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// appBar: AppBar( +// title: const Text("Message de bienvenue"), +// ), +// body: Column( +// children: [ +// YoutubePlayer(controller: YoutubePlayerController( +// initialVideoId: "yEgN9gfkugw", +// flags: YoutubePlayerFlags( +// autoPlay: true +// ) +// )) +// ], +// ), +// ); +// } +// } + late YoutubePlayerController _controller; + late TextEditingController _idController; + late TextEditingController _seekToController; + + late PlayerState _playerState; + late YoutubeMetaData _videoMetaData; + bool _isPlayerReady = false; + + + @override + void initState() { + super.initState(); + _controller = YoutubePlayerController( + initialVideoId: "yEgN9gfkugw", + flags: const YoutubePlayerFlags( + mute: false, + autoPlay: true, + disableDragSeek: false, + loop: false, + isLive: false, + forceHD: false, + enableCaption: true, + ), + )..addListener(listener); + _idController = TextEditingController(); + _seekToController = TextEditingController(); + _videoMetaData = const YoutubeMetaData(); + _playerState = PlayerState.unknown; + } + + void listener() { + if (_isPlayerReady && mounted && !_controller.value.isFullScreen) { + setState(() { + _playerState = _controller.value.playerState; + _videoMetaData = _controller.metadata; + }); + } + } + + @override + void deactivate() { + _controller.pause(); + super.deactivate(); + } + + @override + void dispose() { + _controller.dispose(); + _idController.dispose(); + _seekToController.dispose(); + super.dispose(); + } + @override + Widget build(BuildContext context) { + return YoutubePlayerBuilder( + player: YoutubePlayer( + controller: _controller, + showVideoProgressIndicator: true, + progressIndicatorColor: Colors.red, + topActions: [ + const SizedBox(width: 8.0), + Expanded( + child: Text( + _controller.metadata.title, + style: const TextStyle( + color: Colors.white, + fontSize: 18.0, + ), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ], + onReady: () { + _isPlayerReady = true; + }, + ), + builder: (context, player) => Scaffold( + appBar: AppBar( + // backgroundColor: Colors.black, + title: Text( + "Message de bienvenue", + style: GoogleFonts.openSans(color: Colors.white,fontSize: 16), + ), + ), + backgroundColor: Colors.grey.shade200, + body: Column( + children: [ + Card(elevation: 15.0,child: player), + ], + ), + ), + ); + } + } \ No newline at end of file diff --git a/lib/screens/globals/souspages/no_live.dart b/lib/screens/globals/souspages/no_live.dart new file mode 100644 index 0000000..59a5e95 --- /dev/null +++ b/lib/screens/globals/souspages/no_live.dart @@ -0,0 +1,24 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class NoLive extends StatelessWidget { + const NoLive({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title:const Text("Pas de direct "), + ), + body: Center( + child: Column( + children: [ + Image.asset("assets/images/no_living.png"), + SizedBox(height: 10,), + Text("Pas de Direct pour l'instant...",style: TextStyle(fontSize: 20,fontWeight: FontWeight.w500),) + ], + ), + ), + ); + } +} diff --git a/lib/screens/globals/souspages/page_view.dart b/lib/screens/globals/souspages/page_view.dart new file mode 100644 index 0000000..c3fed29 --- /dev/null +++ b/lib/screens/globals/souspages/page_view.dart @@ -0,0 +1,143 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class PageViewVideo extends StatefulWidget { + String ytInit; + String videoName; + String desc; + PageViewVideo({Key? key, required this.ytInit,required this.videoName,required this.desc}) : super(key: key); + + @override + State createState() => _PageViewVideoState(); +} + +class _PageViewVideoState extends State { + + late YoutubePlayerController _controller; + late TextEditingController _idController; + late TextEditingController _seekToController; + + late PlayerState _playerState; + late YoutubeMetaData _videoMetaData; + bool _isPlayerReady = false; + + + @override + void initState() { + super.initState(); + _controller = YoutubePlayerController( + initialVideoId: widget.ytInit, + flags: const YoutubePlayerFlags( + mute: false, + autoPlay: true, + disableDragSeek: false, + loop: false, + isLive: false, + forceHD: false, + enableCaption: true, + ), + )..addListener(listener); + _idController = TextEditingController(); + _seekToController = TextEditingController(); + _videoMetaData = const YoutubeMetaData(); + _playerState = PlayerState.unknown; + } + + void listener() { + if (_isPlayerReady && mounted && !_controller.value.isFullScreen) { + setState(() { + _playerState = _controller.value.playerState; + _videoMetaData = _controller.metadata; + }); + } + } + + @override + void deactivate() { + _controller.pause(); + super.deactivate(); + } + + @override + void dispose() { + _controller.dispose(); + _idController.dispose(); + _seekToController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return YoutubePlayerBuilder( + player: YoutubePlayer( + controller: _controller, + showVideoProgressIndicator: true, + progressIndicatorColor: Colors.red, + topActions: [ + const SizedBox(width: 8.0), + Expanded( + child: Text( + _controller.metadata.title, + style: const TextStyle( + color: Colors.white, + fontSize: 18.0, + ), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ], + onReady: () { + _isPlayerReady = true; + }, + ), + builder: (context, player) => Scaffold( + appBar: AppBar( + backgroundColor: Colors.black, + title: Text( + widget.videoName, + style: GoogleFonts.openSans(color: Colors.white,fontSize: 16), + ), + ), + body: ListView( + children: [ + player, + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _text('Titre', widget.videoName), + _text('Description', widget.desc), + ], + ), + ), + ], + ), + ), + ); + } + + Widget _text(String title, String value) { + return RichText( + text: TextSpan( + text: '$title : ', + style: GoogleFonts.openSans( + color: Colors.black, + fontWeight: FontWeight.bold, + ), + children: [ + TextSpan( + text: value, + style: GoogleFonts.openSans( + color: Colors.black, + fontWeight: FontWeight.w300, + ), + ), + ], + ), + ); + } + } \ No newline at end of file diff --git a/lib/screens/globals/souspages/videos_playlist_page.dart b/lib/screens/globals/souspages/videos_playlist_page.dart new file mode 100644 index 0000000..9ec3c17 --- /dev/null +++ b/lib/screens/globals/souspages/videos_playlist_page.dart @@ -0,0 +1,122 @@ +import 'dart:convert'; +import 'package:ejcsev/screens/globals/souspages/page_view.dart'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'package:google_fonts/google_fonts.dart'; + +class VideosPlaylistPage extends StatefulWidget { + String playlistId; + String playlistTitle; + VideosPlaylistPage({Key? key,required this.playlistId,required this.playlistTitle}) : super(key: key); + + @override + State createState() => _VideosPlaylistPageState(); +} + +class _VideosPlaylistPageState extends State { + final apiKey = 'AIzaSyD2f7keTVvog-l-Kt_NWowb05FRwctg50k'; + final _playlistItems = >[]; + final _scrollController = ScrollController(); + var _nextPageToken = ''; + + @override + void initState() { + super.initState(); + _fetchPlaylistItems(); + } + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + Future _fetchPlaylistItems() async { + final url = Uri.https( + 'www.googleapis.com', + '/youtube/v3/playlistItems', + { + 'part': 'snippet', + 'playlistId': widget.playlistId, + 'maxResults': '50', + 'key': apiKey, + 'pageToken': _nextPageToken, + }, + ); + + final response = await http.get(url); + + final json = jsonDecode(response.body); + + setState(() { + _playlistItems.addAll((json['items'] as List).map((item) { + final snippet = item['snippet']; + return { + 'videoId': snippet['resourceId']['videoId'].toString(), + 'title': snippet['title'].toString(), + 'description': snippet['description'].toString(), + 'thumbnailUrl': snippet['thumbnails']['high']['url'].toString(), + }; + })); + _nextPageToken = json['nextPageToken'] ?? ''; + }); + } + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Color(0xFFF5F5F5), + appBar: AppBar( + title: Text(widget.playlistTitle,style: GoogleFonts.openSans(),), + elevation: 0.0, + ), + body: GridView.count( + crossAxisCount: 2, + crossAxisSpacing: 0, + mainAxisSpacing: 0, + childAspectRatio: 0.9, + children: List.generate(_playlistItems.length + 1, (index) { + if (index < _playlistItems.length) { + final video = _playlistItems[index]; + return Card( + elevation: 3.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5.0) + ), + child: InkWell( + onTap: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => + PageViewVideo(ytInit: video["videoId"],videoName: video["title"],desc: video["description"],), + )); + }, + child: Column( + children: [ + ClipRRect( + borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0),topRight: Radius.circular(5.0),), + child: Image.network(video['thumbnailUrl'])), + Expanded( + child: Center( + child: Text( + video['title'], + style: GoogleFonts.openSans(fontSize: 15,), + overflow: TextOverflow.ellipsis, + maxLines: 2, + ), + ), + ), + ], + ), + ), + ); + } else if (_nextPageToken.isNotEmpty) { + return const Center( + child: CircularProgressIndicator(), + ); + } else { + return const SizedBox(); + } + }), + ), + ); + } +} \ No newline at end of file diff --git a/lib/screens/splash_screen.dart b/lib/screens/splash_screen.dart new file mode 100644 index 0000000..fbf1bb2 --- /dev/null +++ b/lib/screens/splash_screen.dart @@ -0,0 +1,49 @@ +import 'dart:async'; +import 'package:ejcsev/screens/global_app.dart'; +import 'package:flutter/material.dart'; + +class SplashScreen extends StatefulWidget { + const SplashScreen({Key? key}) : super(key: key); + + @override + State createState() => _SplashScreenState(); +} + +class _SplashScreenState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + Timer(const Duration(seconds: 3),() { + Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => const GlobalApp(),), (route) => false); + },); + } + + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + height: double.infinity, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/splash_screen.jpg"), + fit: BoxFit.cover, + )), + child: Stack( + children: [ + Positioned( + bottom: 100, + left: 50, + right: 50, + child: Center( + child: CircularProgressIndicator( + color: Colors.white, + backgroundColor: Colors.blueGrey[200], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/widgets/founctions.dart b/lib/widgets/founctions.dart new file mode 100644 index 0000000..7bbfeb8 --- /dev/null +++ b/lib/widgets/founctions.dart @@ -0,0 +1,16 @@ +import 'package:url_launcher/url_launcher.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + +class Fonction{ + Fonction(); + void goUrl({required String url})async { + if (await canLaunchUrl(Uri.parse(url))) { + await launchUrlString(url, + mode: LaunchMode.externalApplication, + webViewConfiguration:const WebViewConfiguration( + enableJavaScript: true, + ) + ); + } + } +} \ No newline at end of file diff --git a/lib/widgets/widgets.dart b/lib/widgets/widgets.dart new file mode 100644 index 0000000..dc4d703 --- /dev/null +++ b/lib/widgets/widgets.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; + +Widget ButtonLogin({required BuildContext context,required String text,required String imagePath,required Function onPress}){ + return InkWell( + onTap: (){ + onPress(); + }, + child: SizedBox(height: 40, + width: MediaQuery.of(context).size.width/1.2, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5.0), + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Image.asset("$imagePath",width: 25,), + Text("$text",style: TextStyle( + fontSize: 16, + ),), + const SizedBox(width: 10,), + ], + ), + ), + ), + ); +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..baaa303 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,698 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _discoveryapis_commons: + dependency: transitive + description: + name: _discoveryapis_commons + sha256: efd530ec09e3fea98529b0d2b192495e252e336c6e93ea8df1875e6e823ebc62 + url: "https://pub.dev" + source: hosted + version: "1.0.5" + archive: + dependency: transitive + description: + name: archive + sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + url: "https://pub.dev" + source: hosted + version: "3.3.6" + args: + dependency: transitive + description: + name: args + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + carousel_nullsafety: + dependency: "direct main" + description: + name: carousel_nullsafety + sha256: f1c4a6dce00da87b1ab466e04db4351073f39891d7d5714cd2a53d62fc3eff4a + url: "https://pub.dev" + source: hosted + version: "0.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" + source: hosted + version: "0.3.5" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "8875e8ed511a49f030e313656154e4bbbcef18d68dfd32eb853fac10bce48e96" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + url: "https://pub.dev" + source: hosted + version: "1.2.4" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + url: "https://pub.dev" + source: hosted + version: "1.0.5" + dbus: + dependency: transitive + description: + name: dbus + sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + url: "https://pub.dev" + source: hosted + version: "0.7.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_carousel_widget: + dependency: "direct main" + description: + name: flutter_carousel_widget + sha256: "5949354a4940a450df16097934cd7117acd419ced4399c1f6faa1027eb907fbd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + flutter_inappwebview: + dependency: transitive + description: + name: flutter_inappwebview + sha256: f73505c792cf083d5566e1a94002311be497d984b5607f25be36d685cf6361cf + url: "https://pub.dev" + source: hosted + version: "5.7.2+3" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c + url: "https://pub.dev" + source: hosted + version: "0.11.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + url: "https://pub.dev" + source: hosted + version: "2.0.1" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "60fc7b78455b94e6de2333d2f95196d32cf5c22f4b0b0520a628804cb463503b" + url: "https://pub.dev" + source: hosted + version: "2.0.7" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: "927573f2e8a8d65c17931e21918ad0ab0666b1b636537de7c4932bdb487b190f" + url: "https://pub.dev" + source: hosted + version: "4.0.3" + google_maps_flutter: + dependency: "direct main" + description: + name: google_maps_flutter + sha256: "0c6b72b4b1e0f6204973e2b40868a75fe6380725d498f215cd7e35ed920d1c57" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + google_maps_flutter_android: + dependency: transitive + description: + name: google_maps_flutter_android + sha256: f238a04c378df6fbe7d84a3ea19362e9db19ea1717d06deffa9edaa17973e916 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + google_maps_flutter_ios: + dependency: transitive + description: + name: google_maps_flutter_ios + sha256: "33bbca8d4148ed373251ea2ec2344fdc63009926b6d6be71a0854fd42409b1ba" + url: "https://pub.dev" + source: hosted + version: "2.1.13" + google_maps_flutter_platform_interface: + dependency: transitive + description: + name: google_maps_flutter_platform_interface + sha256: "0967430c25240836b794d42336bd4c61f0e78e9fd33d1365fa9316bb36b6b410" + url: "https://pub.dev" + source: hosted + version: "2.2.5" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: "821f354c053d51a2d417b02d42532a19a6ea8057d2f9ebb8863c07d81c98aaf9" + url: "https://pub.dev" + source: hosted + version: "5.4.4" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: "612bf44d5de01f32bf127ea1c8114281075c7a39f621d1e34cf70aa069840c5c" + url: "https://pub.dev" + source: hosted + version: "6.1.6" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: "1116aff5e87f89837b052a81abe6259be7c4dd418275786864d27b74cb2a4e70" + url: "https://pub.dev" + source: hosted + version: "5.5.1" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "61306213c76bb8170c3aa20017df296c0131c24d7f6c0cc7e2eeaeac34c9f457" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: "75cc41ebc53b1756320ee14d9c3018ad3e6cea298147dbcd86e9d0c8d6720b40" + url: "https://pub.dev" + source: hosted + version: "0.10.2+1" + googleapis: + dependency: "direct main" + description: + name: googleapis + sha256: "0af31e6aba9c6a72ee9c6fd02cb10813ed16d34bbd392b500fb147d64558f95d" + url: "https://pub.dev" + source: hosted + version: "10.1.0" + googleapis_auth: + dependency: "direct main" + description: + name: googleapis_auth + sha256: "127b1bbd32170ab8312f503bd57f1d654d8e4039ddfbc63c027d3f7ade0eff74" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + http: + dependency: "direct main" + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + url: "https://pub.dev" + source: hosted + version: "2.0.13" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e" + url: "https://pub.dev" + source: hosted + version: "2.0.23" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a" + url: "https://pub.dev" + source: hosted + version: "2.1.9" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + quiver: + dependency: transitive + description: + name: quiver + sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + url: "https://pub.dev" + source: hosted + version: "3.2.1" + share: + dependency: "direct main" + description: + name: share + sha256: "97e6403f564ed1051a01534c2fc919cb6e40ea55e60a18ec23cee6e0ce19f4be" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b + url: "https://pub.dev" + source: hosted + version: "6.1.9" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" + url: "https://pub.dev" + source: hosted + version: "6.0.23" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" + url: "https://pub.dev" + source: hosted + version: "2.0.14" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 + url: "https://pub.dev" + source: hosted + version: "3.0.3" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + win32: + dependency: transitive + description: + name: win32 + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + xml: + dependency: transitive + description: + name: xml + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb + url: "https://pub.dev" + source: hosted + version: "6.1.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + youtube_player_flutter: + dependency: "direct main" + description: + name: youtube_player_flutter + sha256: "72d487e1a1b9155a2dc9d448c137380791101a0ff623723195275ac275ac6942" + url: "https://pub.dev" + source: hosted + version: "8.1.2" +sdks: + dart: ">=2.18.4 <3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..4dc0fb7 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,61 @@ +name: ejcsev +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +version: 1.0.0+1 + +environment: + sdk: '>=2.18.4 <3.0.0' + + +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + google_sign_in: ^5.4.4 + url_launcher: ^6.1.9 + share: ^2.0.4 + google_maps_flutter: ^2.2.3 + http: ^0.13.5 + youtube_player_flutter: + connectivity_plus: ^3.0.3 + googleapis: ^10.1.0 + googleapis_auth: ^1.3.1 + google_fonts: ^4.0.3 + flutter_carousel_widget: ^2.1.0 + carousel_nullsafety: ^0.1.1 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_launcher_icons: ^0.11.0 + + flutter_lints: ^2.0.0 +flutter_icons: + android: true + image_path: "assets/images/icon_app.jpg" +flutter: + + uses-material-design: true + + assets: + - assets/images/ + +# fonts: +# - family: Schyler +# fonts: +# - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700