device_calendar_plus
A modern, federated Flutter plugin for reading and writing device calendar events on Android and iOS.
Note: This is the developer/contributor documentation. For plugin usage and API documentation, see the device_calendar_plus package README.
🏗️ Architecture
This is a federated plugin following Flutter's federated plugin architecture:
device_calendar_plus/
├── packages/
│ ├── device_calendar_plus/
│ ├── device_calendar_plus_platform_interface/
│ ├── device_calendar_plus_android/
│ └── device_calendar_plus_ios/
└── example/
Package Structure
-
device_calendar_plus: The main package that app developers depend on. Contains the public Dart API and exports platform interface types.
-
device_calendar_plus_platform_interface: Defines the interface that platform implementations must follow. Contains method signatures and data contracts.
-
device_calendar_plus_android: Android-specific implementation using Kotlin and the Android Calendar Provider API.
-
device_calendar_plus_ios: iOS-specific implementation using Swift and EventKit.
-
example/: Example app demonstrating plugin usage, also contains integration tests.
🚀 Getting Started
Prerequisites
- Flutter SDK (latest stable)
- For iOS development: Xcode 15+
- For Android development: Android Studio with Android SDK 24+
Optional (but recommended):
- Very Good CLI:
dart pub global activate very_good_cli - Makes running tests faster with optimized configuration
Setup
- Clone the repository:
git clone https://github.com/yourusername/device_calendar_plus.git
cd device_calendar_plus
- Install dependencies:
flutter pub get
This project uses Dart workspaces, so a single flutter pub get at the root will install dependencies for all packages.
🧪 Testing
Unit Tests
Run all unit tests across all packages using Very Good CLI (recommended):
very_good test --recursive
This will run tests in all /packages/*/test/ directories with optimized configuration.
Integration Tests
Integration tests are located in example/integration_test/ and test the plugin against real platform APIs.
Running on a Device/Emulator
From the example directory:
cd example
./run_integration_tests.sh <device-id>
Get the device ID from:
flutter devices
Platform-Specific Notes
iOS:
- Requires a simulator or physical device
- Calendar permissions will be requested during tests
- Tests create temporary calendars that are cleaned up
Android:
- Requires an emulator or physical device with API 24+
- Calendar permissions will be requested during tests
- Tests create temporary calendars that are cleaned up
🤝 Contributing
This project is closed to outside pull requests. Bug reports and feature requests are welcome - please open an issue. See CONTRIBUTING.md for the design philosophy and conventions.
📄 License
MIT © 2025 Bullet
See LICENSE for details.
Maintained by Bullet — a cross-platform task + notes + calendar app built with Flutter.