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
If you’re new to Flutter or want to review the basics, here are great starting points:
- 📘 Flutter Official Documentation - Basics
- 🎥 Flutter Crash Course - Academind
- 📘 Flutter Layout Cheat Sheet
- 🎥 Flutter for Beginners - FreeCodeCamp
Feel free to skip this section if you are already confident in your Flutter knowledge.
Use Flutter version 3.29.3. Follow the official Flutter installation guide:
🔗 https://docs.flutter.dev/get-started/install
Recommended:
- Visual Studio Code: https://code.visualstudio.com/
Be sure to install Flutter and Dart extensions.
Used for emulators and device debugging:
🔗 https://developer.android.com/studio
Verify installation:
flutter --versionMake sure it shows version 3.29.3
flutter create internship_app
cd internship_appIn pubspec.yaml, add the following packages and use the latest compatible versions:
diogo_routerconnectivity_plusget_itflutter_blocequatableflutter_secure_storage
Then run:
flutter pub getIf 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:
- 🔗 https://www.atlassian.com/git/tutorials/what-is-version-control
- 🔗 https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/
- Initialize Git in your project:
git init
- Add the GitHub repository as a remote:
git remote add origin https://github.com/emil-st/flutter_internship.git
- Add files and make your first commit:
git add . git commit -m "Initial commit" git branch -M main git push -u origin main
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.
Each section introduces a topic and gives you resources to study and implement it yourself.
- 🔗 https://www.codecademy.com/articles/what-is-rest
- 🔗 https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Introduction
- 🔗 https://www.freecodecamp.org/news/rest-api-tutorial/
- 🔗 https://auth0.com/learn/json-web-tokens/
- 🔗 https://blog.logrocket.com/flutter-login-authentication-flow/
- 🔗 https://reqres.in
- 🔗 https://resocoder.com/2020/03/09/flutter-tdd-clean-architecture-course-2-getit-dependency-injection/
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.
Minimum passing score is 3. Use this scale to self-assess your work.
- 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
- Folder structure by feature
- Uses access token from login
- Global dialogs for error/network
- Uses GetIt
- Uses Cubit or other simple state management
- 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
- 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.
- Don’t hesitate to ask questions.
- Be proactive and experiment.
- Commit your code regularly.
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 🚀