A modern note-taking application that allows you to doodle, take screenshots, upload images, use voice note, sync to cloud and save to multiple servers.
- Flutter SDK (^3.29.2)
- Dart SDK
- Android Studio / VS Code with Flutter extensions
- Android SDK / Xcode (for iOS development)
- Install dependencies:
flutter pub getQuicknote Pro includes Firebase Analytics for tracking user engagement and monetization events. The app runs perfectly without Firebase configuration in a safe no-op mode.
Required files for Firebase Analytics:
- Android:
android/app/google-services.json - iOS:
ios/Runner/GoogleService-Info.plist - Web:
lib/firebase_options.dart(generated byflutterfire configure) - Gradle plugin wiring:
classpath com.google.gms:google-servicesand apply plugin in app module
Setup Instructions:
- Install FlutterFire CLI:
dart pub global activate flutterfire_cli - Configure Firebase:
flutterfire configure - Follow the prompts to create/link your Firebase project
For detailed setup instructions, see Firebase Analytics Setup Guide.
Without Firebase: The app operates in safe no-op mode, logging analytics calls to debug console only.
- Run the application:
flutter runflutter_app/
βββ android/ # Android-specific configuration
βββ ios/ # iOS-specific configuration
βββ lib/
β βββ core/ # Core utilities and services
β β βββ utils/ # Utility classes
β βββ presentation/ # UI screens and widgets
β β βββ splash_screen/ # Splash screen implementation
β βββ routes/ # Application routing
β βββ theme/ # Theme configuration
β βββ widgets/ # Reusable UI components
β βββ main.dart # Application entry point
βββ assets/ # Static assets (images, fonts, etc.)
βββ pubspec.yaml # Project dependencies and configuration
βββ README.md # Project documentation
To add new routes to the application, update the lib/routes/app_routes.dart file:
import 'package:flutter/material.dart';
import 'package:package_name/presentation/home_screen/home_screen.dart';
class AppRoutes {
static const String initial = '/';
static const String home = '/home';
static Map<String, WidgetBuilder> routes = {
initial: (context) => const SplashScreen(),
home: (context) => const HomeScreen(),
// Add more routes as needed
}
}This project includes a comprehensive theming system with both light and dark themes:
// Access the current theme
ThemeData theme = Theme.of(context);
// Use theme colors
Color primaryColor = theme.colorScheme.primary;The theme configuration includes:
- Color schemes for light and dark modes
- Typography styles
- Button themes
- Input decoration themes
- Card and dialog themes
The app is built with responsive design using the Sizer package:
// Example of responsive sizing
Container(
width: 50.w, // 50% of screen width
height: 20.h, // 20% of screen height
child: Text('Responsive Container'),
)QuickNote Pro includes comprehensive backup and import capabilities that work without requiring cloud storage credentials:
- Export All Notes: Create a ZIP backup containing all your notes and media files
- Import from Backup: Restore notes from ZIP or JSON backup files
- Safe Merge Strategy: Smart conflict resolution using last-write-wins based on timestamps
- Import as Copies: Option to create new IDs for imported notes to avoid conflicts
- Cloud Sync Integration: Optional automatic sync after import when cloud provider is connected
- Go to Settings > Cloud & Data > Backup & Import
- Tap Export All Notes
- Review the export summary showing note count, media files, and estimated size
- Confirm the export
- Use the system share dialog to save the backup file anywhere
- Go to Settings > Cloud & Data > Backup & Import
- Tap Import from File
- Select a ZIP or JSON backup file
- Configure import options:
- Import as copies: Creates new IDs to avoid conflicts
- Sync after import: Automatically sync to cloud if connected
- Review the import preview and confirm
- View the import summary showing created/updated/skipped notes
quicknote_backup_YYYYMMDD_HHMM.zip
βββ notes.json # Array of note objects with metadata
βββ media/ # Binary assets referenced by notes
βββ image1.jpg
βββ image2.png
βββ voice1.m4a
{
"id": "unique_note_id",
"title": "Note Title",
"content": "Note content text",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-16T14:45:00.000Z",
"folder": "Personal",
"tags": ["tag1", "tag2"],
"images": ["image1.jpg"],
"voiceNotes": ["voice1.m4a"],
"pinned": false
}- Single note: JSON object with note data
- Multiple notes: JSON array of note objects
- Media files are not included (graceful warnings provided)
- No Storage Permissions Required: Uses system share dialogs and app documents directory
- Local Processing: All backup/import operations happen locally on your device
- No Cloud Dependencies: Works completely offline
- User Control: You choose where to save and store backup files
- Android: Full support with SAF (Storage Access Framework)
- iOS: Full support with system share sheets
- Desktop: Supported with platform-specific file dialogs
- Web: Download support (media extraction limitations may apply)
- Large media collections may create substantial backup file sizes
- Web platform has limited media file handling capabilities
- Import validation requires well-formed JSON/ZIP structures
- Sync integration only available when cloud provider is configured
Build the application for production:
# For Android
flutter build apk --release
# For iOS
flutter build ios --releaseSee docs/monetization for plans, tracking, and outlines:
- docs/monetization/README.md
- docs/monetization/architecture.md
- docs/monetization/ads-integration.md
- docs/monetization/pricing-tiers.md
- docs/monetization/metrics.md
- docs/monetization/release-plan.md
Built with β€οΈ by Mikael Kraft