Skip to content

emil-st/flutter_internship

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Flutter Internship Project - README

Overview

In this internship, you will create a small Flutter application that simulates authentication and retrieves protected data as an authorized user. You are free to choose what kind of data to request from public APIs — your creativity and initiative are welcome.

The most important goal is to demonstrate understanding and implementation of:

  • User Authentication (JWT-based)
  • HTTP API communication using Dio
  • Error Handling with Interceptors
  • Network connectivity check using connectivity_plus
  • Navigation using go_router
  • Dependency Injection using get_it
  • Basic state management using Cubit or Bloc

💡 The design of the application is up to you. The most important thing is functionality. Please use the simplest UI components provided by Flutter (e.g. TextField, ElevatedButton, ListView, Text, etc.). There's no need for custom widgets, animations, or complex styling.

You must commit your code to this GitHub repository throughout the project:
🔗 https://github.com/emil-st/flutter_internship


🚀 Flutter Basics (Optional Refresher)

If you’re new to Flutter or want to review the basics, here are great starting points:

Feel free to skip this section if you are already confident in your Flutter knowledge.


Step 1: Environment Setup

Install Flutter

Use Flutter version 3.29.3. Follow the official Flutter installation guide:
🔗 https://docs.flutter.dev/get-started/install

Install a Code Editor

Recommended:

Install Android Studio

Used for emulators and device debugging:
🔗 https://developer.android.com/studio

Verify installation:

flutter --version

Make sure it shows version 3.29.3


Step 2: Create the Flutter Project

flutter create internship_app
cd internship_app

Step 3: Configure Dependencies

In pubspec.yaml, add the following packages and use the latest compatible versions:

  • dio
  • go_router
  • connectivity_plus
  • get_it
  • flutter_bloc
  • equatable
  • flutter_secure_storage

Then run:

flutter pub get

Step 4: Setup Git Version Control

If you're new to Git, it's a version control system that helps you track changes in code, collaborate with others, and manage project history. Learn more here:

How to Set Up Git

  1. Initialize Git in your project:
    git init
  2. Add the GitHub repository as a remote:
    git remote add origin https://github.com/emil-st/flutter_internship.git
  3. Add files and make your first commit:
    git add .
    git commit -m "Initial commit"
    git branch -M main
    git push -u origin main

What is .gitignore?

The .gitignore file lists which files and folders Git should ignore. Flutter automatically generates a .gitignore file to skip things like build folders and system-specific settings. Do not delete or modify it unless you know what you're doing.

You can safely commit directly to the main branch.


Step 5: Project Requirements & Concepts

Each section introduces a topic and gives you resources to study and implement it yourself.

🧠 What is a Backend and REST API?

🔐 Authentication (Login Screen, JWT Tokens)

🌐 HTTP Requests with Dio

🚨 Interceptors and Global Error Handling

📡 Connectivity Check with connectivity_plus

🔀 Navigation with go_router

🧪 Dependency Injection with get_it

🧠 State Management


Step 6: Public APIs for Practice

Simulated API for testing user authentication and CRUD operations.

Fake REST API for testing and prototyping — includes posts, comments, users, etc.

API to fetch data about public APIs. Great for building searchable API lists.


Final Evaluation Criteria

Minimum passing score is 3. Use this scale to self-assess your work.

✅ Score 3 (Satisfactory / Pass)

  • Simple login screen that works with dummy API
  • HTTP requests using Dio
  • Global error handling
  • Internet connection check
  • Navigation with go_router
  • Basic state handling using setState

👍 Score 4 (Good)

  • Folder structure by feature
  • Uses access token from login
  • Global dialogs for error/network
  • Uses GetIt
  • Uses Cubit or other simple state management

🚀 Score 5 (Excellent)

  • JWT with access/refresh tokens
  • Token storage with flutter_secure_storage
  • Auto token refresh
  • Bloc or Cubit used well across app
  • Well-structured and clean architecture

Glossary

  • JWT: JSON Web Token — a compact token for securely transmitting data.
  • Access Token: Used to authenticate requests.
  • Refresh Token: Used to obtain a new access token.
  • Interceptor: Middleware to inspect/modify requests/responses.
  • Connectivity Check: Detects network availability.
  • Cubit/Bloc: State management patterns.
  • Dependency Injection: Providing services where needed.
  • go_router: A modern routing solution for Flutter.
  • REST API: API based on HTTP verbs and resources.
  • Backend: Server-side logic and data storage.
  • .gitignore: Defines untracked files Git should ignore.

Final Notes

  • Don’t hesitate to ask questions.
  • Be proactive and experiment.
  • Commit your code regularly.

📘 Final Exam

At the end of the internship, you will take a theoretical exam on all topics covered. The complexity will match the grade level you reached (3, 4, or 5).

Good luck and enjoy your internship journey 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published