Abacus is a mobile expense management application built with Flutter for the course CT312H: MOBILE PROGRAMMING. This is a group project developed to support personal finance tracking through a clean mobile interface and practical budgeting features.
The application focuses on helping users record transactions, organize income and expense categories, monitor savings goals, manage account information, and receive local notifications. The project uses PocketBase for authentication and remote data handling, while sqflite is used for local data persistence on the device.
This repository contains a group project for the course CT312H: MOBILE PROGRAMMING.
Semester 1, Academic year: 2025-2026
Student ID 1: Huỳnh Tấn Đạt
Student Name 1: B2203438
Student ID 2: Nguyễn Minh Nhựt
Student Name 2: B2205896
Class Number: M01
Before running the project, make sure the following tools are installed:
Flutter SDKcompatible with the project's Dart SDK requirement inpubspec.yamlAndroid Studioor another IDE with Flutter support- An
Android emulatoror a physical Android device - A running
PocketBaseserver
You can verify your Flutter environment with:
flutter doctorgit clone https://github.com/nick1714/Abacus.git
cd \..\AbacusRun the following command in the project root:
flutter pub getThis project loads environment variables from a .env file at startup. Create a file named .env in the project root with the following content:
POCKETBASE_URL=http://10.0.2.2:8090Why this value is important:
10.0.2.2is the special address that lets an Android emulator talk to the host machine.- If you use a physical device, replace it with your computer's local IP address, for example:
http://192.168.1.10:8090 - If you use another backend host, update
POCKETBASE_URLaccordingly
Make sure your PocketBase server is running before launching the Flutter app. If PocketBase is not running, features such as sign up, login, and profile synchronization will not work correctly.
Example:
.\pocketbase.exe serve --http 0.0.0.0:8090List available devices:
flutter devicesRun the application:
flutter runIf you want to run on a specific device, use:
flutter run -d <device-id>After the application starts, the typical flow is:
- Launch the app and wait for the splash screen to finish.
- Create an account or log in with an existing account.
- Add income and expense transactions.
- Create and manage spending categories.
- Track savings goals and monitor monthly summaries.
- Open the account screen to update profile information and app settings.
Main functional areas included in the current codebase:
- Authentication with sign up, login, session restore, and logout
- Home dashboard with balance, income and expense summaries, monthly reports, and recent transactions
- Transaction management with add, edit, and grouped transaction views
- Category management for both expense and income categories
- Savings goal tracking
- Account profile management
- Theme switching and local notification support
- The project is a Flutter mobile application and is currently structured primarily for mobile platforms.
- The file
.envis required because the app callsdotenv.load()during startup. - If
PocketBaseis unavailable, authentication-related features may fail even if the app launches successfully. - The Android emulator default backend URL is
http://10.0.2.2:8090. - Local data is stored with
sqflite, which means some information is persisted on the device. - The existing
test/widget_test.dartfile is still the default Flutter sample test and does not reflect the actual application flow.