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