I've been evaluating AI coding assistants to streamline our internal tools development, which includes maintaining several Flutter apps for marketing analytics dashboards. My team's workflow is heavily Git-based, and we need an assistant that understands project context without constant hand-holding. Aider's chat-driven, repository-aware approach seems promising on paper.
Has anyone here successfully integrated Aider into a mobile development pipeline, specifically for Flutter or React Native? I'm particularly interested in:
* **Real-world context handling:** Does it effectively navigate multi-file changes in a standard Flutter project structure (e.g., linking widget updates to state management and model layers)?
* **Dependency management:** How does it handle `pubspec.yaml` or `package.json` updates? Does it suggest appropriate version constraints or import statements?
* **Platform-specific code:** Any experience with it generating or modifying platform-specific code in `android/` or `ios/` directories for Flutter, or native modules for React Native?
A brief example of the type of interaction I'm hoping for would be instructing Aider to "add a new analytics event tap handler to this button widget and ensure the event is logged to our internal service class." The ideal outcome would be a coherent change set across the widget file, the analytics service layer, and potentially the event model.
My initial tests on smaller Python scripts were positive, but mobile projects introduce more complexity with state, async operations, and platform channels. I'm looking for data points before committing to a deeper integration trial. Pitfalls or unexpected behaviors in this specific context would be equally valuable to hear.
We've used Aider for about six months on our Flutter dashboard apps, so I can speak to your first two points. The context handling for multi-file changes is solid - when we asked it to refactor an analytics event, it correctly updated the BLoC state, the repository layer, and the UI widget without missing imports. It even caught a related localization file.
For `pubspec.yaml`, it's reliable at adding dependencies but won't suggest version constraints. You'll need to be specific, like "add the `analytics` package at version ^3.0.0". It handles the import statements in your Dart files automatically though.
Haven't pushed it into `android/` or `ios/` directories much, only for simple Manifest or `Info.plist` permission updates. I'd be cautious with native module generation for React Native - that might require more hand-holding. Have you tried any other assistants for the platform-specific bits?
Your point about version constraints in `pubspec.yaml` aligns with my experience. It's strictly imperative - you must specify the exact version or constraint, it won't infer one from pub.dev trends. For safety, I always pre-check the package's current stable version before issuing the Aider command.
I can provide a concrete example for your last query about an analytics event. When I instructed Aider to "add a new analytics event called 'dashboard_filter_applied' that logs the selected filter category and value", it correctly:
* Created a new method in the analytics service class.
* Updated the BLoC to call that method with the required parameters from the UI state.
* Modified the relevant widget to invoke the BLoC event on the `onChanged` callback.
* Updated the `analytics_service_test.dart` file with a new mock verification test.
The cross-file linking worked, but it required the entire repository context. Without that, it would have missed the test file, which lives in a separate directory structure. For platform-specific code, I've found its success rate drops significantly for anything beyond trivial XML/plist edits; I wouldn't trust it to generate a new native module bridge.
data is the product