├── .github
└── FUNDING.yml
├── .gitignore
├── .metadata
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── elearning
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── fonts
│ ├── BoxIcons.ttf
│ ├── RedHatDisplay-Black.ttf
│ ├── RedHatDisplay-BlackItalic.ttf
│ ├── RedHatDisplay-Bold.ttf
│ ├── RedHatDisplay-BoldItalic.ttf
│ ├── RedHatDisplay-Italic.ttf
│ ├── RedHatDisplay-Medium.ttf
│ ├── RedHatDisplay-MediumItalic.ttf
│ └── RedHatDisplay-Regular.ttf
└── images
│ ├── 1.png
│ ├── 2.png
│ ├── Coin.png
│ ├── CoinSmall.png
│ ├── crown.png
│ ├── logo.png
│ ├── navwave.png
│ ├── user.png
│ ├── video.jpg
│ └── wave.png
├── demo
├── Frame 1.png
└── Screen
│ ├── Calendar.png
│ ├── Forum.png
│ ├── Help.png
│ ├── Home.png
│ ├── Home
│ ├── Overlay.png
│ ├── Search.png
│ └── Search
│ │ └── Results.png
│ ├── NavDrawer.png
│ ├── Onboarding
│ ├── 1.png
│ ├── 2.png
│ └── 3.png
│ ├── Profile.png
│ ├── Settings.png
│ ├── Stats
│ ├── Global.png
│ └── Local.png
│ ├── Subjects
│ ├── Close.png
│ └── Open.png
│ ├── Test.png
│ ├── Video
│ └── Open.png
│ └── Videos.png
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── lib
├── analytics
│ └── analytics_service.dart
├── auth
│ └── google_auth.dart
├── global
│ └── globals.dart
├── main.dart
├── routes
│ ├── router.dart
│ └── routing_constants.dart
├── theme
│ ├── box_icons_icons.dart
│ ├── config.dart
│ ├── theme.dart
│ └── themeModel.dart
└── ui
│ ├── pages
│ ├── home.dart
│ ├── leaderboard.dart
│ ├── navmenu
│ │ ├── dashboard.dart
│ │ ├── menu.dart
│ │ └── menu_dashboard_layout.dart
│ ├── onboarding1.dart
│ ├── planner.dart
│ ├── undefinedScreen.dart
│ ├── video.dart
│ └── videos.dart
│ └── widgets
│ ├── card.dart
│ ├── overlay.dart
│ ├── sectionHeader.dart
│ ├── statsCard.dart
│ ├── topBar.dart
│ └── videoCard.dart
├── pubspec.lock
├── pubspec.yaml
└── test
└── widget_test.dart
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | custom: ['https://www.buymeacoffee.com/HashStudios']
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | .dart_tool/
26 | .flutter-plugins
27 | .flutter-plugins-dependencies
28 | .packages
29 | .pub-cache/
30 | .pub/
31 | /build/
32 |
33 | # Web related
34 | lib/generated_plugin_registrant.dart
35 |
36 | # Symbolication related
37 | app.*.symbols
38 |
39 | # Obfuscation related
40 | app.*.map.json
41 |
42 | # Exceptions to above rules.
43 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
44 | android/app/google-services.json
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 1ad9baa8b99a2897c20f9e6e54d3b9b359ade314
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to e-learning-app
2 | We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
3 |
4 | - Reporting a bug
5 | - Discussing the current state of the code
6 | - Submitting a fix
7 | - Proposing new features
8 | - Becoming a maintainer
9 |
10 | ## We Develop with Github
11 | We use github to host code, to track issues and feature requests, as well as accept pull requests.
12 |
13 | ## We Use [Github Flow](https://guides.github.com/introduction/flow/index.html), So All Code Changes Happen Through Pull Requests
14 | Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://guides.github.com/introduction/flow/index.html)). We actively welcome your pull requests:
15 |
16 | 1. Fork the repo and create your branch from `master`.
17 | 2. If you've added code that should be tested, add tests.
18 | 3. If you've changed APIs, update the documentation.
19 | 4. Ensure the test suite passes.
20 | 5. Make sure your code lints.
21 | 6. Issue that pull request!
22 |
23 | ## Any contributions you make will be under the BSD-3 Software License
24 | In short, when you submit code changes, your submissions are understood to be under the same [BSD-3 License](https://choosealicense.com/licenses/bsd-3-clause/) that covers the project. Feel free to contact the maintainers if that's a concern.
25 |
26 | ## Report bugs using Github's [issues](https://github.com/Hash-Studios/e-learning-app/issues)
27 | We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/Hash-Studios/e-learning-app/issues/new); it's that easy!
28 |
29 | ## Write bug reports with detail, background, and sample code
30 | **Great Bug Reports** tend to have:
31 |
32 | - A quick summary and/or background
33 | - Steps to reproduce
34 | - Be specific!
35 | - Give sample code if you can.
36 | - What you expected would happen
37 | - What actually happens
38 | - Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
39 |
40 | People *love* thorough bug reports. We're not even kidding.
41 |
42 | ## Use a Consistent Coding Style
43 | * Use DART formatter
44 |
45 | ## License
46 | By contributing, you agree that your contributions will be licensed under its BSD-3 License.
47 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2020 Hash Studios
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | 3. Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #
E-Learning
2 |
3 | E-Learn is a beautiful open-source education app for Android. It is built with Dart on top of Google's Flutter Framework.
4 |
5 |
6 | ## List of Contents
7 |
8 | 1. [Demo](#demo)
9 | 2. [Support](#support)
10 | 3. [Dependencies](#dependencies)
11 | 4. [Usage](#usage)
12 | 5. [Contributing](#contributing)
13 | 6. [License](#license)
14 | 7. [Contributors](#contributors)
15 |
16 | ## Demo
17 |
18 | **Screens**
19 |
20 | |  |  |  |  |  |
21 | | :-------------: | :-------------: | :-------------: | :-------------: | :-------------: |
22 | | Explore | Planner | Overlay | Videos | Leaderboard |
23 |
24 |
25 | |  |  |  |  |  |
26 | | :-------------: | :-------------: | :-------------: | :-------------: | :-------------: |
27 | | Global Leaderboard | NavDrawer | Search | Search Results | Profile |
28 |
29 |
30 | |  | |  |  | |
31 | | :-------------: | :-------------: | :-------------: | :-------------: | :-------------: |
32 | | Onboarding 1 | Onboarding 2 | Sign-in Screen | Subjects Close | Subjects Close |
33 |
34 | |  |  |  |  |  |
35 | | :-------------: | :-------------: | :-------------: | :-------------: | :-------------: |
36 | | Video Info | Forum | Help | Settings | Test |
37 |
38 |
39 | ## Support
40 |
41 | If you like what we do, and would want to help us continue doing it, consider sponsoring this project.
42 |
43 |
44 |
45 | ## Dependencies
46 |
47 | The following packages are needed for the development of this application.
48 |
49 | - `provider: ^4.1.3` for caching data, and state management
50 | - `fluttertoast: ^4.0.1` for toast notifications
51 | - `shared_preferences: ^0.5.7` for storing settings like app state
52 | - `firebase_core: ^0.4.4+3` for firebase core
53 | - `firebase_auth: ^0.16.0` for user auth
54 | - `google_sign_in: ^4.4.4` for Google sign in support
55 | - `flare_splash_screen: ^3.0.1` for the animated splash screen
56 | - `flutter_svg: 0.17.4` for svg assets
57 | - `firebase_analytics: ^5.0.16` for analytics
58 |
59 | More details about these can be found in the [`pubspec.yaml`](https://github.com/Hash-Studios/e-learning-app/tree/master/pubspec.yaml) file.
60 |
61 | ## Usage
62 |
63 | More information about the releases can be found in the [Release](https://github.com/Hash-Studios/e-learning-app/releases) tab.
64 |
65 | ## Contributing
66 |
67 | First off, thank you for considering contributing to e-learning app. It's people like you that make e-learning app such a great app.
68 |
69 | To start your lovely journey with e-learning app, first read the [`contributing guidelines`](https://github.com/Hash-Studios/e-learning-app/tree/master/CONTRIBUTING.md) and then fork the repo to start contributing!
70 |
71 | ## License
72 |
73 | This app is licensed under the [`BSD 3-Clause License`](https://github.com/Hash-Studios/e-learning-app/tree/master/LICENSE.txt).
74 | Any Usage of the source code must follow the below license.
75 |
76 | ```
77 | BSD 3-Clause License
78 |
79 | Copyright (c) 2020 Hash Studios
80 | All rights reserved.
81 |
82 | Redistribution and use in source and binary forms, with or without
83 | modification, are permitted provided that the following conditions are met:
84 |
85 | 1. Redistributions of source code must retain the above copyright notice, this
86 | list of conditions and the following disclaimer.
87 |
88 | 2. Redistributions in binary form must reproduce the above copyright notice,
89 | this list of conditions and the following disclaimer in the documentation
90 | and/or other materials provided with the distribution.
91 |
92 | 3. Neither the name of the copyright holder nor the names of its
93 | contributors may be used to endorse or promote products derived from
94 | this software without specific prior written permission.
95 |
96 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
97 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
98 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
99 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
100 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
101 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
102 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
103 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
104 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
105 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
106 | ```
107 |
108 | ```
109 | DISCLAIMER: Google Play and the Google Play logo are trademarks of Google LLC.
110 | ```
111 |
112 | ## Contributors
113 |
114 |
115 |
116 |
117 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'com.google.gms.google-services'
26 | apply plugin: 'kotlin-android'
27 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
28 |
29 | android {
30 | compileSdkVersion 28
31 |
32 | sourceSets {
33 | main.java.srcDirs += 'src/main/kotlin'
34 | }
35 |
36 | lintOptions {
37 | disable 'InvalidPackage'
38 | }
39 |
40 | defaultConfig {
41 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
42 | applicationId "com.example.elearning"
43 | minSdkVersion 16
44 | targetSdkVersion 28
45 | versionCode flutterVersionCode.toInteger()
46 | versionName flutterVersionName
47 | multiDexEnabled true
48 | }
49 |
50 | buildTypes {
51 | release {
52 | // TODO: Add your own signing config for the release build.
53 | // Signing with the debug keys for now, so `flutter run --release` works.
54 | signingConfig signingConfigs.debug
55 | }
56 | }
57 | }
58 |
59 | flutter {
60 | source '../..'
61 | }
62 |
63 | dependencies {
64 | implementation 'com.google.firebase:firebase-analytics:17.2.2'
65 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
66 | }
67 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
8 |
12 |
19 |
23 |
27 |
32 |
36 |
37 |
38 |
39 |
40 |
41 |
43 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/elearning/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.elearning
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.5.0'
10 | classpath 'com.google.gms:google-services:4.3.3'
11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | google()
18 | jcenter()
19 | }
20 | }
21 |
22 | rootProject.buildDir = '../build'
23 | subprojects {
24 | project.buildDir = "${rootProject.buildDir}/${project.name}"
25 | }
26 | subprojects {
27 | project.evaluationDependsOn(':app')
28 | }
29 |
30 | task clean(type: Delete) {
31 | delete rootProject.buildDir
32 | }
33 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Flutter Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style license that can be
3 | // found in the LICENSE file.
4 |
5 | include ':app'
6 |
7 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
8 | def properties = new Properties()
9 |
10 | assert localPropertiesFile.exists()
11 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
12 |
13 | def flutterSdkPath = properties.getProperty("flutter.sdk")
14 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
15 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
16 |
--------------------------------------------------------------------------------
/assets/fonts/BoxIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/BoxIcons.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-Black.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-BlackItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-Italic.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-MediumItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/RedHatDisplay-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/fonts/RedHatDisplay-Regular.ttf
--------------------------------------------------------------------------------
/assets/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/1.png
--------------------------------------------------------------------------------
/assets/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/2.png
--------------------------------------------------------------------------------
/assets/images/Coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/Coin.png
--------------------------------------------------------------------------------
/assets/images/CoinSmall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/CoinSmall.png
--------------------------------------------------------------------------------
/assets/images/crown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/crown.png
--------------------------------------------------------------------------------
/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/logo.png
--------------------------------------------------------------------------------
/assets/images/navwave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/navwave.png
--------------------------------------------------------------------------------
/assets/images/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/user.png
--------------------------------------------------------------------------------
/assets/images/video.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/video.jpg
--------------------------------------------------------------------------------
/assets/images/wave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/assets/images/wave.png
--------------------------------------------------------------------------------
/demo/Frame 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Frame 1.png
--------------------------------------------------------------------------------
/demo/Screen/Calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Calendar.png
--------------------------------------------------------------------------------
/demo/Screen/Forum.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Forum.png
--------------------------------------------------------------------------------
/demo/Screen/Help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Help.png
--------------------------------------------------------------------------------
/demo/Screen/Home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Home.png
--------------------------------------------------------------------------------
/demo/Screen/Home/Overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Home/Overlay.png
--------------------------------------------------------------------------------
/demo/Screen/Home/Search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Home/Search.png
--------------------------------------------------------------------------------
/demo/Screen/Home/Search/Results.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Home/Search/Results.png
--------------------------------------------------------------------------------
/demo/Screen/NavDrawer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/NavDrawer.png
--------------------------------------------------------------------------------
/demo/Screen/Onboarding/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Onboarding/1.png
--------------------------------------------------------------------------------
/demo/Screen/Onboarding/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Onboarding/2.png
--------------------------------------------------------------------------------
/demo/Screen/Onboarding/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Onboarding/3.png
--------------------------------------------------------------------------------
/demo/Screen/Profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Profile.png
--------------------------------------------------------------------------------
/demo/Screen/Settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Settings.png
--------------------------------------------------------------------------------
/demo/Screen/Stats/Global.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Stats/Global.png
--------------------------------------------------------------------------------
/demo/Screen/Stats/Local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Stats/Local.png
--------------------------------------------------------------------------------
/demo/Screen/Subjects/Close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Subjects/Close.png
--------------------------------------------------------------------------------
/demo/Screen/Subjects/Open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Subjects/Open.png
--------------------------------------------------------------------------------
/demo/Screen/Test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Test.png
--------------------------------------------------------------------------------
/demo/Screen/Video/Open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Video/Open.png
--------------------------------------------------------------------------------
/demo/Screen/Videos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/demo/Screen/Videos.png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXCopyFilesBuildPhase section */
19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
20 | isa = PBXCopyFilesBuildPhase;
21 | buildActionMask = 2147483647;
22 | dstPath = "";
23 | dstSubfolderSpec = 10;
24 | files = (
25 | );
26 | name = "Embed Frameworks";
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXCopyFilesBuildPhase section */
30 |
31 | /* Begin PBXFileReference section */
32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | /* End PBXFrameworksBuildPhase section */
56 |
57 | /* Begin PBXGroup section */
58 | 9740EEB11CF90186004384FC /* Flutter */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
65 | );
66 | name = Flutter;
67 | sourceTree = "";
68 | };
69 | 97C146E51CF9000F007C117D = {
70 | isa = PBXGroup;
71 | children = (
72 | 9740EEB11CF90186004384FC /* Flutter */,
73 | 97C146F01CF9000F007C117D /* Runner */,
74 | 97C146EF1CF9000F007C117D /* Products */,
75 | );
76 | sourceTree = "";
77 | };
78 | 97C146EF1CF9000F007C117D /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 97C146EE1CF9000F007C117D /* Runner.app */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 97C146F01CF9000F007C117D /* Runner */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
92 | 97C147021CF9000F007C117D /* Info.plist */,
93 | 97C146F11CF9000F007C117D /* Supporting Files */,
94 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
95 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
96 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
97 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
98 | );
99 | path = Runner;
100 | sourceTree = "";
101 | };
102 | 97C146F11CF9000F007C117D /* Supporting Files */ = {
103 | isa = PBXGroup;
104 | children = (
105 | );
106 | name = "Supporting Files";
107 | sourceTree = "";
108 | };
109 | /* End PBXGroup section */
110 |
111 | /* Begin PBXNativeTarget section */
112 | 97C146ED1CF9000F007C117D /* Runner */ = {
113 | isa = PBXNativeTarget;
114 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
115 | buildPhases = (
116 | 9740EEB61CF901F6004384FC /* Run Script */,
117 | 97C146EA1CF9000F007C117D /* Sources */,
118 | 97C146EB1CF9000F007C117D /* Frameworks */,
119 | 97C146EC1CF9000F007C117D /* Resources */,
120 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
121 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
122 | );
123 | buildRules = (
124 | );
125 | dependencies = (
126 | );
127 | name = Runner;
128 | productName = Runner;
129 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
130 | productType = "com.apple.product-type.application";
131 | };
132 | /* End PBXNativeTarget section */
133 |
134 | /* Begin PBXProject section */
135 | 97C146E61CF9000F007C117D /* Project object */ = {
136 | isa = PBXProject;
137 | attributes = {
138 | LastUpgradeCheck = 1020;
139 | ORGANIZATIONNAME = "";
140 | TargetAttributes = {
141 | 97C146ED1CF9000F007C117D = {
142 | CreatedOnToolsVersion = 7.3.1;
143 | LastSwiftMigration = 1100;
144 | };
145 | };
146 | };
147 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
148 | compatibilityVersion = "Xcode 9.3";
149 | developmentRegion = en;
150 | hasScannedForEncodings = 0;
151 | knownRegions = (
152 | en,
153 | Base,
154 | );
155 | mainGroup = 97C146E51CF9000F007C117D;
156 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
157 | projectDirPath = "";
158 | projectRoot = "";
159 | targets = (
160 | 97C146ED1CF9000F007C117D /* Runner */,
161 | );
162 | };
163 | /* End PBXProject section */
164 |
165 | /* Begin PBXResourcesBuildPhase section */
166 | 97C146EC1CF9000F007C117D /* Resources */ = {
167 | isa = PBXResourcesBuildPhase;
168 | buildActionMask = 2147483647;
169 | files = (
170 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
171 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
172 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
173 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
174 | );
175 | runOnlyForDeploymentPostprocessing = 0;
176 | };
177 | /* End PBXResourcesBuildPhase section */
178 |
179 | /* Begin PBXShellScriptBuildPhase section */
180 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
181 | isa = PBXShellScriptBuildPhase;
182 | buildActionMask = 2147483647;
183 | files = (
184 | );
185 | inputPaths = (
186 | );
187 | name = "Thin Binary";
188 | outputPaths = (
189 | );
190 | runOnlyForDeploymentPostprocessing = 0;
191 | shellPath = /bin/sh;
192 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
193 | };
194 | 9740EEB61CF901F6004384FC /* Run Script */ = {
195 | isa = PBXShellScriptBuildPhase;
196 | buildActionMask = 2147483647;
197 | files = (
198 | );
199 | inputPaths = (
200 | );
201 | name = "Run Script";
202 | outputPaths = (
203 | );
204 | runOnlyForDeploymentPostprocessing = 0;
205 | shellPath = /bin/sh;
206 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
207 | };
208 | /* End PBXShellScriptBuildPhase section */
209 |
210 | /* Begin PBXSourcesBuildPhase section */
211 | 97C146EA1CF9000F007C117D /* Sources */ = {
212 | isa = PBXSourcesBuildPhase;
213 | buildActionMask = 2147483647;
214 | files = (
215 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
216 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
217 | );
218 | runOnlyForDeploymentPostprocessing = 0;
219 | };
220 | /* End PBXSourcesBuildPhase section */
221 |
222 | /* Begin PBXVariantGroup section */
223 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
224 | isa = PBXVariantGroup;
225 | children = (
226 | 97C146FB1CF9000F007C117D /* Base */,
227 | );
228 | name = Main.storyboard;
229 | sourceTree = "";
230 | };
231 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
232 | isa = PBXVariantGroup;
233 | children = (
234 | 97C147001CF9000F007C117D /* Base */,
235 | );
236 | name = LaunchScreen.storyboard;
237 | sourceTree = "";
238 | };
239 | /* End PBXVariantGroup section */
240 |
241 | /* Begin XCBuildConfiguration section */
242 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
243 | isa = XCBuildConfiguration;
244 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
245 | buildSettings = {
246 | ALWAYS_SEARCH_USER_PATHS = NO;
247 | CLANG_ANALYZER_NONNULL = YES;
248 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
249 | CLANG_CXX_LIBRARY = "libc++";
250 | CLANG_ENABLE_MODULES = YES;
251 | CLANG_ENABLE_OBJC_ARC = YES;
252 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
253 | CLANG_WARN_BOOL_CONVERSION = YES;
254 | CLANG_WARN_COMMA = YES;
255 | CLANG_WARN_CONSTANT_CONVERSION = YES;
256 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
257 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
258 | CLANG_WARN_EMPTY_BODY = YES;
259 | CLANG_WARN_ENUM_CONVERSION = YES;
260 | CLANG_WARN_INFINITE_RECURSION = YES;
261 | CLANG_WARN_INT_CONVERSION = YES;
262 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
263 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
264 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
265 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
266 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
267 | CLANG_WARN_STRICT_PROTOTYPES = YES;
268 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
269 | CLANG_WARN_UNREACHABLE_CODE = YES;
270 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
271 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
272 | COPY_PHASE_STRIP = NO;
273 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
274 | ENABLE_NS_ASSERTIONS = NO;
275 | ENABLE_STRICT_OBJC_MSGSEND = YES;
276 | GCC_C_LANGUAGE_STANDARD = gnu99;
277 | GCC_NO_COMMON_BLOCKS = YES;
278 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
279 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
280 | GCC_WARN_UNDECLARED_SELECTOR = YES;
281 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
282 | GCC_WARN_UNUSED_FUNCTION = YES;
283 | GCC_WARN_UNUSED_VARIABLE = YES;
284 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
285 | MTL_ENABLE_DEBUG_INFO = NO;
286 | SDKROOT = iphoneos;
287 | SUPPORTED_PLATFORMS = iphoneos;
288 | TARGETED_DEVICE_FAMILY = "1,2";
289 | VALIDATE_PRODUCT = YES;
290 | };
291 | name = Profile;
292 | };
293 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
294 | isa = XCBuildConfiguration;
295 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
296 | buildSettings = {
297 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
298 | CLANG_ENABLE_MODULES = YES;
299 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
300 | ENABLE_BITCODE = NO;
301 | FRAMEWORK_SEARCH_PATHS = (
302 | "$(inherited)",
303 | "$(PROJECT_DIR)/Flutter",
304 | );
305 | INFOPLIST_FILE = Runner/Info.plist;
306 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
307 | LIBRARY_SEARCH_PATHS = (
308 | "$(inherited)",
309 | "$(PROJECT_DIR)/Flutter",
310 | );
311 | PRODUCT_BUNDLE_IDENTIFIER = com.example.elearning;
312 | PRODUCT_NAME = "$(TARGET_NAME)";
313 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
314 | SWIFT_VERSION = 5.0;
315 | VERSIONING_SYSTEM = "apple-generic";
316 | };
317 | name = Profile;
318 | };
319 | 97C147031CF9000F007C117D /* Debug */ = {
320 | isa = XCBuildConfiguration;
321 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
322 | buildSettings = {
323 | ALWAYS_SEARCH_USER_PATHS = NO;
324 | CLANG_ANALYZER_NONNULL = YES;
325 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
326 | CLANG_CXX_LIBRARY = "libc++";
327 | CLANG_ENABLE_MODULES = YES;
328 | CLANG_ENABLE_OBJC_ARC = YES;
329 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
330 | CLANG_WARN_BOOL_CONVERSION = YES;
331 | CLANG_WARN_COMMA = YES;
332 | CLANG_WARN_CONSTANT_CONVERSION = YES;
333 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
334 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
335 | CLANG_WARN_EMPTY_BODY = YES;
336 | CLANG_WARN_ENUM_CONVERSION = YES;
337 | CLANG_WARN_INFINITE_RECURSION = YES;
338 | CLANG_WARN_INT_CONVERSION = YES;
339 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
340 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
341 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
342 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
343 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
344 | CLANG_WARN_STRICT_PROTOTYPES = YES;
345 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
346 | CLANG_WARN_UNREACHABLE_CODE = YES;
347 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
348 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
349 | COPY_PHASE_STRIP = NO;
350 | DEBUG_INFORMATION_FORMAT = dwarf;
351 | ENABLE_STRICT_OBJC_MSGSEND = YES;
352 | ENABLE_TESTABILITY = YES;
353 | GCC_C_LANGUAGE_STANDARD = gnu99;
354 | GCC_DYNAMIC_NO_PIC = NO;
355 | GCC_NO_COMMON_BLOCKS = YES;
356 | GCC_OPTIMIZATION_LEVEL = 0;
357 | GCC_PREPROCESSOR_DEFINITIONS = (
358 | "DEBUG=1",
359 | "$(inherited)",
360 | );
361 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
362 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
363 | GCC_WARN_UNDECLARED_SELECTOR = YES;
364 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
365 | GCC_WARN_UNUSED_FUNCTION = YES;
366 | GCC_WARN_UNUSED_VARIABLE = YES;
367 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
368 | MTL_ENABLE_DEBUG_INFO = YES;
369 | ONLY_ACTIVE_ARCH = YES;
370 | SDKROOT = iphoneos;
371 | TARGETED_DEVICE_FAMILY = "1,2";
372 | };
373 | name = Debug;
374 | };
375 | 97C147041CF9000F007C117D /* Release */ = {
376 | isa = XCBuildConfiguration;
377 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
378 | buildSettings = {
379 | ALWAYS_SEARCH_USER_PATHS = NO;
380 | CLANG_ANALYZER_NONNULL = YES;
381 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
382 | CLANG_CXX_LIBRARY = "libc++";
383 | CLANG_ENABLE_MODULES = YES;
384 | CLANG_ENABLE_OBJC_ARC = YES;
385 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
386 | CLANG_WARN_BOOL_CONVERSION = YES;
387 | CLANG_WARN_COMMA = YES;
388 | CLANG_WARN_CONSTANT_CONVERSION = YES;
389 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
390 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
391 | CLANG_WARN_EMPTY_BODY = YES;
392 | CLANG_WARN_ENUM_CONVERSION = YES;
393 | CLANG_WARN_INFINITE_RECURSION = YES;
394 | CLANG_WARN_INT_CONVERSION = YES;
395 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
396 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
397 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
399 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
400 | CLANG_WARN_STRICT_PROTOTYPES = YES;
401 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
402 | CLANG_WARN_UNREACHABLE_CODE = YES;
403 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
404 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
405 | COPY_PHASE_STRIP = NO;
406 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
407 | ENABLE_NS_ASSERTIONS = NO;
408 | ENABLE_STRICT_OBJC_MSGSEND = YES;
409 | GCC_C_LANGUAGE_STANDARD = gnu99;
410 | GCC_NO_COMMON_BLOCKS = YES;
411 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
412 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
413 | GCC_WARN_UNDECLARED_SELECTOR = YES;
414 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
415 | GCC_WARN_UNUSED_FUNCTION = YES;
416 | GCC_WARN_UNUSED_VARIABLE = YES;
417 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
418 | MTL_ENABLE_DEBUG_INFO = NO;
419 | SDKROOT = iphoneos;
420 | SUPPORTED_PLATFORMS = iphoneos;
421 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
422 | TARGETED_DEVICE_FAMILY = "1,2";
423 | VALIDATE_PRODUCT = YES;
424 | };
425 | name = Release;
426 | };
427 | 97C147061CF9000F007C117D /* Debug */ = {
428 | isa = XCBuildConfiguration;
429 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
430 | buildSettings = {
431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
432 | CLANG_ENABLE_MODULES = YES;
433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
434 | ENABLE_BITCODE = NO;
435 | FRAMEWORK_SEARCH_PATHS = (
436 | "$(inherited)",
437 | "$(PROJECT_DIR)/Flutter",
438 | );
439 | INFOPLIST_FILE = Runner/Info.plist;
440 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
441 | LIBRARY_SEARCH_PATHS = (
442 | "$(inherited)",
443 | "$(PROJECT_DIR)/Flutter",
444 | );
445 | PRODUCT_BUNDLE_IDENTIFIER = com.example.elearning;
446 | PRODUCT_NAME = "$(TARGET_NAME)";
447 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
448 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
449 | SWIFT_VERSION = 5.0;
450 | VERSIONING_SYSTEM = "apple-generic";
451 | };
452 | name = Debug;
453 | };
454 | 97C147071CF9000F007C117D /* Release */ = {
455 | isa = XCBuildConfiguration;
456 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
457 | buildSettings = {
458 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
459 | CLANG_ENABLE_MODULES = YES;
460 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
461 | ENABLE_BITCODE = NO;
462 | FRAMEWORK_SEARCH_PATHS = (
463 | "$(inherited)",
464 | "$(PROJECT_DIR)/Flutter",
465 | );
466 | INFOPLIST_FILE = Runner/Info.plist;
467 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
468 | LIBRARY_SEARCH_PATHS = (
469 | "$(inherited)",
470 | "$(PROJECT_DIR)/Flutter",
471 | );
472 | PRODUCT_BUNDLE_IDENTIFIER = com.example.elearning;
473 | PRODUCT_NAME = "$(TARGET_NAME)";
474 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
475 | SWIFT_VERSION = 5.0;
476 | VERSIONING_SYSTEM = "apple-generic";
477 | };
478 | name = Release;
479 | };
480 | /* End XCBuildConfiguration section */
481 |
482 | /* Begin XCConfigurationList section */
483 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
484 | isa = XCConfigurationList;
485 | buildConfigurations = (
486 | 97C147031CF9000F007C117D /* Debug */,
487 | 97C147041CF9000F007C117D /* Release */,
488 | 249021D3217E4FDB00AE95B9 /* Profile */,
489 | );
490 | defaultConfigurationIsVisible = 0;
491 | defaultConfigurationName = Release;
492 | };
493 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
494 | isa = XCConfigurationList;
495 | buildConfigurations = (
496 | 97C147061CF9000F007C117D /* Debug */,
497 | 97C147071CF9000F007C117D /* Release */,
498 | 249021D4217E4FDB00AE95B9 /* Profile */,
499 | );
500 | defaultConfigurationIsVisible = 0;
501 | defaultConfigurationName = Release;
502 | };
503 | /* End XCConfigurationList section */
504 | };
505 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
506 | }
507 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Hash-Studios/e-learning-app/e12ad55fc78c352aae351916a08bee35e524c807/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | elearning
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/analytics/analytics_service.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_analytics/firebase_analytics.dart';
2 | import 'package:firebase_analytics/observer.dart';
3 |
4 | final FirebaseAnalytics analytics = FirebaseAnalytics();
5 | FirebaseAnalyticsObserver observer =
6 | FirebaseAnalyticsObserver(analytics: analytics);
7 |
--------------------------------------------------------------------------------
/lib/auth/google_auth.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:elearning/analytics/analytics_service.dart';
4 | import 'package:cloud_firestore/cloud_firestore.dart';
5 | import 'package:firebase_auth/firebase_auth.dart';
6 | import 'package:google_sign_in/google_sign_in.dart';
7 | import 'package:shared_preferences/shared_preferences.dart';
8 | import 'package:elearning/main.dart' as main;
9 |
10 | class GoogleAuth {
11 | final FirebaseAuth _auth = FirebaseAuth.instance;
12 | final GoogleSignIn googleSignIn = GoogleSignIn();
13 |
14 | String? name;
15 | String? email;
16 | String? imageUrl;
17 | String errorMsg = "";
18 | bool isLoggedIn = false;
19 | bool isLoading = false;
20 |
21 | Future signInWithGoogle() async {
22 | // try {
23 | isLoading = true;
24 | final GoogleSignInAccount googleSignInAccount =
25 | await (googleSignIn.signIn() as FutureOr);
26 | final GoogleSignInAuthentication googleSignInAuthentication =
27 | await googleSignInAccount.authentication;
28 |
29 | final AuthCredential credential = GoogleAuthProvider.credential(
30 | accessToken: googleSignInAuthentication.accessToken,
31 | idToken: googleSignInAuthentication.idToken,
32 | );
33 |
34 | final UserCredential authResult =
35 | await _auth.signInWithCredential(credential);
36 | final User? user = authResult.user!;
37 | assert(user?.email != null);
38 | assert(user?.displayName != null);
39 | assert(user?.photoURL != null);
40 | name = user?.displayName;
41 | email = user?.email;
42 | if (user != null) {
43 | final QuerySnapshot result = await FirebaseFirestore.instance
44 | .collection('users')
45 | .where('id', isEqualTo: user.uid)
46 | .get();
47 | final List documents = result.docs;
48 | if (documents.length == 0) {
49 | FirebaseFirestore.instance.collection('users').doc(user.uid).set({
50 | 'name': user.displayName,
51 | 'email': user.email,
52 | 'id': user.uid,
53 | 'createdAt': DateTime.now().toIso8601String(),
54 | 'premium': false,
55 | });
56 | await main.prefs.setString('id', user.uid);
57 | await main.prefs.setString('name', user.displayName!);
58 | await main.prefs.setString('email', user.email!);
59 | await main.prefs.setString('logged', "true");
60 | await main.prefs.setBool('premium', false);
61 | } else {
62 | await main.prefs.setString('id', documents[0]['id']);
63 | await main.prefs.setString('name', documents[0]['name']);
64 | await main.prefs.setString('email', documents[0]['email']);
65 | await main.prefs.setString('logged', "true");
66 | await main.prefs.setBool('premium', documents[0]['premium'] ?? false);
67 | }
68 | isLoading = false;
69 | }
70 | SharedPreferences.getInstance().then((value) {
71 | value.setString('googlename', user?.displayName ?? "");
72 | value.setString('googleemail', user?.email ?? "");
73 | value.setString('googleimage', user?.photoURL ?? "");
74 | });
75 | if (user != null) {
76 | assert(!user.isAnonymous);
77 | assert(await user.getIdToken() != null);
78 | }
79 | final User currentUser = _auth.currentUser!;
80 | assert(user?.uid == currentUser.uid);
81 | analytics.logLogin();
82 | return 'signInWithGoogle succeeded: $user';
83 | }
84 |
85 | void signOutGoogle() async {
86 | await googleSignIn.signOut();
87 | SharedPreferences.getInstance().then((value) {
88 | value.setString('googlename', "");
89 | value.setString('googleemail', "");
90 | value.setString('googleimage', "");
91 | value.setString('id', "");
92 | value.setString('name', "");
93 | value.setString('email', "");
94 | value.setString('logged', "false");
95 | value.setBool('premium', false);
96 | });
97 | print("User Sign Out");
98 | }
99 |
100 | Future isSignedIn() async {
101 | return await googleSignIn.isSignedIn();
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/lib/global/globals.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/auth/google_auth.dart';
2 |
3 | var gAuth = GoogleAuth();
4 |
5 | // var updateAvailable = false;
6 | // var versionInfo = {};
7 | // var noNewNotification = false;
8 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/ui/pages/onboarding1.dart';
2 | import 'package:elearning/ui/pages/undefinedScreen.dart';
3 | import 'package:firebase_core/firebase_core.dart';
4 | import 'package:flutter/cupertino.dart';
5 | import 'package:flutter/material.dart';
6 | import 'package:flutter/services.dart';
7 | import 'package:elearning/global/globals.dart' as globals;
8 | import 'package:elearning/routes/router.dart' as router;
9 | import 'package:shared_preferences/shared_preferences.dart';
10 |
11 | late SharedPreferences prefs;
12 | void main() async {
13 | WidgetsFlutterBinding.ensureInitialized();
14 | await Firebase.initializeApp();
15 | SharedPreferences.getInstance().then((prefs) {
16 | SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
17 | .then((value) => runApp(
18 | RestartWidget(
19 | child: MyApp(),
20 | ),
21 | ));
22 | });
23 | }
24 |
25 | class MyApp extends StatefulWidget {
26 | @override
27 | _MyAppState createState() => _MyAppState();
28 | }
29 |
30 | class _MyAppState extends State {
31 | void getLoginStatus() async {
32 | prefs = await SharedPreferences.getInstance();
33 | globals.gAuth.googleSignIn.isSignedIn().then((value) {
34 | prefs.setBool("isLoggedin", value);
35 | });
36 | }
37 |
38 | @override
39 | void initState() {
40 | getLoginStatus();
41 | super.initState();
42 | }
43 |
44 | @override
45 | Widget build(BuildContext context) {
46 | return CupertinoApp(
47 | onGenerateRoute: router.generateRoute,
48 | onUnknownRoute: (settings) => CupertinoPageRoute(
49 | builder: (context) => UndefinedScreen(
50 | name: settings.name,
51 | )),
52 | // theme: Provider.of(context).currentTheme,
53 | debugShowCheckedModeBanner: false,
54 | home: Onboarding(),
55 | );
56 | }
57 | }
58 |
59 | class RestartWidget extends StatefulWidget {
60 | RestartWidget({this.child});
61 |
62 | final Widget? child;
63 |
64 | static void restartApp(BuildContext context) {
65 | context.findAncestorStateOfType<_RestartWidgetState>()!.restartApp();
66 | }
67 |
68 | @override
69 | _RestartWidgetState createState() => _RestartWidgetState();
70 | }
71 |
72 | class _RestartWidgetState extends State {
73 | Key key = UniqueKey();
74 |
75 | void restartApp() {
76 | setState(() {
77 | key = UniqueKey();
78 | });
79 | }
80 |
81 | @override
82 | Widget build(BuildContext context) {
83 | return KeyedSubtree(
84 | key: key,
85 | child: widget.child!,
86 | );
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/lib/routes/router.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/routes/routing_constants.dart';
2 | import 'package:elearning/ui/pages/home.dart';
3 | import 'package:elearning/ui/pages/undefinedScreen.dart';
4 | import 'package:flutter/cupertino.dart';
5 | import 'package:flutter/material.dart';
6 | import 'package:elearning/analytics/analytics_service.dart';
7 |
8 | List navStack = ["Home"];
9 | Route generateRoute(RouteSettings settings) {
10 | switch (settings.name) {
11 | case HomeRoute:
12 | navStack.add("Splash");
13 | print(navStack);
14 | analytics.setCurrentScreen(screenName: HomeRoute);
15 | return CupertinoPageRoute(builder: (context) => Home());
16 | // case SearchRoute:
17 | // navStack.add("Search");
18 | // print(navStack);
19 | // analytics.setCurrentScreen(screenName: SearchRoute);
20 | // return PageRouteBuilder(
21 | // pageBuilder: (context, animation1, animation2) => SearchScreen());
22 | default:
23 | navStack.add("undefined");
24 | print(navStack);
25 | analytics.setCurrentScreen(screenName: "/undefined");
26 | return CupertinoPageRoute(
27 | builder: (context) => UndefinedScreen(
28 | name: settings.name,
29 | ),
30 | );
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/routes/routing_constants.dart:
--------------------------------------------------------------------------------
1 | const String HomeRoute = '/';
2 | const String SearchRoute = '/search';
3 |
--------------------------------------------------------------------------------
/lib/theme/config.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class App {
4 | late BuildContext _context;
5 | late double _height;
6 | late double _width;
7 | late double _heightPadding;
8 | late double _widthPadding;
9 |
10 | App(_context) {
11 | this._context = _context;
12 | MediaQueryData _queryData = MediaQuery.of(this._context);
13 | _height = _queryData.size.height / 100.0;
14 | _width = _queryData.size.width / 100.0;
15 | _heightPadding = _height -
16 | ((_queryData.padding.top + _queryData.padding.bottom) / 100.0);
17 | _widthPadding =
18 | _width - (_queryData.padding.left + _queryData.padding.right) / 100.0;
19 | }
20 |
21 | double appHeight(double v) {
22 | return _height * v;
23 | }
24 |
25 | double appWidth(double v) {
26 | return _width * v;
27 | }
28 |
29 | double appVerticalPadding(double v) {
30 | return _heightPadding * v;
31 | }
32 |
33 | double appHorizontalPadding(double v) {
34 | return _widthPadding * v;
35 | }
36 | }
37 |
38 | class Colors {
39 | Color _mainColor = Color(0xFFFFFFFF);
40 | Color _secondColor = Color(0xFFF5F6FC);
41 | Color _accentColor = Color(0xFF03A9F4);
42 | // Color _mainDarkColor = Color(0xFF181818);
43 | // Color _secondDarkColor = Color(0xFF2F2F2F);
44 | // Color _accentDarkColor = Color(0xFFF0F0F0);
45 |
46 | LinearGradient waves = LinearGradient(
47 | colors: [Color(0xFF0396FF), Color(0xFFABDCFF)],
48 | begin: Alignment.bottomRight,
49 | end: Alignment.topLeft,
50 | );
51 |
52 | LinearGradient deepSpace = LinearGradient(
53 | colors: [Color(0xFF4CA1AF), Color(0xFF2C3E50)],
54 | begin: Alignment.topRight,
55 | end: Alignment.bottomLeft,
56 | );
57 | LinearGradient peachy = LinearGradient(
58 | colors: [Color(0xFFFFB382), Color(0xFFF07590)],
59 | begin: Alignment.topRight,
60 | end: Alignment.bottomLeft,
61 | );
62 | LinearGradient nebula = LinearGradient(
63 | colors: [Color(0xFFA1A3FF), Color(0xFF6D63EF)],
64 | begin: Alignment.topRight,
65 | end: Alignment.bottomLeft,
66 | );
67 | LinearGradient mildSea = LinearGradient(
68 | colors: [Color(0xFF96EFA6), Color(0xFF26A6B5)],
69 | begin: Alignment.topRight,
70 | end: Alignment.bottomLeft,
71 | );
72 | LinearGradient mildSeaRev = LinearGradient(
73 | colors: [Color(0xFF26A6B5), Color(0xFF96EFA6)],
74 | begin: Alignment.topRight,
75 | end: Alignment.bottomLeft,
76 | );
77 | LinearGradient purplin = LinearGradient(
78 | colors: [Color(0xFFA044FF), Color(0xFF6A3093)],
79 | begin: Alignment.topRight,
80 | end: Alignment.bottomLeft,
81 | );
82 |
83 | LinearGradient easyMed = LinearGradient(
84 | colors: [Color(0xFF45B649), Color(0xFFDCE35B)],
85 | begin: Alignment.topRight,
86 | end: Alignment.bottomLeft,
87 | );
88 |
89 | LinearGradient disco = LinearGradient(
90 | colors: [Color(0xFFB06AB3), Color(0xFF4568DC)],
91 | begin: Alignment.topRight,
92 | end: Alignment.bottomLeft,
93 | );
94 |
95 | LinearGradient aqua = LinearGradient(
96 | colors: [Color(0xFF5B86E5), Color(0xFF36D1DC)],
97 | begin: Alignment.topRight,
98 | end: Alignment.bottomLeft,
99 | );
100 |
101 | LinearGradient alive = LinearGradient(
102 | colors: [Color(0xFFBD3F32), Color(0xFFCB356B)],
103 | begin: Alignment.topRight,
104 | end: Alignment.bottomLeft,
105 | );
106 |
107 | Color mainColor(double opacity) {
108 | return this._mainColor.withOpacity(opacity);
109 | }
110 |
111 | Color secondColor(double opacity) {
112 | return this._secondColor.withOpacity(opacity);
113 | }
114 |
115 | Color accentColor(double opacity) {
116 | return this._accentColor.withOpacity(opacity);
117 | }
118 |
119 | // Color mainDarkColor(double opacity) {
120 | // return this._mainDarkColor.withOpacity(opacity);
121 | // }
122 |
123 | // Color secondDarkColor(double opacity) {
124 | // return this._secondDarkColor.withOpacity(opacity);
125 | // }
126 |
127 | // Color accentDarkColor(double opacity) {
128 | // return this._accentDarkColor.withOpacity(opacity);
129 | // }
130 | }
131 |
--------------------------------------------------------------------------------
/lib/theme/theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:elearning/theme/config.dart' as config;
3 |
4 | var kLightTheme = ThemeData(
5 | canvasColor: Colors.transparent,
6 | primaryColor: Colors.white,
7 | brightness: Brightness.light,
8 | accentColor: config.Colors().accentColor(1),
9 | focusColor: config.Colors().mainColor(1),
10 | hintColor: config.Colors().secondColor(1),
11 | accentTextTheme:
12 | TextTheme(headline6: TextStyle(fontFamily: "Red Hat Display")),
13 | textTheme: TextTheme(
14 | button: TextStyle(
15 | fontFamily: 'Red Hat Display',
16 | fontSize: 16,
17 | fontWeight: FontWeight.w800,
18 | color: Color(0xFFFFFFFF),
19 | ),
20 | headline5: TextStyle(
21 | fontSize: 16.0,
22 | color: Colors.white.withOpacity(1),
23 | fontFamily: "Red Hat Display",
24 | ),
25 | headline4: TextStyle(
26 | fontSize: 16,
27 | fontFamily: "Red Hat Display",
28 | fontWeight: FontWeight.w500,
29 | color: config.Colors().accentColor(1)),
30 | headline3: TextStyle(
31 | fontSize: 20,
32 | fontFamily: "Red Hat Display",
33 | fontWeight: FontWeight.w500,
34 | color: Colors.black),
35 | headline2: TextStyle(
36 | fontSize: 24,
37 | fontFamily: "Red Hat Display",
38 | fontWeight: FontWeight.w500,
39 | color: Colors.black),
40 | headline1: TextStyle(
41 | fontFamily: 'Red Hat Display',
42 | color: config.Colors().accentColor(1),
43 | fontSize: 50,
44 | fontWeight: FontWeight.w600,
45 | ),
46 | subtitle1: TextStyle(
47 | fontSize: 20,
48 | fontWeight: FontWeight.w900,
49 | color: config.Colors().secondColor(1),
50 | fontFamily: "Roboto",
51 | ),
52 | headline6: TextStyle(
53 | fontSize: 13.0,
54 | color: Colors.white.withOpacity(.85),
55 | fontFamily: "Red Hat Display",
56 | ),
57 | bodyText2: TextStyle(
58 | fontFamily: 'Red Hat Display',
59 | fontSize: 14,
60 | fontWeight: FontWeight.w500,
61 | color: Colors.white.withOpacity(.75),
62 | ),
63 | bodyText1: TextStyle(
64 | fontFamily: 'Red Hat Display',
65 | fontSize: 24,
66 | fontWeight: FontWeight.w500,
67 | color: Colors.white.withOpacity(1),
68 | ),
69 | caption: TextStyle(
70 | fontFamily: 'Roboto',
71 | fontSize: 16,
72 | fontWeight: FontWeight.w400,
73 | color: config.Colors().accentColor(1),
74 | ),
75 | ),
76 | );
77 |
78 | // var kDarkTheme = ThemeData(
79 | // canvasColor: Colors.transparent,
80 | // primaryColor: Color(0xFF181818),
81 | // brightness: Brightness.dark,
82 | // accentColor: config.Colors().accentDarkColor(1),
83 | // focusColor: config.Colors().mainDarkColor(1),
84 | // hintColor: config.Colors().secondDarkColor(1),
85 | // accentTextTheme: TextTheme(headline6: TextStyle(fontFamily: "Red Hat Display")),
86 | // textTheme: TextTheme(
87 | // button: TextStyle(
88 | // fontFamily: 'Red Hat Display',
89 | // fontSize: 16,
90 | // fontWeight: FontWeight.w800,
91 | // color: Color(0xFF181818),
92 | // ),
93 | // headline5: TextStyle(
94 | // fontSize: 16.0,
95 | // color: config.Colors().accentDarkColor(1),
96 | // fontFamily: "Red Hat Display",
97 | // ),
98 | // headline4: TextStyle(
99 | // fontSize: 16,
100 | // fontFamily: "Red Hat Display",
101 | // fontWeight: FontWeight.w500,
102 | // color: config.Colors().accentDarkColor(1)),
103 | // headline3: TextStyle(
104 | // fontSize: 20,
105 | // fontFamily: "Red Hat Display",
106 | // fontWeight: FontWeight.w500,
107 | // color: Colors.white),
108 | // headline2: TextStyle(
109 | // fontSize: 24,
110 | // fontFamily: "Red Hat Display",
111 | // fontWeight: FontWeight.w500,
112 | // color: Colors.white),
113 | // headline1: TextStyle(
114 | // fontFamily: 'Red Hat Display',
115 | // color: config.Colors().accentDarkColor(1),
116 | // fontSize: 50,
117 | // fontWeight: FontWeight.w600,
118 | // ),
119 | // subtitle1: TextStyle(
120 | // fontSize: 20,
121 | // fontWeight: FontWeight.w900,
122 | // color: config.Colors().secondDarkColor(1),
123 | // fontFamily: "Roboto",
124 | // ),
125 | // headline6: TextStyle(
126 | // fontSize: 14.0,
127 | // color: config.Colors().accentDarkColor(.85),
128 | // fontFamily: "Red Hat Display",
129 | // ),
130 | // bodyText2: TextStyle(
131 | // fontFamily: 'Red Hat Display',
132 | // fontSize: 14,
133 | // fontWeight: FontWeight.w500,
134 | // color: config.Colors().accentDarkColor(.85),
135 | // ),
136 | // bodyText1: TextStyle(
137 | // fontFamily: 'Red Hat Display',
138 | // fontSize: 22,
139 | // fontWeight: FontWeight.w500,
140 | // color: config.Colors().accentDarkColor(1),
141 | // ),
142 | // caption: TextStyle(
143 | // fontFamily: 'Roboto',
144 | // fontSize: 16,
145 | // fontWeight: FontWeight.w400,
146 | // color: config.Colors().accentDarkColor(1),
147 | // ),
148 | // ),
149 | // );
150 |
--------------------------------------------------------------------------------
/lib/theme/themeModel.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:elearning/theme/theme.dart';
3 | // import 'package:elearning/main.dart' as main;
4 |
5 | enum ThemeType { Light, Dark }
6 |
7 | class ThemeModel extends ChangeNotifier {
8 | ThemeData currentTheme = kLightTheme;
9 | ThemeType themeType = ThemeType.Dark;
10 |
11 | ThemeModel(this.currentTheme, this.themeType);
12 |
13 | // toggleTheme() {
14 | // if (this.themeType == ThemeType.Dark) {
15 | // main.prefs.setBool("darkMode", false);
16 | // this.currentTheme = kLightTheme;
17 | // this.themeType = ThemeType.Light;
18 | // print(main.prefs.getBool("darkMode"));
19 | // return notifyListeners();
20 | // }
21 |
22 | // if (this.themeType == ThemeType.Light) {
23 | // main.prefs.setBool("darkMode", true);
24 | // this.currentTheme = kDarkTheme;
25 | // this.themeType = ThemeType.Dark;
26 | // print(main.prefs.getBool("darkMode"));
27 | // return notifyListeners();
28 | // }
29 | // }
30 |
31 | returnTheme() {
32 | return themeType;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/ui/pages/home.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 | import 'package:elearning/ui/widgets/overlay.dart';
3 | import 'package:elearning/theme/box_icons_icons.dart';
4 | import 'package:elearning/theme/config.dart';
5 | import 'package:elearning/ui/pages/leaderboard.dart';
6 | import 'package:elearning/ui/pages/planner.dart';
7 | import 'package:elearning/ui/pages/videos.dart';
8 | import 'package:elearning/ui/widgets/sectionHeader.dart';
9 | import 'package:elearning/ui/widgets/topBar.dart';
10 | import 'package:elearning/ui/widgets/videoCard.dart';
11 | import 'package:flutter/cupertino.dart';
12 | import 'package:flutter/material.dart' as material;
13 |
14 | class Home extends StatefulWidget {
15 | final onMenuTap;
16 | Home({this.onMenuTap});
17 | @override
18 | _HomeState createState() => _HomeState();
19 | }
20 |
21 | class _HomeState extends State {
22 | int tabNo = 0;
23 | late bool overlayVisible;
24 | CupertinoTabController? controller;
25 | @override
26 | void initState() {
27 | overlayVisible = false;
28 | controller = CupertinoTabController(initialIndex: 0);
29 | super.initState();
30 | }
31 |
32 | @override
33 | Widget build(BuildContext context) {
34 | return Stack(
35 | alignment: Alignment.center,
36 | children: [
37 | CupertinoTabScaffold(
38 | backgroundColor: Colors().secondColor(1),
39 | controller: controller,
40 | tabBar: CupertinoTabBar(
41 | onTap: (value) {
42 | setState(() {
43 | tabNo = value;
44 | });
45 | },
46 | activeColor: material.Colors.lightBlue,
47 | inactiveColor: Color(0xFFADADAD),
48 | items: [
49 | BottomNavigationBarItem(
50 | icon: Icon(BoxIcons.bx_home_circle),
51 | title: tabNo == 0 ? Text("Home") : Container()),
52 | BottomNavigationBarItem(
53 | icon: Icon(BoxIcons.bx_calendar),
54 | title: tabNo == 1 ? Text("Planner") : Container()),
55 | BottomNavigationBarItem(icon: Container()),
56 | BottomNavigationBarItem(
57 | icon: Icon(BoxIcons.bxs_videos),
58 | title: tabNo == 3 ? Text("Videos") : Container()),
59 | BottomNavigationBarItem(
60 | icon: Icon(BoxIcons.bx_stats),
61 | title: tabNo == 4 ? Text("Leaderboard") : Container()),
62 | ],
63 | ),
64 | tabBuilder: (context, index) => (index == 0)
65 | ? HomePage(
66 | onMenuTap: widget.onMenuTap,
67 | )
68 | : (index == 1)
69 | ? PlannerPage(
70 | onMenuTap: widget.onMenuTap,
71 | )
72 | : (index == 2)
73 | ? Container(
74 | color: CupertinoColors.activeOrange,
75 | )
76 | : (index == 3)
77 | ? VideosPage(
78 | onMenuTap: widget.onMenuTap,
79 | )
80 | : LeaderboardPage(
81 | onMenuTap: widget.onMenuTap,
82 | ),
83 | ),
84 | Positioned(
85 | bottom: 0,
86 | child: GestureDetector(
87 | child: SizedBox(
88 | height: 60,
89 | width: 80,
90 | child: Text(""),
91 | ),
92 | onTap: () {},
93 | )),
94 | overlayVisible ? OverlayWidget() : Container(),
95 | Positioned(
96 | bottom: 20,
97 | child: Container(
98 | decoration: BoxDecoration(
99 | gradient: LinearGradient(
100 | colors: [
101 | Color(0xFFABDCFF),
102 | Color(0xFF0396FF),
103 | ],
104 | begin: Alignment.topLeft,
105 | end: Alignment.bottomRight,
106 | ),
107 | boxShadow: [
108 | BoxShadow(
109 | blurRadius: 25,
110 | color: Color(0xFF03A9F4).withOpacity(0.4),
111 | offset: Offset(0, 4))
112 | ],
113 | borderRadius: BorderRadius.circular(500)),
114 | child: material.FloatingActionButton(
115 | elevation: 0,
116 | highlightElevation: 0,
117 | backgroundColor: material.Colors.transparent,
118 | child: overlayVisible
119 | ? Icon(material.Icons.close)
120 | : Icon(BoxIcons.bx_pencil),
121 | onPressed: () {
122 | setState(() {
123 | overlayVisible = !overlayVisible;
124 | });
125 | }),
126 | )),
127 | ],
128 | );
129 | }
130 | }
131 |
132 | class HomePage extends StatelessWidget {
133 | final onMenuTap;
134 | HomePage({
135 | Key? key,
136 | required this.onMenuTap,
137 | }) : super(key: key);
138 |
139 | TextEditingController controller = TextEditingController();
140 | @override
141 | Widget build(BuildContext context) {
142 | return CupertinoPageScaffold(
143 | backgroundColor: Colors().secondColor(1),
144 | child: Stack(
145 | alignment: Alignment.center,
146 | children: [
147 | SafeArea(
148 | child: CustomScrollView(
149 | slivers: [
150 | SliverFixedExtentList(
151 | delegate: SliverChildListDelegate.fixed([Container()]),
152 | itemExtent: MediaQuery.of(context).size.height * 0.32),
153 | SliverToBoxAdapter(
154 | child: SectionHeader(
155 | text: 'Recommended Lectures',
156 | onPressed: () {},
157 | ),
158 | ),
159 | SliverToBoxAdapter(
160 | child: Container(
161 | width: MediaQuery.of(context).size.width,
162 | height: 245,
163 | child: ListView.builder(
164 | scrollDirection: Axis.horizontal,
165 | itemCount: 4,
166 | itemBuilder: (context, index) {
167 | return VideoCard(long: false);
168 | },
169 | ),
170 | ),
171 | ),
172 | SliverToBoxAdapter(
173 | child: SectionHeader(
174 | text: 'Revision Lectures',
175 | onPressed: () {},
176 | ),
177 | ),
178 | SliverToBoxAdapter(
179 | child: Container(
180 | width: MediaQuery.of(context).size.width,
181 | height: 245,
182 | child: ListView.builder(
183 | scrollDirection: Axis.horizontal,
184 | itemCount: 4,
185 | itemBuilder: (context, index) {
186 | return VideoCard(long: false);
187 | },
188 | ),
189 | ),
190 | ),
191 | ],
192 | ),
193 | ),
194 | Positioned(
195 | top: 0,
196 | child: TopBar(
197 | controller: controller,
198 | expanded: true,
199 | onMenuTap: onMenuTap,
200 | ),
201 | )
202 | ],
203 | ),
204 | );
205 | }
206 | }
207 |
--------------------------------------------------------------------------------
/lib/ui/pages/leaderboard.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/config.dart' as config;
2 | import 'package:elearning/ui/widgets/card.dart';
3 | import 'package:elearning/ui/widgets/sectionHeader.dart';
4 | import 'package:elearning/ui/widgets/statsCard.dart';
5 | import 'package:elearning/ui/widgets/topBar.dart';
6 | import 'package:flutter/cupertino.dart';
7 | import 'package:flutter/material.dart' as material;
8 |
9 | class LeaderboardPage extends StatefulWidget {
10 | LeaderboardPage({
11 | Key? key,
12 | required this.onMenuTap,
13 | }) : super(key: key);
14 | final Function? onMenuTap;
15 |
16 | @override
17 | _LeaderboardPageState createState() => _LeaderboardPageState();
18 | }
19 |
20 | class _LeaderboardPageState extends State {
21 | TextEditingController controller = TextEditingController();
22 | late bool local;
23 | final List names = [
24 | 'Sarvesh Mehta',
25 | 'Karanjeet Gill',
26 | 'Rahul Bose',
27 | 'ABCDEF',
28 | 'ABCDEF',
29 | 'ABCDEF',
30 | 'ABCDEF',
31 | 'ABCDEF',
32 | 'ABCDEF',
33 | 'ABCDEF'
34 | ];
35 |
36 | final List coins = [
37 | '3895',
38 | '3678',
39 | '3675',
40 | '3456',
41 | '3455',
42 | '3454',
43 | '3453',
44 | '3452',
45 | '3451',
46 | '3450'
47 | ];
48 |
49 | final List colors = [
50 | Color(0xFFFFD700),
51 | Color(0xFFC0C0C0),
52 | Color(0xFFCD7F32),
53 | Color(0xFF0396FF),
54 | Color(0xFF0396FF),
55 | Color(0xFF0396FF),
56 | Color(0xFF0396FF),
57 | Color(0xFF0396FF),
58 | Color(0xFF0396FF),
59 | Color(0xFF0396FF)
60 | ];
61 | @override
62 | void initState() {
63 | local = true;
64 | super.initState();
65 | }
66 |
67 | @override
68 | Widget build(BuildContext context) {
69 | return CupertinoPageScaffold(
70 | backgroundColor: config.Colors().secondColor(1),
71 | child: Stack(
72 | alignment: Alignment.center,
73 | children: [
74 | SafeArea(
75 | child: local
76 | ? CustomScrollView(
77 | slivers: [
78 | SliverFixedExtentList(
79 | delegate:
80 | SliverChildListDelegate.fixed([Container()]),
81 | itemExtent:
82 | MediaQuery.of(context).size.height * 0.23),
83 | SliverToBoxAdapter(
84 | child: SectionHeader(
85 | text: 'Google Leaderboard',
86 | onPressed: () {},
87 | ),
88 | ),
89 | SliverToBoxAdapter(
90 | child: Stack(
91 | children: [
92 | Container(
93 | width: MediaQuery.of(context).size.width,
94 | height: 240,
95 | child: ListView.builder(
96 | physics: NeverScrollableScrollPhysics(),
97 | itemCount: 3,
98 | itemBuilder: (context, index) {
99 | return Padding(
100 | padding: const EdgeInsets.symmetric(
101 | vertical: 8.0, horizontal: 14),
102 | child: CardWidget(
103 | gradient: false,
104 | button: false,
105 | child: Row(
106 | children: [
107 | Padding(
108 | padding: const EdgeInsets.all(8.0),
109 | child: Text(
110 | "${index + 1}.",
111 | style: TextStyle(
112 | fontFamily: 'Red Hat Display',
113 | fontSize: 18,
114 | color: Color(0xFF585858)),
115 | ),
116 | ),
117 | Padding(
118 | padding: const EdgeInsets.all(8.0),
119 | child: Text(
120 | "${names[index]}",
121 | style: TextStyle(
122 | fontFamily: 'Red Hat Display',
123 | fontSize: 18,
124 | color: Color(0xFF585858)),
125 | ),
126 | ),
127 | Spacer(),
128 | Container(
129 | width: MediaQuery.of(context)
130 | .size
131 | .width *
132 | 0.3,
133 | decoration: BoxDecoration(
134 | borderRadius: BorderRadius.only(
135 | topLeft: Radius.elliptical(
136 | 10, 50),
137 | bottomLeft:
138 | Radius.elliptical(
139 | 10, 50)),
140 | gradient: LinearGradient(
141 | colors: [
142 | material.Colors.white,
143 | colors[index]
144 | ],
145 | begin: Alignment.topLeft,
146 | end:
147 | Alignment.bottomRight)),
148 | child: Padding(
149 | padding:
150 | const EdgeInsets.all(8.0),
151 | child: Row(
152 | mainAxisAlignment:
153 | MainAxisAlignment
154 | .spaceEvenly,
155 | children: [
156 | Image.asset(
157 | 'assets/images/CoinSmall.png',
158 | width: 50,
159 | ),
160 | Text(
161 | "${coins[index]}",
162 | style: TextStyle(
163 | fontFamily:
164 | 'Red Hat Display',
165 | fontSize: 18,
166 | color:
167 | Color(0xFF585858)),
168 | ),
169 | ],
170 | ),
171 | ),
172 | )
173 | ],
174 | ),
175 | height: 60,
176 | ),
177 | );
178 | },
179 | ),
180 | ),
181 | Positioned(
182 | top: -5,
183 | left: -4,
184 | child: Image.asset('assets/images/crown.png'))
185 | ],
186 | ),
187 | ),
188 | SliverToBoxAdapter(
189 | child: SectionHeader(
190 | text: 'My Statistics',
191 | onPressed: () {},
192 | ),
193 | ),
194 | SliverToBoxAdapter(
195 | child: Container(
196 | width: MediaQuery.of(context).size.width,
197 | height: 245,
198 | child: StatsCard(),
199 | ),
200 | ),
201 | ],
202 | )
203 | : CustomScrollView(
204 | slivers: [
205 | SliverFixedExtentList(
206 | delegate:
207 | SliverChildListDelegate.fixed([Container()]),
208 | itemExtent:
209 | MediaQuery.of(context).size.height * 0.23),
210 | SliverToBoxAdapter(
211 | child: SectionHeader(
212 | text: 'Leaderboard',
213 | onPressed: () {},
214 | ),
215 | ),
216 | SliverToBoxAdapter(
217 | child: Stack(
218 | children: [
219 | Container(
220 | width: MediaQuery.of(context).size.width,
221 | height: MediaQuery.of(context).size.height,
222 | child: ListView.builder(
223 | physics: NeverScrollableScrollPhysics(),
224 | itemCount: 10,
225 | itemBuilder: (context, index) {
226 | return Padding(
227 | padding: const EdgeInsets.symmetric(
228 | vertical: 8.0, horizontal: 14),
229 | child: CardWidget(
230 | gradient: false,
231 | button: false,
232 | child: Row(
233 | children: [
234 | Padding(
235 | padding: const EdgeInsets.all(8.0),
236 | child: Text(
237 | "${index + 1}.",
238 | style: TextStyle(
239 | fontFamily: 'Red Hat Display',
240 | fontSize: 18,
241 | color: Color(0xFF585858)),
242 | ),
243 | ),
244 | Padding(
245 | padding: const EdgeInsets.all(8.0),
246 | child: Text(
247 | "${names[index]}",
248 | style: TextStyle(
249 | fontFamily: 'Red Hat Display',
250 | fontSize: 18,
251 | color: Color(0xFF585858)),
252 | ),
253 | ),
254 | Spacer(),
255 | Container(
256 | width: MediaQuery.of(context)
257 | .size
258 | .width *
259 | 0.3,
260 | decoration: BoxDecoration(
261 | borderRadius: BorderRadius.only(
262 | topLeft: Radius.elliptical(
263 | 10, 50),
264 | bottomLeft:
265 | Radius.elliptical(
266 | 10, 50)),
267 | gradient: LinearGradient(
268 | colors: [
269 | material.Colors.white,
270 | colors[index]
271 | ],
272 | begin: Alignment.topLeft,
273 | end:
274 | Alignment.bottomRight)),
275 | child: Padding(
276 | padding:
277 | const EdgeInsets.all(8.0),
278 | child: Row(
279 | mainAxisAlignment:
280 | MainAxisAlignment
281 | .spaceEvenly,
282 | children: [
283 | Image.asset(
284 | 'assets/images/CoinSmall.png',
285 | width: 50,
286 | ),
287 | Text(
288 | "${coins[index]}",
289 | style: TextStyle(
290 | fontFamily:
291 | 'Red Hat Display',
292 | fontSize: 18,
293 | color:
294 | Color(0xFF585858)),
295 | ),
296 | ],
297 | ),
298 | ),
299 | )
300 | ],
301 | ),
302 | height: 60,
303 | ),
304 | );
305 | },
306 | ),
307 | ),
308 | Positioned(
309 | top: -5,
310 | left: -4,
311 | child: Image.asset('assets/images/crown.png'))
312 | ],
313 | ),
314 | ),
315 | ],
316 | ),
317 | ),
318 | Positioned(
319 | top: 0,
320 | child: Stack(
321 | alignment: Alignment.center,
322 | children: [
323 | Column(
324 | children: [
325 | TopBar(
326 | controller: controller,
327 | expanded: false,
328 | onMenuTap: widget.onMenuTap,
329 | ),
330 | Container(
331 | width: MediaQuery.of(context).size.width,
332 | height: MediaQuery.of(context).size.height * 0.07,
333 | color: material.Colors.white,
334 | child: Row(
335 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
336 | children: [
337 | CupertinoButton(
338 | onPressed: () {
339 | setState(() {
340 | local = true;
341 | });
342 | },
343 | child: Text(
344 | "Local",
345 | style: TextStyle(
346 | color: Color(0xFF343434),
347 | fontSize: 20,
348 | fontFamily: 'Red Hat Display',
349 | fontWeight: material.FontWeight.w600),
350 | ),
351 | ),
352 | CupertinoButton(
353 | onPressed: () {
354 | setState(() {
355 | local = false;
356 | });
357 | },
358 | child: Text(
359 | "Global",
360 | style: TextStyle(
361 | color: Color(0xFF343434),
362 | fontSize: 20,
363 | fontFamily: 'Red Hat Display',
364 | fontWeight: material.FontWeight.w600),
365 | ),
366 | )
367 | ]),
368 | )
369 | ],
370 | ),
371 | Positioned(
372 | bottom: 0,
373 | left: 0,
374 | child: AnimatedContainer(
375 | margin: local
376 | ? EdgeInsets.only(
377 | left: MediaQuery.of(context).size.width * 0.33 - 35)
378 | : EdgeInsets.only(
379 | left:
380 | MediaQuery.of(context).size.width * 0.67 - 10),
381 | width: 40,
382 | height: 4,
383 | duration: Duration(milliseconds: 300),
384 | decoration: BoxDecoration(
385 | color: Color(0xFF03A9F4),
386 | borderRadius: BorderRadius.circular(500)),
387 | ),
388 | )
389 | ],
390 | ),
391 | )
392 | ],
393 | ),
394 | );
395 | }
396 | }
397 |
--------------------------------------------------------------------------------
/lib/ui/pages/navmenu/dashboard.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class Dashboard extends StatelessWidget {
4 | final bool? isCollapsed;
5 | final double? screenWidth;
6 | final Duration? duration;
7 | final Animation? scaleAnimation;
8 | final Function? onMenuTap;
9 | final Widget? child;
10 |
11 | const Dashboard(
12 | {Key? key,
13 | this.isCollapsed,
14 | this.screenWidth,
15 | this.duration,
16 | this.scaleAnimation,
17 | this.onMenuTap,
18 | this.child})
19 | : super(key: key);
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | return AnimatedPositioned(
24 | duration: duration!,
25 | top: 0,
26 | bottom: 0,
27 | left: isCollapsed! ? 0 : 0.6 * screenWidth!,
28 | right: isCollapsed! ? 0 : -0.6 * screenWidth!,
29 | child: ScaleTransition(
30 | scale: scaleAnimation!,
31 | child: Container(
32 | decoration: BoxDecoration(
33 | boxShadow: [
34 | BoxShadow(
35 | blurRadius: 20,
36 | offset: Offset(0, 10),
37 | color: Color(0x2A636363),
38 | ),
39 | ],
40 | ),
41 | child: ClipRRect(
42 | borderRadius: isCollapsed!
43 | ? BorderRadius.zero
44 | : BorderRadius.all(Radius.circular(20)),
45 | child: Material(
46 | animationDuration: duration!,
47 | child: child,
48 | ),
49 | ),
50 | ),
51 | ),
52 | );
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/lib/ui/pages/navmenu/menu.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class Menu extends StatelessWidget {
5 | final Animation? slideAnimation;
6 | final Animation? menuAnimation;
7 | final int? selectedIndex;
8 | final Function onMenuItemClicked;
9 | final onMenuTap;
10 |
11 | const Menu(
12 | {Key? key,
13 | required this.onMenuTap,
14 | this.slideAnimation,
15 | this.menuAnimation,
16 | this.selectedIndex,
17 | required this.onMenuItemClicked})
18 | : super(key: key);
19 |
20 | @override
21 | Widget build(BuildContext context) {
22 | return Stack(
23 | children: [
24 | Align(
25 | alignment: Alignment.centerRight,
26 | child: Container(
27 | width: MediaQuery.of(context).size.width * 0.33,
28 | height: MediaQuery.of(context).size.height * 0.67,
29 | decoration: BoxDecoration(
30 | color: Color(0x80FFFFFF),
31 | borderRadius: BorderRadius.circular(10),
32 | ),
33 | ),
34 | ),
35 | Align(
36 | alignment: Alignment.bottomCenter,
37 | child: Container(
38 | width: MediaQuery.of(context).size.width,
39 | height: 135,
40 | decoration: BoxDecoration(
41 | image: DecorationImage(
42 | image: AssetImage("assets/images/navwave.png"),
43 | fit: BoxFit.fitWidth),
44 | ),
45 | ),
46 | ),
47 | Align(
48 | alignment: Alignment.topRight,
49 | child: Padding(
50 | padding: const EdgeInsets.fromLTRB(0, 28, 10, 0),
51 | child: IconButton(
52 | icon: Icon(
53 | Icons.close,
54 | color: Colors.white,
55 | ),
56 | onPressed: onMenuTap,
57 | ),
58 | )),
59 | SlideTransition(
60 | position: slideAnimation!,
61 | child: ScaleTransition(
62 | scale: menuAnimation!,
63 | child: Padding(
64 | padding: const EdgeInsets.only(left: 20.0, top: 30),
65 | child: Align(
66 | alignment: Alignment.centerLeft,
67 | child: Column(
68 | // mainAxisSize: MainAxisSize.min,
69 | mainAxisAlignment: MainAxisAlignment.start,
70 | crossAxisAlignment: CrossAxisAlignment.start,
71 | children: [
72 | Row(
73 | children: [
74 | CircleAvatar(
75 | radius: 30,
76 | backgroundImage: AssetImage('assets/images/user.png'),
77 | ),
78 | Padding(
79 | padding: const EdgeInsets.only(left: 16.0),
80 | child: Column(
81 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
82 | crossAxisAlignment: CrossAxisAlignment.start,
83 | children: [
84 | Text(
85 | "Akshay Maurya",
86 | maxLines: 1,
87 | overflow: TextOverflow.fade,
88 | style: TextStyle(
89 | fontFamily: "Red Hat Display",
90 | color: Colors.white,
91 | fontWeight: FontWeight.w600,
92 | fontSize: 24,
93 | ),
94 | ),
95 | Text(
96 | "Student",
97 | maxLines: 1,
98 | overflow: TextOverflow.fade,
99 | style: TextStyle(
100 | fontFamily: "Red Hat Display",
101 | color: Colors.white,
102 | fontWeight: FontWeight.w400,
103 | fontSize: 14,
104 | ),
105 | ),
106 | ],
107 | ),
108 | )
109 | ],
110 | ),
111 | Spacer(
112 | flex: 3,
113 | ),
114 | Row(
115 | children: [
116 | Padding(
117 | padding: const EdgeInsets.only(right: 20.0),
118 | child: Icon(
119 | BoxIcons.bx_home_circle,
120 | color: Colors.white,
121 | ),
122 | ),
123 | Text(
124 | "Home",
125 | maxLines: 1,
126 | overflow: TextOverflow.fade,
127 | style: TextStyle(
128 | fontFamily: "Red Hat Display",
129 | color: Colors.white,
130 | fontWeight: FontWeight.bold,
131 | fontSize: 20,
132 | ),
133 | ),
134 | ],
135 | ),
136 | Spacer(flex: 2),
137 | Row(
138 | children: [
139 | Padding(
140 | padding: const EdgeInsets.only(right: 20.0),
141 | child: Icon(
142 | BoxIcons.bx_edit,
143 | color: Colors.white,
144 | ),
145 | ),
146 | Text(
147 | "Todo",
148 | maxLines: 1,
149 | overflow: TextOverflow.fade,
150 | style: TextStyle(
151 | fontFamily: "Red Hat Display",
152 | color: Colors.white,
153 | fontWeight: FontWeight.normal,
154 | fontSize: 20,
155 | ),
156 | ),
157 | ],
158 | ),
159 | Spacer(flex: 2),
160 | Row(
161 | children: [
162 | Padding(
163 | padding: const EdgeInsets.only(right: 20.0),
164 | child: Icon(
165 | BoxIcons.bx_book_alt,
166 | color: Colors.white,
167 | ),
168 | ),
169 | Text(
170 | "Subjects",
171 | maxLines: 1,
172 | overflow: TextOverflow.fade,
173 | style: TextStyle(
174 | fontFamily: "Red Hat Display",
175 | color: Colors.white,
176 | fontWeight: FontWeight.normal,
177 | fontSize: 20,
178 | ),
179 | ),
180 | ],
181 | ),
182 | Spacer(flex: 2),
183 | Row(
184 | children: [
185 | Padding(
186 | padding: const EdgeInsets.only(right: 20.0),
187 | child: Icon(
188 | BoxIcons.bx_chat,
189 | color: Colors.white,
190 | ),
191 | ),
192 | Text(
193 | "Forum",
194 | maxLines: 1,
195 | overflow: TextOverflow.fade,
196 | style: TextStyle(
197 | fontFamily: "Red Hat Display",
198 | color: Colors.white,
199 | fontWeight: FontWeight.normal,
200 | fontSize: 20,
201 | ),
202 | ),
203 | ],
204 | ),
205 | Spacer(flex: 2),
206 | Row(
207 | children: [
208 | Padding(
209 | padding: const EdgeInsets.only(right: 20.0),
210 | child: Icon(
211 | BoxIcons.bx_calendar,
212 | color: Colors.white,
213 | ),
214 | ),
215 | Text(
216 | "Schedule",
217 | maxLines: 1,
218 | overflow: TextOverflow.fade,
219 | style: TextStyle(
220 | fontFamily: "Red Hat Display",
221 | color: Colors.white,
222 | fontWeight: FontWeight.normal,
223 | fontSize: 20,
224 | ),
225 | ),
226 | ],
227 | ),
228 | Spacer(flex: 2),
229 | SizedBox(
230 | height: 1,
231 | width: 200,
232 | child: Container(
233 | color: Colors.white54,
234 | ),
235 | ),
236 | Spacer(flex: 2),
237 | Row(
238 | children: [
239 | Padding(
240 | padding: const EdgeInsets.only(right: 20.0),
241 | child: Icon(
242 | BoxIcons.bx_cog,
243 | color: Colors.white,
244 | ),
245 | ),
246 | Text(
247 | "Settings",
248 | maxLines: 1,
249 | overflow: TextOverflow.fade,
250 | style: TextStyle(
251 | fontFamily: "Red Hat Display",
252 | color: Colors.white,
253 | fontWeight: FontWeight.normal,
254 | fontSize: 20,
255 | ),
256 | ),
257 | ],
258 | ),
259 | Spacer(flex: 2),
260 | Row(
261 | children: [
262 | Padding(
263 | padding: const EdgeInsets.only(right: 20.0),
264 | child: Icon(
265 | BoxIcons.bx_help_circle,
266 | color: Colors.white,
267 | ),
268 | ),
269 | Text(
270 | "Help",
271 | maxLines: 1,
272 | overflow: TextOverflow.fade,
273 | style: TextStyle(
274 | fontFamily: "Red Hat Display",
275 | color: Colors.white,
276 | fontWeight: FontWeight.normal,
277 | fontSize: 20,
278 | ),
279 | ),
280 | ],
281 | ),
282 | Spacer(flex: 5),
283 | ],
284 | ),
285 | ),
286 | ),
287 | ),
288 | ),
289 | ],
290 | );
291 | }
292 | }
293 |
--------------------------------------------------------------------------------
/lib/ui/pages/navmenu/menu_dashboard_layout.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/config.dart' as config;
2 | import 'package:elearning/ui/pages/home.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:elearning/ui/pages/navmenu/dashboard.dart';
5 |
6 | import 'menu.dart';
7 |
8 | final Color backgroundColor = Colors.lightBlue;
9 |
10 | class MenuDashboardLayout extends StatefulWidget {
11 | @override
12 | _MenuDashboardLayoutState createState() => _MenuDashboardLayoutState();
13 | }
14 |
15 | class _MenuDashboardLayoutState extends State
16 | with SingleTickerProviderStateMixin {
17 | bool isCollapsed = true;
18 | double? screenWidth, screenHeight;
19 | final Duration duration = const Duration(milliseconds: 200);
20 | late AnimationController _controller;
21 | Animation? _scaleAnimation;
22 | Animation? _menuScaleAnimation;
23 | Animation? _slideAnimation;
24 |
25 | @override
26 | void initState() {
27 | super.initState();
28 | _controller = AnimationController(vsync: this, duration: duration);
29 | _scaleAnimation = Tween(begin: 1, end: 0.75).animate(_controller);
30 | _menuScaleAnimation =
31 | Tween(begin: 0.5, end: 1).animate(_controller);
32 | _slideAnimation = Tween(begin: Offset(-1, 0), end: Offset(0, 0))
33 | .animate(_controller);
34 | }
35 |
36 | @override
37 | void dispose() {
38 | _controller.dispose();
39 | super.dispose();
40 | }
41 |
42 | void onMenuTap() {
43 | setState(() {
44 | if (isCollapsed)
45 | _controller.forward();
46 | else
47 | _controller.reverse();
48 |
49 | isCollapsed = !isCollapsed;
50 | });
51 | }
52 |
53 | void onMenuItemClicked() {
54 | setState(() {
55 | _controller.reverse();
56 | });
57 |
58 | isCollapsed = !isCollapsed;
59 | }
60 |
61 | @override
62 | Widget build(BuildContext context) {
63 | Size size = MediaQuery.of(context).size;
64 | screenHeight = size.height;
65 | screenWidth = size.width;
66 |
67 | return Scaffold(
68 | backgroundColor: backgroundColor,
69 | body: Stack(
70 | children: [
71 | Container(
72 | width: MediaQuery.of(context).size.width,
73 | height: MediaQuery.of(context).size.height,
74 | decoration: BoxDecoration(
75 | gradient: config.Colors().waves,
76 | ),
77 | ),
78 | Menu(
79 | onMenuTap: onMenuTap,
80 | slideAnimation: _slideAnimation,
81 | menuAnimation: _menuScaleAnimation,
82 | onMenuItemClicked: onMenuItemClicked),
83 | Dashboard(
84 | duration: duration,
85 | onMenuTap: onMenuTap,
86 | scaleAnimation: _scaleAnimation,
87 | isCollapsed: isCollapsed,
88 | screenWidth: screenWidth,
89 | child: Home(onMenuTap: onMenuTap),
90 | ),
91 | ],
92 | ),
93 | );
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/lib/ui/pages/onboarding1.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:elearning/ui/pages/navmenu/menu_dashboard_layout.dart';
3 | import 'package:flutter/cupertino.dart';
4 |
5 | class Onboarding extends StatefulWidget {
6 | @override
7 | _OnboardingState createState() => _OnboardingState();
8 | }
9 |
10 | class _OnboardingState extends State {
11 | final PageController controller = PageController(initialPage: 0);
12 | int? pageNumber;
13 | List widgets = [];
14 | @override
15 | void initState() {
16 | pageNumber = 0;
17 | super.initState();
18 | }
19 |
20 | void createWidgets() {
21 | widgets.addAll([
22 | Column(
23 | mainAxisAlignment: MainAxisAlignment.center,
24 | children: [
25 | Image.asset('assets/images/1.png'),
26 | Container(
27 | width: MediaQuery.of(context).size.width * 0.6,
28 | child: Text(
29 | "Easy access to video lectures, & reading materials.",
30 | textAlign: TextAlign.center,
31 | style: TextStyle(
32 | fontFamily: 'Red Hat Display',
33 | fontSize: 14,
34 | color: Color(0xFFFFFFFF)),
35 | ),
36 | )
37 | ],
38 | ),
39 | Column(
40 | mainAxisAlignment: MainAxisAlignment.center,
41 | children: [
42 | Image.asset('assets/images/2.png'),
43 | Container(
44 | width: MediaQuery.of(context).size.width * 0.6,
45 | child: Text(
46 | "Ask questions, earn coins and dominate the global leaderboard.",
47 | textAlign: TextAlign.center,
48 | style: TextStyle(
49 | fontFamily: 'Red Hat Display',
50 | fontSize: 14,
51 | color: Color(0xFFFFFFFF)),
52 | ),
53 | )
54 | ],
55 | ),
56 | Column(
57 | mainAxisAlignment: MainAxisAlignment.center,
58 | children: [
59 | Image.asset('assets/images/logo.png'),
60 | Container(
61 | width: MediaQuery.of(context).size.width * 0.6,
62 | child: Text(
63 | "E-Learn",
64 | textAlign: TextAlign.center,
65 | style: TextStyle(
66 | fontFamily: 'Red Hat Display',
67 | fontSize: 28,
68 | color: Color(0xFFFFFFFF)),
69 | ),
70 | ),
71 | SizedBox(
72 | height: MediaQuery.of(context).size.height * 0.3,
73 | ),
74 | Container(
75 | width: MediaQuery.of(context).size.width * 0.6,
76 | child: Text(
77 | "The complete E-learning solution for students of all ages!\n\n\nJoin for FREE now!",
78 | textAlign: TextAlign.center,
79 | style: TextStyle(
80 | fontFamily: 'Red Hat Display',
81 | fontSize: 14,
82 | color: Color(0xFFFFFFFF)),
83 | ),
84 | ),
85 | SizedBox(
86 | height: MediaQuery.of(context).size.height * 0.05,
87 | ),
88 | CupertinoButton(
89 | color: Color(0xFFFFFFFF),
90 | child: Row(
91 | mainAxisAlignment: MainAxisAlignment.center,
92 | mainAxisSize: MainAxisSize.min,
93 | children: [
94 | Text(
95 | "Sign in with Google ➡",
96 | style: TextStyle(
97 | fontFamily: 'Red Hat Display',
98 | fontSize: 16,
99 | color: Color(0xFF0083BE),
100 | fontWeight: FontWeight.bold),
101 | ),
102 | ],
103 | ),
104 | onPressed: () {
105 | Navigator.pushReplacement(
106 | context,
107 | CupertinoPageRoute(
108 | builder: (context) => MenuDashboardLayout()));
109 | })
110 | ],
111 | ),
112 | ]);
113 | }
114 |
115 | @override
116 | Widget build(BuildContext context) {
117 | createWidgets();
118 | return CupertinoPageScaffold(
119 | child: Stack(
120 | children: [
121 | Container(
122 | decoration: BoxDecoration(
123 | gradient: LinearGradient(colors: [
124 | Color(0xFFABDCFF),
125 | Color(0xFF0396FF),
126 | ], begin: Alignment.topLeft, end: Alignment.bottomRight),
127 | ),
128 | ),
129 | Positioned(
130 | top: 0, left: 0, child: Image.asset('assets/images/wave.png')),
131 | Align(
132 | alignment: Alignment.center,
133 | child: PageView.builder(
134 | controller: controller,
135 | onPageChanged: (value) {
136 | setState(() {
137 | pageNumber = value;
138 | });
139 | },
140 | itemCount: 3,
141 | itemBuilder: (context, index) => widgets[index]),
142 | ),
143 | pageNumber == 2
144 | ? Container()
145 | : Positioned(
146 | bottom: 10,
147 | right: 10,
148 | child: CupertinoButton(
149 | child: Icon(
150 | pageNumber == 1
151 | ? BoxIcons.bx_check
152 | : BoxIcons.bx_chevron_right,
153 | color: Color(0xFFFFFFFF),
154 | size: 30,
155 | ),
156 | onPressed: () {
157 | controller.nextPage(
158 | duration: Duration(milliseconds: 300),
159 | curve: Curves.fastOutSlowIn);
160 | },
161 | ))
162 | ],
163 | ),
164 | );
165 | }
166 | }
167 |
--------------------------------------------------------------------------------
/lib/ui/pages/planner.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/config.dart' as config;
2 | import 'package:elearning/ui/widgets/card.dart';
3 | import 'package:elearning/ui/widgets/sectionHeader.dart';
4 | import 'package:elearning/ui/widgets/topBar.dart';
5 | import 'package:elearning/ui/widgets/videoCard.dart';
6 | import 'package:flutter/cupertino.dart';
7 | import 'package:flutter_calendar_carousel/flutter_calendar_carousel.dart';
8 | import 'package:flutter/material.dart' as material;
9 |
10 | class PlannerPage extends StatelessWidget {
11 | PlannerPage({
12 | Key? key,
13 | required this.onMenuTap,
14 | }) : super(key: key);
15 | final Function? onMenuTap;
16 |
17 | TextEditingController controller = TextEditingController();
18 | @override
19 | Widget build(BuildContext context) {
20 | return CupertinoPageScaffold(
21 | backgroundColor: config.Colors().secondColor(1),
22 | child: Stack(
23 | alignment: Alignment.center,
24 | children: [
25 | SafeArea(
26 | child: CustomScrollView(
27 | slivers: [
28 | SliverFixedExtentList(
29 | delegate: SliverChildListDelegate.fixed([Container()]),
30 | itemExtent: MediaQuery.of(context).size.height * 0.16),
31 | SliverToBoxAdapter(
32 | child: SectionHeader(
33 | text: 'Today\'s Work',
34 | onPressed: () {},
35 | ),
36 | ),
37 | SliverToBoxAdapter(
38 | child: Container(
39 | width: MediaQuery.of(context).size.width,
40 | height: 240,
41 | child: ListView.builder(
42 | scrollDirection: Axis.horizontal,
43 | itemCount: 2,
44 | itemBuilder: (context, index) {
45 | return VideoCard(long: true);
46 | },
47 | ),
48 | ),
49 | ),
50 | SliverToBoxAdapter(
51 | child: SectionHeader(
52 | text: 'Calendar',
53 | onPressed: () {},
54 | ),
55 | ),
56 | SliverToBoxAdapter(
57 | child: Container(
58 | width: MediaQuery.of(context).size.width,
59 | height: 450,
60 | child: CardWidget(
61 | button: false,
62 | gradient: false,
63 | child: material.Material(
64 | child: CalendarCarousel(
65 | isScrollable: false,
66 | todayButtonColor: material.Colors.lightBlue,
67 | ),
68 | ),
69 | ),
70 | ),
71 | ),
72 | SliverToBoxAdapter(
73 | child: SizedBox(
74 | height: 70,
75 | child: Text(""),
76 | ),
77 | )
78 | ],
79 | ),
80 | ),
81 | Positioned(
82 | top: 0,
83 | child: TopBar(
84 | controller: controller,
85 | expanded: false,
86 | onMenuTap: onMenuTap,
87 | ),
88 | )
89 | ],
90 | ),
91 | );
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/lib/ui/pages/undefinedScreen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class UndefinedScreen extends StatelessWidget {
4 | final String? name;
5 | const UndefinedScreen({Key? key, this.name}) : super(key: key);
6 | @override
7 | Widget build(BuildContext context) {
8 | return Scaffold(
9 | body: Center(
10 | child: Text('Route for $name is not defined'),
11 | ),
12 | );
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/lib/ui/pages/video.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:elearning/theme/config.dart';
3 | import 'package:elearning/ui/widgets/card.dart';
4 | import 'package:flutter/cupertino.dart';
5 | import 'package:flutter/material.dart' as material;
6 |
7 | class VideoPage extends StatefulWidget {
8 | @override
9 | _VideoPageState createState() => _VideoPageState();
10 | }
11 |
12 | class _VideoPageState extends State {
13 | @override
14 | Widget build(BuildContext context) {
15 | return CupertinoPageScaffold(
16 | backgroundColor: Colors().secondColor(1),
17 | navigationBar: CupertinoNavigationBar(
18 | automaticallyImplyLeading: true,
19 | previousPageTitle: "Back",
20 | trailing: CupertinoButton(
21 | padding: EdgeInsets.all(0),
22 | child: Icon(BoxIcons.bx_share_alt),
23 | onPressed: () {},
24 | ),
25 | ),
26 | child: Stack(
27 | alignment: Alignment.center,
28 | children: [
29 | Container(
30 | height: MediaQuery.of(context).size.height,
31 | child: SingleChildScrollView(
32 | child: Stack(
33 | alignment: Alignment.center,
34 | children: [
35 | Container(
36 | child: Column(
37 | children: [
38 | Container(
39 | width: MediaQuery.of(context).size.width,
40 | height: MediaQuery.of(context).size.height * 0.5,
41 | child: Image(
42 | image: ResizeImage(
43 | AssetImage('assets/images/video.jpg'),
44 | height: MediaQuery.of(context).size.width ~/ 2,
45 | width:
46 | (MediaQuery.of(context).size.height * 0.5) ~/ 2,
47 | ),
48 | fit: BoxFit.cover,
49 | ),
50 | ),
51 | Container(
52 | width: MediaQuery.of(context).size.width,
53 | child: Column(
54 | mainAxisAlignment: MainAxisAlignment.center,
55 | mainAxisSize: MainAxisSize.min,
56 | children: [
57 | Padding(
58 | padding: const EdgeInsets.fromLTRB(24, 10, 8, 8.0),
59 | child: Row(
60 | children: [
61 | Container(
62 | width: 4,
63 | height: 30,
64 | decoration: BoxDecoration(
65 | borderRadius: BorderRadius.circular(500),
66 | color: Color(0xFF343434)),
67 | child: Text(""),
68 | ),
69 | Padding(
70 | padding: const EdgeInsets.all(8.0),
71 | child: Text(
72 | "Revision - Kinematics",
73 | style: TextStyle(
74 | color: Color(0xFF343434),
75 | fontFamily: 'Red Hat Display',
76 | fontSize: 24),
77 | ),
78 | )
79 | ],
80 | ),
81 | ),
82 | Padding(
83 | padding:
84 | const EdgeInsets.symmetric(horizontal: 16.0),
85 | child: Row(
86 | children: [
87 | Padding(
88 | padding: const EdgeInsets.symmetric(
89 | horizontal: 8.0),
90 | child: Icon(BoxIcons.bx_bar_chart_alt_2,
91 | size: 20, color: Color(0xFFADADAD)),
92 | ),
93 | Text(
94 | "Beginner",
95 | style: TextStyle(
96 | color: Color(0xFFADADAD),
97 | fontFamily: 'Red Hat Display',
98 | fontSize: 14),
99 | ),
100 | Spacer(),
101 | Text(
102 | "12 mins",
103 | style: TextStyle(
104 | color: Color(0xFFADADAD),
105 | fontFamily: 'Red Hat Display',
106 | fontSize: 14),
107 | ),
108 | Padding(
109 | padding: const EdgeInsets.symmetric(
110 | horizontal: 8.0),
111 | child: Icon(BoxIcons.bx_timer,
112 | size: 20, color: Color(0xFFADADAD)),
113 | ),
114 | ],
115 | ),
116 | ),
117 | Container(
118 | padding: EdgeInsets.all(8),
119 | width: MediaQuery.of(context).size.width * 0.9,
120 | child: Text(
121 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ut odio id urna ornare rhoncus. Fusce egestas tellus vitae elit pellentesque, sit amet gravida metus consectetur. Sed in hendrerit elit. Phasellus ullamcorper vulputate ex quis consequat. Aenean fringilla vulputate egestas. Aenean nec mattis turpis. Aenean a faucibus purus, in pulvinar velit. Nulla efficitur erat commodo.",
122 | style: TextStyle(
123 | color: Color(0xFF343434),
124 | fontFamily: 'Red Hat Display',
125 | fontSize: 16),
126 | ))
127 | ],
128 | ),
129 | ),
130 | ],
131 | )),
132 | Positioned(
133 | right: 30,
134 | top: MediaQuery.of(context).size.height * 0.465,
135 | child: Container(
136 | decoration: BoxDecoration(
137 | gradient: LinearGradient(
138 | colors: [
139 | Color(0xFFABDCFF),
140 | Color(0xFF0396FF),
141 | ],
142 | begin: Alignment.topLeft,
143 | end: Alignment.bottomRight,
144 | ),
145 | boxShadow: [
146 | BoxShadow(
147 | blurRadius: 25,
148 | color: Color(0xFF03A9F4).withOpacity(0.4),
149 | offset: Offset(0, 4))
150 | ],
151 | borderRadius: BorderRadius.circular(500)),
152 | child: material.FloatingActionButton(
153 | heroTag: "video",
154 | elevation: 0,
155 | highlightElevation: 0,
156 | backgroundColor: material.Colors.transparent,
157 | child: Icon(BoxIcons.bx_play, size: 40),
158 | onPressed: () {}),
159 | )),
160 | ],
161 | )),
162 | ),
163 | Positioned(
164 | bottom: 0,
165 | left: 0,
166 | child: CardWidget(
167 | button: true,
168 | gradient: true,
169 | height: 60,
170 | width: MediaQuery.of(context).size.width,
171 | child: Row(
172 | mainAxisAlignment: MainAxisAlignment.center,
173 | children: [
174 | Text(
175 | "Attempt Test",
176 | style: TextStyle(
177 | color: material.Colors.white,
178 | fontFamily: 'Red Hat Display',
179 | fontSize: 18),
180 | ),
181 | Padding(
182 | padding: const EdgeInsets.all(8.0),
183 | child:
184 | Icon(BoxIcons.bx_pencil, color: material.Colors.white),
185 | ),
186 | ],
187 | ),
188 | ),
189 | )
190 | ],
191 | ),
192 | );
193 | }
194 | }
195 |
--------------------------------------------------------------------------------
/lib/ui/pages/videos.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/config.dart' as config;
2 | import 'package:elearning/ui/widgets/sectionHeader.dart';
3 | import 'package:elearning/ui/widgets/topBar.dart';
4 | import 'package:elearning/ui/widgets/videoCard.dart';
5 | import 'package:flutter/cupertino.dart';
6 |
7 | class VideosPage extends StatelessWidget {
8 | VideosPage({
9 | Key? key,
10 | required this.onMenuTap,
11 | }) : super(key: key);
12 | final Function? onMenuTap;
13 |
14 | TextEditingController controller = TextEditingController();
15 | @override
16 | Widget build(BuildContext context) {
17 | return CupertinoPageScaffold(
18 | backgroundColor: config.Colors().secondColor(1),
19 | child: Stack(
20 | alignment: Alignment.center,
21 | children: [
22 | SafeArea(
23 | child: CustomScrollView(
24 | slivers: [
25 | SliverFixedExtentList(
26 | delegate: SliverChildListDelegate.fixed([Container()]),
27 | itemExtent: MediaQuery.of(context).size.height * 0.16),
28 | SliverToBoxAdapter(
29 | child: SectionHeader(
30 | text: 'Best of Physics',
31 | onPressed: () {},
32 | ),
33 | ),
34 | SliverToBoxAdapter(
35 | child: Container(
36 | width: MediaQuery.of(context).size.width,
37 | height: 245,
38 | child: ListView.builder(
39 | scrollDirection: Axis.horizontal,
40 | itemCount: 4,
41 | itemBuilder: (context, index) {
42 | return VideoCard(long: false);
43 | },
44 | ),
45 | ),
46 | ),
47 | SliverToBoxAdapter(
48 | child: SectionHeader(
49 | text: 'Best of Chemistry',
50 | onPressed: () {},
51 | ),
52 | ),
53 | SliverToBoxAdapter(
54 | child: Container(
55 | width: MediaQuery.of(context).size.width,
56 | height: 245,
57 | child: ListView.builder(
58 | scrollDirection: Axis.horizontal,
59 | itemCount: 4,
60 | itemBuilder: (context, index) {
61 | return VideoCard(long: false);
62 | },
63 | ),
64 | ),
65 | ),
66 | SliverToBoxAdapter(
67 | child: SectionHeader(
68 | text: 'Best of Maths',
69 | onPressed: () {},
70 | ),
71 | ),
72 | SliverToBoxAdapter(
73 | child: Container(
74 | width: MediaQuery.of(context).size.width,
75 | height: 245,
76 | child: ListView.builder(
77 | scrollDirection: Axis.horizontal,
78 | itemCount: 4,
79 | itemBuilder: (context, index) {
80 | return VideoCard(long: false);
81 | },
82 | ),
83 | ),
84 | ),
85 | SliverToBoxAdapter(
86 | child: SectionHeader(
87 | text: 'Best of Biology',
88 | onPressed: () {},
89 | ),
90 | ),
91 | SliverToBoxAdapter(
92 | child: Container(
93 | width: MediaQuery.of(context).size.width,
94 | height: 245,
95 | child: ListView.builder(
96 | scrollDirection: Axis.horizontal,
97 | itemCount: 4,
98 | itemBuilder: (context, index) {
99 | return VideoCard(long: false);
100 | },
101 | ),
102 | ),
103 | ),
104 | ],
105 | ),
106 | ),
107 | Positioned(
108 | top: 0,
109 | child: TopBar(
110 | controller: controller,
111 | expanded: false,
112 | onMenuTap: onMenuTap,
113 | ),
114 | )
115 | ],
116 | ),
117 | );
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/lib/ui/widgets/card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 |
3 | import 'package:elearning/theme/config.dart';
4 | import 'package:flutter/material.dart' as material;
5 |
6 | class CardWidget extends StatelessWidget {
7 | final bool gradient;
8 | final bool button;
9 | final Color? color;
10 | final double? width;
11 | final double? height;
12 | final Widget child;
13 | final int? duration;
14 | final Border? border;
15 | final func;
16 | CardWidget({
17 | required this.gradient,
18 | required this.button,
19 | this.color,
20 | this.width,
21 | this.height,
22 | required this.child,
23 | this.duration,
24 | this.func,
25 | this.border,
26 | });
27 | @override
28 | Widget build(BuildContext context) {
29 | return Container(
30 | decoration: material.BoxDecoration(
31 | boxShadow: [
32 | BoxShadow(
33 | blurRadius: 25,
34 | offset: Offset(0, 10),
35 | color: Color(0x1A636363),
36 | ),
37 | ],
38 | ),
39 | child: ClipPath(
40 | clipper: ShapeBorderClipper(
41 | shape: RoundedRectangleBorder(
42 | borderRadius: BorderRadius.circular(10),
43 | ),
44 | ),
45 | child: material.AnimatedContainer(
46 | duration: Duration(milliseconds: duration ?? 500),
47 | width: width,
48 | height: height,
49 | decoration: BoxDecoration(
50 | border: border ??
51 | Border.all(
52 | color: material.Colors.white,
53 | width: 0,
54 | ),
55 | // borderRadius: BorderRadius.circular(10),
56 | color: color ?? Colors().mainColor(1),
57 | gradient: gradient
58 | ? Colors().waves
59 | : LinearGradient(colors: [
60 | color ?? Colors().mainColor(1),
61 | color ?? Colors().mainColor(1)
62 | ]),
63 | ),
64 | child: button
65 | ? ClipRRect(
66 | borderRadius: material.BorderRadius.circular(10),
67 | child: material.MaterialButton(
68 | padding: material.EdgeInsets.zero,
69 | elevation: 0,
70 | child: child,
71 | onPressed: func,
72 | ),
73 | )
74 | : child,
75 | ),
76 | ),
77 | );
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/lib/ui/widgets/overlay.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 |
3 | import 'package:elearning/theme/box_icons_icons.dart';
4 | import 'package:elearning/ui/widgets/card.dart';
5 | import 'package:flutter/cupertino.dart';
6 | import 'package:intl/intl.dart';
7 |
8 | class OverlayWidget extends StatelessWidget {
9 | OverlayWidget({
10 | Key? key,
11 | }) : super(key: key);
12 | String getStrToday() {
13 | var today = DateFormat().add_yMMMMd().format(DateTime.now());
14 | var strDay = today.split(" ")[1].replaceFirst(',', '');
15 | if (strDay == '1') {
16 | strDay = strDay + "st";
17 | } else if (strDay == '2') {
18 | strDay = strDay + "nd";
19 | } else if (strDay == '3') {
20 | strDay = strDay + "rd";
21 | } else {
22 | strDay = strDay + "th";
23 | }
24 | var strMonth = today.split(" ")[0];
25 | var strYear = today.split(" ")[2];
26 | return "$strDay $strMonth $strYear";
27 | }
28 |
29 | final List names = [
30 | 'Revision - Kinematics',
31 | '3D Geometry',
32 | 'Revision - Organic Bonds',
33 | 'Plants and Life'
34 | ];
35 | final List times = ['5pm-6pm', '6pm-7pm', '7pm-8pm', '8pm-9pm'];
36 | final List colors = [
37 | Color(0xFFFF0000),
38 | Color(0xFF0000FF),
39 | Color(0xFFFFFF00),
40 | Color(0xFF00FF00)
41 | ];
42 |
43 | @override
44 | Widget build(BuildContext context) {
45 | return BackdropFilter(
46 | filter: ImageFilter.blur(sigmaX: 4, sigmaY: 4),
47 | child: Container(
48 | width: MediaQuery.of(context).size.width,
49 | height: MediaQuery.of(context).size.height,
50 | color: Color(0xFFEDEDED).withOpacity(0.65),
51 | child: Column(
52 | mainAxisAlignment: MainAxisAlignment.start,
53 | mainAxisSize: MainAxisSize.min,
54 | children: [
55 | Padding(
56 | padding:
57 | const EdgeInsets.symmetric(vertical: 48.0, horizontal: 10),
58 | child: Container(
59 | width: MediaQuery.of(context).size.width,
60 | child: Row(
61 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
62 | mainAxisSize: MainAxisSize.min,
63 | children: [
64 | Text(
65 | "Today",
66 | style: TextStyle(
67 | fontFamily: 'Red Hat Display',
68 | fontSize: 24,
69 | color: Color(0xFF343434),
70 | fontWeight: FontWeight.bold),
71 | ),
72 | Text(
73 | getStrToday(),
74 | style: TextStyle(
75 | fontFamily: 'Red Hat Display',
76 | fontSize: 24,
77 | color: Color(0xFF343434),
78 | fontWeight: FontWeight.bold),
79 | )
80 | ],
81 | ),
82 | ),
83 | ),
84 | Container(
85 | width: MediaQuery.of(context).size.width,
86 | height: MediaQuery.of(context).size.height * 0.8,
87 | child: ListView.builder(
88 | physics: ScrollPhysics(),
89 | itemCount: 5,
90 | itemBuilder: (context, index) {
91 | return index == 4
92 | ? Padding(
93 | padding: const EdgeInsets.symmetric(
94 | vertical: 8.0, horizontal: 14),
95 | child: CardWidget(
96 | gradient: true,
97 | button: true,
98 | child: Row(
99 | mainAxisAlignment: MainAxisAlignment.center,
100 | children: [
101 | Padding(
102 | padding: const EdgeInsets.all(8),
103 | child: Icon(
104 | BoxIcons.bx_plus,
105 | color: Color(0xFFFFFFFF),
106 | )),
107 | Padding(
108 | padding: const EdgeInsets.all(8),
109 | child: Text(
110 | "Add reminder",
111 | style: TextStyle(
112 | fontFamily: 'Red Hat Display',
113 | fontSize: 18,
114 | color: Color(0xFFFFFFFF)),
115 | ),
116 | ),
117 | ],
118 | ),
119 | height: 80,
120 | ),
121 | )
122 | : Padding(
123 | padding: const EdgeInsets.symmetric(
124 | vertical: 8.0, horizontal: 14),
125 | child: CardWidget(
126 | gradient: false,
127 | button: false,
128 | child: Row(
129 | children: [
130 | Column(
131 | mainAxisAlignment: MainAxisAlignment.center,
132 | crossAxisAlignment: CrossAxisAlignment.start,
133 | children: [
134 | Padding(
135 | padding:
136 | const EdgeInsets.fromLTRB(8, 8, 8, 2),
137 | child: Text(
138 | "${names[index]}.",
139 | style: TextStyle(
140 | fontFamily: 'Red Hat Display',
141 | fontSize: 18,
142 | color: Color(0xFF585858)),
143 | ),
144 | ),
145 | Padding(
146 | padding:
147 | const EdgeInsets.fromLTRB(8, 2, 8, 8),
148 | child: Text(
149 | "${times[index]}",
150 | style: TextStyle(
151 | fontFamily: 'Red Hat Display',
152 | fontSize: 14,
153 | color: Color(0xFF585858)),
154 | ),
155 | ),
156 | ],
157 | ),
158 | Spacer(),
159 | Container(
160 | width:
161 | MediaQuery.of(context).size.width * 0.3,
162 | decoration: BoxDecoration(
163 | borderRadius: BorderRadius.only(
164 | topLeft: Radius.elliptical(10, 50),
165 | bottomLeft:
166 | Radius.elliptical(10, 50)),
167 | gradient: LinearGradient(
168 | colors: [
169 | Color(0xFFFFFFFF),
170 | colors[index]
171 | ],
172 | begin: Alignment.topLeft,
173 | end: Alignment.bottomRight)),
174 | child: SizedBox(
175 | height: 80,
176 | ))
177 | ],
178 | ),
179 | height: 80,
180 | ),
181 | );
182 | },
183 | ),
184 | ),
185 | ],
186 | ),
187 | ),
188 | );
189 | }
190 | }
191 |
--------------------------------------------------------------------------------
/lib/ui/widgets/sectionHeader.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:flutter/cupertino.dart';
3 | import 'package:flutter/material.dart' as material;
4 |
5 | class SectionHeader extends StatelessWidget {
6 | const SectionHeader({
7 | Key? key,
8 | required this.text,
9 | required this.onPressed,
10 | }) : super(key: key);
11 | final String text;
12 | final Function onPressed;
13 | @override
14 | Widget build(BuildContext context) {
15 | return Row(
16 | mainAxisAlignment: MainAxisAlignment.center,
17 | children: [
18 | Container(
19 | height: 20,
20 | width: 4,
21 | margin: EdgeInsets.all(8),
22 | decoration: BoxDecoration(
23 | borderRadius: BorderRadius.circular(500),
24 | color: Color(0xFF343434)),
25 | ),
26 | Text(
27 | text,
28 | style: TextStyle().copyWith(
29 | fontSize: 17.0,
30 | ),
31 | ),
32 | Spacer(),
33 | CupertinoButton(
34 | child:
35 | Icon(BoxIcons.bx_chevron_right, color: material.Colors.lightBlue),
36 | onPressed: onPressed as void Function()?,
37 | )
38 | ],
39 | );
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/lib/ui/widgets/statsCard.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:elearning/theme/config.dart';
3 | import 'package:elearning/ui/pages/video.dart';
4 | import 'package:elearning/ui/widgets/card.dart';
5 | import 'package:flutter/cupertino.dart';
6 | import 'package:flutter/material.dart' as material;
7 |
8 | class StatsCard extends material.StatelessWidget {
9 | const StatsCard({
10 | material.Key? key,
11 | }) : super(key: key);
12 |
13 | @override
14 | material.Widget build(material.BuildContext context) {
15 | return material.Padding(
16 | padding: const material.EdgeInsets.all(10.0),
17 | child: CardWidget(
18 | gradient: false,
19 | button: true,
20 | width: 360,
21 | child: material.Column(
22 | mainAxisAlignment: material.MainAxisAlignment.start,
23 | children: [
24 | material.Padding(
25 | padding: const material.EdgeInsets.only(bottom: 6.0),
26 | child: material.GestureDetector(
27 | child: material.Container(
28 | padding: material.EdgeInsets.fromLTRB(0, 14, 0, 14),
29 | decoration: material.BoxDecoration(gradient: Colors().waves),
30 | child: material.Padding(
31 | padding: const EdgeInsets.all(8.0),
32 | child: material.Row(
33 | mainAxisAlignment: MainAxisAlignment.center,
34 | children: [
35 | Padding(
36 | padding: const EdgeInsets.all(8.0),
37 | child: Text(
38 | "3489",
39 | style: TextStyle(
40 | fontFamily: 'Red Hat Display',
41 | fontSize: 18,
42 | color: Color(0xFFFFFFFF)),
43 | ),
44 | ),
45 | Image.asset(
46 | 'assets/images/CoinSmall.png',
47 | width: 50,
48 | ),
49 | ],
50 | ),
51 | ),
52 | ),
53 | onTap: () {
54 | material.Navigator.push(
55 | context,
56 | CupertinoPageRoute(
57 | builder: (context) => VideoPage(),
58 | ),
59 | );
60 | },
61 | ),
62 | ),
63 | material.Padding(
64 | padding: const material.EdgeInsets.all(8.0),
65 | child: material.Text(
66 | "Statistics",
67 | overflow: material.TextOverflow.ellipsis,
68 | maxLines: 2,
69 | style: material.TextStyle(
70 | color: material.Color(0xFF535353),
71 | fontFamily: 'Red Hat Display',
72 | fontSize: 16),
73 | ),
74 | ),
75 | material.Padding(
76 | padding: const material.EdgeInsets.symmetric(horizontal: 8.0),
77 | child: material.Row(
78 | children: [
79 | material.Icon(BoxIcons.bx_question_mark, size: 16),
80 | material.Text(
81 | "23 Questions asked",
82 | style: material.TextStyle(
83 | color: material.Color(0xFFADADAD),
84 | fontFamily: 'Red Hat Display',
85 | fontSize: 10),
86 | ),
87 | material.Spacer(),
88 | material.Text(
89 | "12 days Streak",
90 | style: material.TextStyle(
91 | color: material.Color(0xFFADADAD),
92 | fontFamily: 'Red Hat Display',
93 | fontSize: 10),
94 | ),
95 | material.Icon(BoxIcons.bxs_flame, size: 16),
96 | ],
97 | ),
98 | ),
99 | material.Padding(
100 | padding: const material.EdgeInsets.symmetric(horizontal: 8.0),
101 | child: material.Row(
102 | children: [
103 | material.Icon(BoxIcons.bx_pen, size: 16),
104 | material.Text(
105 | "89 Questions answered",
106 | style: material.TextStyle(
107 | color: material.Color(0xFFADADAD),
108 | fontFamily: 'Red Hat Display',
109 | fontSize: 10),
110 | ),
111 | material.Spacer(),
112 | material.Text(
113 | "25 topics revised",
114 | style: material.TextStyle(
115 | color: material.Color(0xFFADADAD),
116 | fontFamily: 'Red Hat Display',
117 | fontSize: 10),
118 | ),
119 | material.Icon(BoxIcons.bx_book_open, size: 16),
120 | ],
121 | ),
122 | ),
123 | material.Spacer(),
124 | ],
125 | ),
126 | ),
127 | );
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/lib/ui/widgets/topBar.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:elearning/ui/widgets/card.dart';
3 | import 'package:flutter/cupertino.dart';
4 | import 'package:flutter/material.dart' as material;
5 | import 'package:flutter/services.dart';
6 |
7 | class TopBar extends StatefulWidget {
8 | const TopBar({
9 | Key? key,
10 | required this.controller,
11 | required this.expanded,
12 | required this.onMenuTap,
13 | }) : super(key: key);
14 |
15 | final TextEditingController controller;
16 | final bool expanded;
17 | final onMenuTap;
18 |
19 | @override
20 | _TopBarState createState() => _TopBarState();
21 | }
22 |
23 | class _TopBarState extends State {
24 | int tab = 0;
25 | @override
26 | Widget build(BuildContext context) {
27 | return Container(
28 | color: CupertinoColors.white,
29 | width: MediaQuery.of(context).size.width,
30 | height: widget.expanded
31 | ? MediaQuery.of(context).size.height * 0.35
32 | : MediaQuery.of(context).size.height * 0.19,
33 | child: Column(
34 | mainAxisSize: MainAxisSize.min,
35 | children: [
36 | Padding(
37 | padding:
38 | EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.04),
39 | child: Row(
40 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
41 | children: [
42 | Padding(
43 | padding: const EdgeInsets.symmetric(horizontal: 15),
44 | child: Text(
45 | "Hi, Akshay.",
46 | style: TextStyle(
47 | color: Color(0xFF343434),
48 | fontSize: 24,
49 | fontFamily: 'Red Hat Display',
50 | fontWeight: material.FontWeight.w600),
51 | ),
52 | ),
53 | Padding(
54 | padding: const EdgeInsets.symmetric(horizontal: 15),
55 | child: GestureDetector(
56 | child: material.CircleAvatar(
57 | backgroundImage: AssetImage('assets/images/user.png'),
58 | ),
59 | onTap: widget.onMenuTap,
60 | ),
61 | ),
62 | ],
63 | ),
64 | ),
65 | Padding(
66 | padding: const EdgeInsets.all(15.0),
67 | child: CupertinoTextField(
68 | decoration: BoxDecoration(
69 | borderRadius: BorderRadius.circular(10),
70 | color: material.Colors.white,
71 | boxShadow: [
72 | BoxShadow(
73 | blurRadius: 25,
74 | offset: Offset(0, 10),
75 | color: Color(0x1A636363),
76 | ),
77 | ]),
78 | padding: EdgeInsets.all(10),
79 | style: TextStyle(
80 | color: Color(0xFF343434),
81 | fontSize: 18,
82 | fontFamily: 'Red Hat Display'),
83 | enableInteractiveSelection: true,
84 | controller: widget.controller,
85 | expands: false,
86 | inputFormatters: [
87 | BlacklistingTextInputFormatter.singleLineFormatter
88 | ],
89 | keyboardType: TextInputType.text,
90 | suffix: Padding(
91 | padding: const EdgeInsets.symmetric(horizontal: 8.0),
92 | child: Icon(
93 | BoxIcons.bx_search,
94 | color: Color(0xFFADADAD),
95 | ),
96 | ),
97 | textInputAction: TextInputAction.search,
98 | textCapitalization: TextCapitalization.words,
99 | placeholder: "Search",
100 | placeholderStyle: TextStyle(
101 | color: Color(0xFFADADAD),
102 | fontSize: 18,
103 | fontFamily: 'Red Hat Display'),
104 | ),
105 | ),
106 | widget.expanded
107 | ? Container(
108 | width: MediaQuery.of(context).size.width,
109 | height: MediaQuery.of(context).size.height * 0.165,
110 | child: ListView.builder(
111 | scrollDirection: Axis.horizontal,
112 | itemCount: 4,
113 | itemBuilder: (context, index) {
114 | return Padding(
115 | padding: const EdgeInsets.fromLTRB(15, 15, 10, 30),
116 | child: CardWidget(
117 | gradient: false,
118 | button: true,
119 | duration: 200,
120 | border: tab == index
121 | ? Border(
122 | bottom: BorderSide(
123 | color: tab == 0
124 | ? Color(0xFF2828FF)
125 | : tab == 1
126 | ? Color(0xFFFF2E2E)
127 | : tab == 2
128 | ? Color(0xFFFFD700)
129 | : Color(0xFF33FF33),
130 | width: 5),
131 | )
132 | : null,
133 | child: Center(
134 | child: Column(
135 | mainAxisAlignment:
136 | material.MainAxisAlignment.spaceEvenly,
137 | children: [
138 | Icon(index == 0
139 | ? BoxIcons.bx_shape_circle
140 | : index == 1
141 | ? BoxIcons.bx_shape_polygon
142 | : index == 2
143 | ? BoxIcons.bx_shape_square
144 | : BoxIcons.bx_shape_triangle),
145 | Text(index == 0
146 | ? "Maths"
147 | : index == 1
148 | ? "Physics"
149 | : index == 2 ? "Chemistry" : "Biology")
150 | ],
151 | ),
152 | ),
153 | func: () {
154 | setState(() {
155 | tab = index;
156 | });
157 | },
158 | ),
159 | );
160 | },
161 | ),
162 | )
163 | : Container(),
164 | ],
165 | ),
166 | );
167 | }
168 | }
169 |
--------------------------------------------------------------------------------
/lib/ui/widgets/videoCard.dart:
--------------------------------------------------------------------------------
1 | import 'package:elearning/theme/box_icons_icons.dart';
2 | import 'package:elearning/theme/config.dart';
3 | import 'package:elearning/ui/pages/video.dart';
4 | import 'package:elearning/ui/widgets/card.dart';
5 | import 'package:flutter/cupertino.dart';
6 | import 'package:flutter/material.dart' as material;
7 |
8 | class VideoCard extends material.StatelessWidget {
9 | final bool long;
10 | const VideoCard({
11 | required this.long,
12 | material.Key? key,
13 | }) : super(key: key);
14 |
15 | @override
16 | material.Widget build(material.BuildContext context) {
17 | return material.Padding(
18 | padding: const material.EdgeInsets.all(10.0),
19 | child: CardWidget(
20 | gradient: false,
21 | button: true,
22 | width: long ? 360 : 180,
23 | child: material.Column(
24 | mainAxisAlignment: material.MainAxisAlignment.start,
25 | children: [
26 | material.Container(
27 | width: long ? 360 : 180,
28 | height: 87,
29 | decoration: material.BoxDecoration(
30 | image: material.DecorationImage(
31 | image: material.AssetImage('assets/images/video.jpg'),
32 | fit: material.BoxFit.cover),
33 | borderRadius: material.BorderRadius.only(
34 | topLeft: material.Radius.circular(10),
35 | topRight: material.Radius.circular(10),
36 | ),
37 | ),
38 | child: material.Text(""),
39 | ),
40 | material.Padding(
41 | padding: const material.EdgeInsets.all(8.0),
42 | child: material.Text(
43 | "Stars - What are they made up of ?",
44 | overflow: material.TextOverflow.ellipsis,
45 | maxLines: 2,
46 | style: material.TextStyle(
47 | color: material.Color(0xFF535353),
48 | fontFamily: 'Red Hat Display',
49 | fontSize: 16),
50 | ),
51 | ),
52 | material.Padding(
53 | padding: const material.EdgeInsets.symmetric(horizontal: 8.0),
54 | child: material.Row(
55 | children: [
56 | material.Icon(BoxIcons.bx_bar_chart_alt_2, size: 16),
57 | material.Text(
58 | "Beginner",
59 | style: material.TextStyle(
60 | color: material.Color(0xFFADADAD),
61 | fontFamily: 'Red Hat Display',
62 | fontSize: 10),
63 | ),
64 | material.Spacer(),
65 | material.Text(
66 | "12 mins",
67 | style: material.TextStyle(
68 | color: material.Color(0xFFADADAD),
69 | fontFamily: 'Red Hat Display',
70 | fontSize: 10),
71 | ),
72 | material.Icon(BoxIcons.bx_timer, size: 16),
73 | ],
74 | ),
75 | ),
76 | material.Spacer(),
77 | material.Padding(
78 | padding: const material.EdgeInsets.only(top: 6.0),
79 | child: material.GestureDetector(
80 | child: material.Container(
81 | padding: material.EdgeInsets.fromLTRB(0, 14, 0, 14),
82 | decoration: material.BoxDecoration(gradient: Colors().waves),
83 | child: material.Row(
84 | mainAxisAlignment: material.MainAxisAlignment.spaceEvenly,
85 | children: [
86 | material.Icon(BoxIcons.bx_play_circle,
87 | color: material.Colors.white),
88 | material.Text(
89 | "Watch Lecture",
90 | style: material.TextStyle(
91 | color: material.Colors.white,
92 | fontFamily: 'Red Hat Display',
93 | fontSize: 18),
94 | )
95 | ],
96 | ),
97 | ),
98 | onTap: () {
99 | Navigator.push(
100 | context,
101 | CupertinoPageRoute(
102 | builder: (context) => VideoPage(),
103 | ),
104 | );
105 | },
106 | ),
107 | ),
108 | ],
109 | ),
110 | ),
111 | );
112 | }
113 | }
114 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "2.8.1"
11 | boolean_selector:
12 | dependency: transitive
13 | description:
14 | name: boolean_selector
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "2.1.0"
18 | characters:
19 | dependency: transitive
20 | description:
21 | name: characters
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "1.1.0"
25 | charcode:
26 | dependency: transitive
27 | description:
28 | name: charcode
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "1.3.1"
32 | clock:
33 | dependency: transitive
34 | description:
35 | name: clock
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.1.0"
39 | cloud_firestore:
40 | dependency: "direct main"
41 | description:
42 | name: cloud_firestore
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "2.5.4"
46 | cloud_firestore_platform_interface:
47 | dependency: transitive
48 | description:
49 | name: cloud_firestore_platform_interface
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "5.4.3"
53 | cloud_firestore_web:
54 | dependency: transitive
55 | description:
56 | name: cloud_firestore_web
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "2.4.4"
60 | collection:
61 | dependency: transitive
62 | description:
63 | name: collection
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "1.15.0"
67 | cupertino_icons:
68 | dependency: "direct main"
69 | description:
70 | name: cupertino_icons
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "1.0.3"
74 | fake_async:
75 | dependency: transitive
76 | description:
77 | name: fake_async
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "1.2.0"
81 | ffi:
82 | dependency: transitive
83 | description:
84 | name: ffi
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "1.1.2"
88 | file:
89 | dependency: transitive
90 | description:
91 | name: file
92 | url: "https://pub.dartlang.org"
93 | source: hosted
94 | version: "6.1.2"
95 | firebase:
96 | dependency: transitive
97 | description:
98 | name: firebase
99 | url: "https://pub.dartlang.org"
100 | source: hosted
101 | version: "9.0.2"
102 | firebase_analytics:
103 | dependency: "direct main"
104 | description:
105 | name: firebase_analytics
106 | url: "https://pub.dartlang.org"
107 | source: hosted
108 | version: "8.3.4"
109 | firebase_analytics_platform_interface:
110 | dependency: transitive
111 | description:
112 | name: firebase_analytics_platform_interface
113 | url: "https://pub.dartlang.org"
114 | source: hosted
115 | version: "2.0.1"
116 | firebase_analytics_web:
117 | dependency: transitive
118 | description:
119 | name: firebase_analytics_web
120 | url: "https://pub.dartlang.org"
121 | source: hosted
122 | version: "0.3.0+1"
123 | firebase_auth:
124 | dependency: "direct main"
125 | description:
126 | name: firebase_auth
127 | url: "https://pub.dartlang.org"
128 | source: hosted
129 | version: "3.1.4"
130 | firebase_auth_platform_interface:
131 | dependency: transitive
132 | description:
133 | name: firebase_auth_platform_interface
134 | url: "https://pub.dartlang.org"
135 | source: hosted
136 | version: "6.1.2"
137 | firebase_auth_web:
138 | dependency: transitive
139 | description:
140 | name: firebase_auth_web
141 | url: "https://pub.dartlang.org"
142 | source: hosted
143 | version: "3.1.3"
144 | firebase_core:
145 | dependency: transitive
146 | description:
147 | name: firebase_core
148 | url: "https://pub.dartlang.org"
149 | source: hosted
150 | version: "1.8.0"
151 | firebase_core_platform_interface:
152 | dependency: transitive
153 | description:
154 | name: firebase_core_platform_interface
155 | url: "https://pub.dartlang.org"
156 | source: hosted
157 | version: "4.0.1"
158 | firebase_core_web:
159 | dependency: transitive
160 | description:
161 | name: firebase_core_web
162 | url: "https://pub.dartlang.org"
163 | source: hosted
164 | version: "1.1.0"
165 | flutter:
166 | dependency: "direct main"
167 | description: flutter
168 | source: sdk
169 | version: "0.0.0"
170 | flutter_calendar_carousel:
171 | dependency: "direct main"
172 | description:
173 | name: flutter_calendar_carousel
174 | url: "https://pub.dartlang.org"
175 | source: hosted
176 | version: "2.0.3"
177 | flutter_test:
178 | dependency: "direct dev"
179 | description: flutter
180 | source: sdk
181 | version: "0.0.0"
182 | flutter_web_plugins:
183 | dependency: transitive
184 | description: flutter
185 | source: sdk
186 | version: "0.0.0"
187 | google_sign_in:
188 | dependency: "direct main"
189 | description:
190 | name: google_sign_in
191 | url: "https://pub.dartlang.org"
192 | source: hosted
193 | version: "5.2.0"
194 | google_sign_in_platform_interface:
195 | dependency: transitive
196 | description:
197 | name: google_sign_in_platform_interface
198 | url: "https://pub.dartlang.org"
199 | source: hosted
200 | version: "2.1.0"
201 | google_sign_in_web:
202 | dependency: transitive
203 | description:
204 | name: google_sign_in_web
205 | url: "https://pub.dartlang.org"
206 | source: hosted
207 | version: "0.10.0+3"
208 | http:
209 | dependency: transitive
210 | description:
211 | name: http
212 | url: "https://pub.dartlang.org"
213 | source: hosted
214 | version: "0.13.4"
215 | http_parser:
216 | dependency: transitive
217 | description:
218 | name: http_parser
219 | url: "https://pub.dartlang.org"
220 | source: hosted
221 | version: "4.0.0"
222 | intl:
223 | dependency: transitive
224 | description:
225 | name: intl
226 | url: "https://pub.dartlang.org"
227 | source: hosted
228 | version: "0.17.0"
229 | js:
230 | dependency: transitive
231 | description:
232 | name: js
233 | url: "https://pub.dartlang.org"
234 | source: hosted
235 | version: "0.6.3"
236 | matcher:
237 | dependency: transitive
238 | description:
239 | name: matcher
240 | url: "https://pub.dartlang.org"
241 | source: hosted
242 | version: "0.12.10"
243 | meta:
244 | dependency: transitive
245 | description:
246 | name: meta
247 | url: "https://pub.dartlang.org"
248 | source: hosted
249 | version: "1.7.0"
250 | nested:
251 | dependency: transitive
252 | description:
253 | name: nested
254 | url: "https://pub.dartlang.org"
255 | source: hosted
256 | version: "1.0.0"
257 | path:
258 | dependency: transitive
259 | description:
260 | name: path
261 | url: "https://pub.dartlang.org"
262 | source: hosted
263 | version: "1.8.0"
264 | path_provider_linux:
265 | dependency: transitive
266 | description:
267 | name: path_provider_linux
268 | url: "https://pub.dartlang.org"
269 | source: hosted
270 | version: "2.1.0"
271 | path_provider_platform_interface:
272 | dependency: transitive
273 | description:
274 | name: path_provider_platform_interface
275 | url: "https://pub.dartlang.org"
276 | source: hosted
277 | version: "2.0.1"
278 | path_provider_windows:
279 | dependency: transitive
280 | description:
281 | name: path_provider_windows
282 | url: "https://pub.dartlang.org"
283 | source: hosted
284 | version: "2.0.3"
285 | platform:
286 | dependency: transitive
287 | description:
288 | name: platform
289 | url: "https://pub.dartlang.org"
290 | source: hosted
291 | version: "3.0.2"
292 | plugin_platform_interface:
293 | dependency: transitive
294 | description:
295 | name: plugin_platform_interface
296 | url: "https://pub.dartlang.org"
297 | source: hosted
298 | version: "2.0.2"
299 | process:
300 | dependency: transitive
301 | description:
302 | name: process
303 | url: "https://pub.dartlang.org"
304 | source: hosted
305 | version: "4.2.4"
306 | provider:
307 | dependency: "direct main"
308 | description:
309 | name: provider
310 | url: "https://pub.dartlang.org"
311 | source: hosted
312 | version: "6.0.1"
313 | quiver:
314 | dependency: transitive
315 | description:
316 | name: quiver
317 | url: "https://pub.dartlang.org"
318 | source: hosted
319 | version: "3.0.1+1"
320 | shared_preferences:
321 | dependency: "direct main"
322 | description:
323 | name: shared_preferences
324 | url: "https://pub.dartlang.org"
325 | source: hosted
326 | version: "2.0.8"
327 | shared_preferences_linux:
328 | dependency: transitive
329 | description:
330 | name: shared_preferences_linux
331 | url: "https://pub.dartlang.org"
332 | source: hosted
333 | version: "2.0.2"
334 | shared_preferences_macos:
335 | dependency: transitive
336 | description:
337 | name: shared_preferences_macos
338 | url: "https://pub.dartlang.org"
339 | source: hosted
340 | version: "2.0.2"
341 | shared_preferences_platform_interface:
342 | dependency: transitive
343 | description:
344 | name: shared_preferences_platform_interface
345 | url: "https://pub.dartlang.org"
346 | source: hosted
347 | version: "2.0.0"
348 | shared_preferences_web:
349 | dependency: transitive
350 | description:
351 | name: shared_preferences_web
352 | url: "https://pub.dartlang.org"
353 | source: hosted
354 | version: "2.0.2"
355 | shared_preferences_windows:
356 | dependency: transitive
357 | description:
358 | name: shared_preferences_windows
359 | url: "https://pub.dartlang.org"
360 | source: hosted
361 | version: "2.0.2"
362 | sky_engine:
363 | dependency: transitive
364 | description: flutter
365 | source: sdk
366 | version: "0.0.99"
367 | source_span:
368 | dependency: transitive
369 | description:
370 | name: source_span
371 | url: "https://pub.dartlang.org"
372 | source: hosted
373 | version: "1.8.1"
374 | stack_trace:
375 | dependency: transitive
376 | description:
377 | name: stack_trace
378 | url: "https://pub.dartlang.org"
379 | source: hosted
380 | version: "1.10.0"
381 | stream_channel:
382 | dependency: transitive
383 | description:
384 | name: stream_channel
385 | url: "https://pub.dartlang.org"
386 | source: hosted
387 | version: "2.1.0"
388 | string_scanner:
389 | dependency: transitive
390 | description:
391 | name: string_scanner
392 | url: "https://pub.dartlang.org"
393 | source: hosted
394 | version: "1.1.0"
395 | term_glyph:
396 | dependency: transitive
397 | description:
398 | name: term_glyph
399 | url: "https://pub.dartlang.org"
400 | source: hosted
401 | version: "1.2.0"
402 | test_api:
403 | dependency: transitive
404 | description:
405 | name: test_api
406 | url: "https://pub.dartlang.org"
407 | source: hosted
408 | version: "0.4.2"
409 | typed_data:
410 | dependency: transitive
411 | description:
412 | name: typed_data
413 | url: "https://pub.dartlang.org"
414 | source: hosted
415 | version: "1.3.0"
416 | vector_math:
417 | dependency: transitive
418 | description:
419 | name: vector_math
420 | url: "https://pub.dartlang.org"
421 | source: hosted
422 | version: "2.1.0"
423 | win32:
424 | dependency: transitive
425 | description:
426 | name: win32
427 | url: "https://pub.dartlang.org"
428 | source: hosted
429 | version: "2.2.10"
430 | xdg_directories:
431 | dependency: transitive
432 | description:
433 | name: xdg_directories
434 | url: "https://pub.dartlang.org"
435 | source: hosted
436 | version: "0.2.0"
437 | sdks:
438 | dart: ">=2.14.0 <3.0.0"
439 | flutter: ">=2.5.0"
440 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: elearning
2 | description: A new Flutter project.
3 |
4 | # The following line prevents the package from being accidentally published to
5 | # pub.dev using `pub publish`. This is preferred for private packages.
6 | publish_to: "none" # Remove this line if you wish to publish to pub.dev
7 |
8 | # The following defines the version and build number for your application.
9 | # A version number is three numbers separated by dots, like 1.2.43
10 | # followed by an optional build number separated by a +.
11 | # Both the version and the builder number may be overridden in flutter
12 | # build by specifying --build-name and --build-number, respectively.
13 | # In Android, build-name is used as versionName while build-number used as versionCode.
14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
16 | # Read more about iOS versioning at
17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: '>=2.12.0 <3.0.0'
22 |
23 | dependencies:
24 | cloud_firestore: ^2.5.4
25 | cupertino_icons: ^1.0.3
26 | firebase_analytics: ^8.3.4
27 | firebase_auth: ^3.1.4
28 | flutter:
29 | sdk: flutter
30 | flutter_calendar_carousel: ^2.0.3
31 | google_sign_in: ^5.2.0
32 | provider: ^6.0.1
33 | shared_preferences: ^2.0.8
34 |
35 | dev_dependencies:
36 | flutter_test:
37 | sdk: flutter
38 |
39 | # For information on the generic Dart part of this file, see the
40 | # following page: https://dart.dev/tools/pub/pubspec
41 | # The following section is specific to Flutter.
42 | flutter:
43 | # The following line ensures that the Material Icons font is
44 | # included with your application, so that you can use the icons in
45 | # the material Icons class.
46 | uses-material-design: true
47 |
48 | # To add assets to your application, add an assets section, like this:
49 | assets:
50 | - assets/images/
51 | # - images/a_dot_ham.jpeg
52 | # An image asset can refer to one or more resolution-specific "variants", see
53 | # https://flutter.dev/assets-and-images/#resolution-aware.
54 | # For details regarding adding assets from package dependencies, see
55 | # https://flutter.dev/assets-and-images/#from-packages
56 | # To add custom fonts to your application, add a fonts section here,
57 | # in this "flutter" section. Each entry in this list should have a
58 | # "family" key with the font family name, and a "fonts" key with a
59 | # list giving the asset and other descriptors for the font. For
60 | # example:
61 | fonts:
62 | - family: Red Hat Display
63 | fonts:
64 | - asset: assets/fonts/RedHatDisplay-Regular.ttf
65 | - asset: assets/fonts/RedHatDisplay-Italic.ttf
66 | style: italic
67 | - asset: assets/fonts/RedHatDisplay-Bold.ttf
68 | weight: 700
69 | - asset: assets/fonts/RedHatDisplay-Black.ttf
70 | weight: 900
71 | - asset: assets/fonts/RedHatDisplay-BlackItalic.ttf
72 | style: italic
73 | weight: 900
74 | - asset: assets/fonts/RedHatDisplay-BoldItalic.ttf
75 | style: italic
76 | weight: 700
77 | - asset: assets/fonts/RedHatDisplay-Medium.ttf
78 | weight: 600
79 | - asset: assets/fonts/RedHatDisplay-MediumItalic.ttf
80 | style: italic
81 | weight: 600
82 | - family: BoxIcons
83 | fonts:
84 | - asset: assets/fonts/BoxIcons.ttf
85 | # For details regarding fonts from package dependencies,
86 | # see https://flutter.dev/custom-fonts/#from-packages
87 |
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:elearning/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------