Pensil教学App

Pensil教学App是一个专为数字时代辅导员创建的教育平台。Pensil教学App缩小了辅导员和学生之间的差距,无论他们相距多远,都能搭起一座桥梁。

应用截图

登录 验证OTP 首页 批次详情
作业列表 视频列表 文档列表 创建批次
创建批次 选择学生 选择学生 上传资料
上传学习资料 上传视频 上传作业

项目设置

点击展开

1. Flutter环境设置

2. 克隆仓库

$ git clone https://github.com/pensil-inc/flutter_pensil_app.git
$ cd flutter_pensil_app/

3. 设置Firebase应用(用于Google身份验证)

  1. 您需要创建一个 Firebase 实例。请按照 https://console.firebase.google.com 上的说明操作。
  2. 创建Firebase实例后,您需要启用Google身份验证。
  • 转到新实例的 Firebase 控制台。

  • 在左侧菜单中点击“身份验证”。

  • 点击“登录方法”选项卡。

  • 点击“Google”并启用它。

  • 在Firebase实例中为Android创建一个应用,包名应为> com.pensil.pensilapp

  • 运行以下命令获取您的 SHA-1 密钥。

keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
  • 在 Firebase 控制台中,在您的 Android 应用的设置中,通过点击“添加指纹”来添加您的 SHA-1 密钥。

  • 下载google-services.json

  • google-services.json 放入 /android/app/

  1. (如果不在 iOS 上运行,则跳过)
  • 在 Firebase 实例中为 iOS 创建一个应用,使用您的应用包名。
  • 按照说明下载 GoogleService-Info.plist。
  • 在 Xcode 中打开,右键单击 Runner 文件夹,选择“将文件添加到‘Runner’”菜单,然后选择 GoogleService-Info.plist 文件,将其添加到 Xcode 中的 /ios/Runner。
  • 在文本编辑器中打开 /ios/Runner/Info.plist。找到 CFBundleURLSchemes 键。此键的值数组中的第二个项目特定于 Firebase 实例。将其替换为 GoogleService-Info.plist 中 REVERSED_CLIENT_ID 的值。

项目结构

点击展开
|-- lib
|   |-- build.yaml
|   |-- config
|   |   |-- config.dart
|   |   '-- configs.dart
|   |-- helper
|   |   |-- constants.dart
|   |   |-- enum.dart
|   |   |-- images.dart
|   |   |-- shared_prefrence_helper.dart
|   |   '-- utility.dart
|   |-- locator.dart
|   |-- main.dart
|   |-- model
|   |   |-- actor_model.dart
|   |   |-- batch_meterial_model.dart
|   |   |-- batch_model.dart
|   |   | (8 more...)
|   |   |-- quiz_model.dart
|   |   |-- subject.dart
|   |   '-- video_model.dart
|   |-- resources
|   |   |-- contact_service.dart
|   |   |-- exceptions
|   |   |   '-- exceptions.dart
|   |   |-- repository
|   |   |   |-- batch_repository.dart
|   |   |   '-- teacher
|   |   |       '-- teacher_repository.dart
|   |   '-- service
|   |       |-- api_gatway.dart
|   |       |-- api_gatway_impl.dart
|   |       |-- dio_client.dart
|   |       |-- notification_service.dart
|   |       '-- session
|   |           |-- session.dart
|   |           '-- session_impl.dart
|   |-- states
|   |   |-- auth
|   |   |   '-- auth_state.dart
|   |   |-- base_state.dart
|   |   |-- home_state.dart
|   |   |-- notificaion
|   |   |   '-- notification_state.dart
|   |   |-- quiz
|   |   |   '-- quiz_state.dart
|   |   '-- teacher
|   |       |-- announcement_state.dart
|   |       |-- batch_detail_state.dart
|   |       |-- create_batch_state.dart
|   |       |-- material
|   |       |   '-- batch_material_state.dart
|   |       |-- poll_state.dart
|   |       '-- video
|   |           '-- video_state.dart
|   '-- ui
|       |-- app.dart
|       |-- kit
|       |   |-- alert.dart
|       |   '-- overlay_loader.dart
|       |-- page
|       |   |-- announcement
|       |   |   '-- create_announcement.dart
|       |   |-- auth
|       |   |   |-- forgot_password.dart
|       |   |   |-- login.dart
|       |   |   |-- signup.dart
|       |   |   |-- update_password.dart
|       |   |   |-- verify_Otp.dart
|       |   |   '-- widgets
|       |   |       '-- Otp_widget.dart
|       |   |-- batch
|       |   |   |-- batch_master_page.dart
|       |   |   |-- create_batch
|       |   |   |   |-- create_batch.dart
|       |   |   |   |-- device_contacts_page.dart
|       |   |   |   |-- search_student_delegate.dart
|       |   |   |   '-- widget
|       |   |   |       |-- add_students_widget.dart
|       |   |   |       |-- batch_time_slots.dart
|       |   |   |       '-- search_batch_delegate.dart
|       |   |   |-- pages
|       |   |   |   |-- batch_assignment_page.dart
|       |   |   |   |-- detail
|       |   |   |   |   |-- batch_detail_page.dart
|       |   |   |   |   '-- student_list.dart
|       |   |   |   |-- material
|       |   |   |   |   |-- batch_study_material_page.dart
|       |   |   |   |   |-- upload_material.dart
|       |   |   |   |   '-- widget
|       |   |   |   |       '-- batch_material_card.dart
|       |   |   |   |-- quiz
|       |   |   |   |   |-- quiz_list_page.dart
|       |   |   |   |   |-- result
|       |   |   |   |   |   |-- quiz_result_page.dart
|       |   |   |   |   |   '-- view_quiz_solution.dart
|       |   |   |   |   '-- start
|       |   |   |   |       |-- start_quiz.dart
|       |   |   |   |       '-- widget
|       |   |   |   |           |-- question_count_section.dart
|       |   |   |   |           '-- timer.dart
|       |   |   |   '-- video
|       |   |   |       |-- add_video_page.dart
|       |   |   |       |-- batch_videos_page.dart
|       |   |   |       |-- video_player_pag2e.dart
|       |   |   |       |-- video_player_page.dart
|       |   |   |       |-- video_preview.dart
|       |   |   |       '-- widget
|       |   |   |           '-- batch_video_Card.dart
|       |   |   '-- widget
|       |   |       '-- tile_action_widget.dart
|       |   |-- common
|       |   |   |-- pdf_view.dart
|       |   |   |-- splash.dart
|       |   |   '-- web_view.page.dart
|       |   |-- home
|       |   |   |-- home_Scaffold.dart
|       |   |   |-- home_page_student.dart
|       |   |   |-- home_page_teacher.dart
|       |   |   |-- student_list_preview.dart
|       |   |   '-- widget
|       |   |       |-- announcement_widget.dart
|       |   |       |-- batch_widget.dart
|       |   |       '-- poll_widget.dart
|       |   |-- notification
|       |   |   '-- notifications_page.dart
|       |   '-- poll
|       |       |-- View_all_poll_page.dart
|       |       |-- create_poll.dart
|       |       '-- poll_option_widget.dart
|       |-- theme
|       |   |-- extentions.dart
|       |   |-- light_color.dart
|       |   |-- text_theme.dart
|       |   '-- theme.dart
|       '-- widget
|           |-- fab
|           |   |-- animated_fab.dart
|           |   '-- fab_button.dart
|           |-- form
|           |   |-- p_textfield.dart
|           |   '-- validator.dart
|           |-- image_viewer.dart
|           |-- p_avatar.dart
|           |-- p_button.dart
|           |-- p_chiip.dart
|           |-- p_loader.dart
|           |-- p_title_text.dart
|           |-- secondary_app_bar.dart
|           '-- url_Text.dart
|-- pubspec.yaml

依赖项

点击展开

服务器

这款Pensil教学App在后端使用Node.JS + V8引擎(基于Express)来存储、检索和执行应用程序数据的逻辑操作。
pensil-app-backend 仓库包含服务器端代码。

GitHub

https://github.com/pensil-inc/flutter_pensil_app