Darturbation
Advanced mock data generator for Dart and Flutter applications with context-aware generation, behavioral patterns, and Indonesian localization.
Features
- Context-aware data generation with logical field relationships
- Indonesian-first approach with authentic local data
- Behavioral pattern simulation for realistic user archetypes
- Advanced data structures (time series, hierarchical, graph)
- Flutter-specific utilities for UI testing
- API response mocking (REST, GraphQL, WebSocket)
- Multiple export formats (JSON, CSV, SQL)
- Memory-efficient streaming for large datasets
Installation
dependencies:
darturbation: ^2.0.2
dart pub get
Quick Start
import 'package:darturbation/darturbation.dart';
void main() {
// Generate single entities
final user = Darturbation.user();
final product = Darturbation.product();
// Generate bulk data
final users = Darturbation.users(count: 100);
final products = Darturbation.products(count: 50);
// Generate related data
final order = Darturbation.order(
user: user,
withProducts: [product]
);
// Custom schema generation
final customData = Darturbation.fromSchema(
schema: {
'firstName': String,
'age': int,
'salary': double,
'isActive': bool,
'joinDate': DateTime,
},
count: 100,
);
}
Core Capabilities
Data Generation
Generate realistic mock data with maintained relationships:
// E-commerce scenario
final scenario = Darturbation.scenario('ecommerce')
.users(100)
.products(200)
.orders()
.reviews()
.generate();
// Access generated data
final users = scenario['users'] as List<User>;
final products = scenario['products'] as List<Product>;
final orders = scenario['orders'] as List<Order>;
Advanced Data Structures
// Time series with trends and seasonality
final salesData = Darturbation.timeSeries(
startDate: DateTime(2023, 1, 1),
endDate: DateTime(2023, 12, 31),
interval: Duration(days: 1),
baseValue: 1000.0,
trend: 0.1,
seasonality: 0.3,
noise: 0.1,
);
// Hierarchical structures
final orgChart = Darturbation.hierarchical(
schema: {'name': String, 'title': String},
maxDepth: 4,
totalNodes: 100,
);
// Graph data
final socialNetwork = Darturbation.graph(
nodeCount: 100,
nodeSchema: {'name': String, 'age': int},
connectionProbability: 0.15,
);
// Correlated datasets
final metrics = Darturbation.correlatedSeries(
seriesNames: ['marketing', 'traffic', 'sales'],
correlationMatrix: [
[1.0, 0.8, 0.6],
[0.8, 1.0, 0.7],
[0.6, 0.7, 1.0],
],
count: 365,
);
Flutter Integration
// ListView data
final listData = Darturbation.listView(
itemCount: 50,
itemType: 'user_profile',
);
// Card widgets
final cards = Darturbation.cards(
cardCount: 20,
cardType: 'product',
);
// Form generation
final form = Darturbation.form(
formType: 'registration',
includeValidation: true,
);
// Navigation mock
final navigation = Darturbation.navigation(
routeCount: 15,
includeHistory: true,
);
// Theme data
final theme = Darturbation.theme(
themeName: 'dark',
isDark: true,
);
API Testing
// REST API response
final response = Darturbation.apiResponse(
endpoint: '/api/users',
method: 'GET',
itemCount: 20,
statusCode: 200,
);
// GraphQL response
final gqlResponse = Darturbation.graphqlResponse(
query: 'query GetUsers { users { id name } }',
dataSchema: {'users': List},
itemCount: 10,
);
// WebSocket message
final wsMessage = Darturbation.websocketMessage(
type: 'chat_message',
dataSchema: {'userId': String, 'message': String},
);
// Error response
final error = Darturbation.errorResponse(
statusCode: 404,
message: 'Resource not found',
);
Data Export
final users = Darturbation.users(count: 100);
// Export to JSON
final jsonData = Darturbation.export(users, to: 'json');
// Export to CSV
final csvData = Darturbation.export(users, to: 'csv');
// Export to SQL
final sqlData = Darturbation.export(
users,
to: 'sql',
tableName: 'app_users',
);
Streaming for Large Datasets
// Memory-efficient generation
final userStream = Darturbation.streamUsers(count: 10000);
await for (final user in userStream) {
await processUser(user);
}
Indonesian Localization
Darturbation provides authentic Indonesian data:
- Realistic Indonesian names (Budi Santoso, Siti Rahayu)
- Complete addresses with RT/RW, cities, and provinces
- Properly formatted phone numbers (0812-xxxx-xxxx)
- Local brands and product categories
- Indonesian payment methods (GoPay, OVO, DANA)
- Cultural patterns and behavioral data
Context-Aware Generation
Data maintains logical relationships:
- Email addresses match user names
- Cities match provinces
- Order dates align with user registration
- Product brands match categories
- Review timing follows purchase patterns
API Reference
Core Methods
// Single entity
User user()
Product product()
Order order({required User user, required List<Product> withProducts})
// Bulk generation
List<User> users({int count = 10})
List<Product> products({int count = 10})
List<Order> orders({int count, required List<User> fromUsers, required List<Product> withProducts})
// Streaming
Stream<User> streamUsers({int count = 10})
Stream<Product> streamProducts({int count = 10})
Stream<Order> streamOrders({required List<User> users, required List<Product> products, int count = 10})
// Schema-based
List<Map<String, dynamic>> fromSchema({required Map<String, Type> schema, int count = 10})
// Advanced
List<Map<String, dynamic>> timeSeries({required DateTime startDate, required DateTime endDate, ...})
List<Map<String, dynamic>> hierarchical({required Map<String, Type> schema, int maxDepth = 3, ...})
Map<String, dynamic> graph({int nodeCount = 50, ...})
Map<String, List<double>> correlatedSeries({required List<String> seriesNames, ...})
List<Map<String, dynamic>> withAnomalies({required Map<String, Type> schema, double anomalyRate = 0.1, ...})
Flutter Methods
List<Map<String, dynamic>> listView({int itemCount = 20, String itemType = 'generic'})
List<Map<String, dynamic>> cards({int cardCount = 10, String cardType = 'generic'})
Map<String, dynamic> form({String formType = 'generic', bool includeValidation = true})
Map<String, dynamic> navigation({int routeCount = 10, bool includeHistory = true})
Map<String, dynamic> theme({String themeName = 'default', bool isDark = false})
API Testing Methods
Map<String, dynamic> apiResponse({required String endpoint, String method = 'GET', ...})
Map<String, dynamic> graphqlResponse({required String query, ...})
Map<String, dynamic> websocketMessage({required String type, ...})
Map<String, dynamic> errorResponse({int statusCode = 500, String? message})
Utility Methods
int randomInt(int min, int max)
double randomDouble(double min, double max)
T randomChoice<T>(List<T> items)
bool randomBool([double probability = 0.5])
String generateId()
String export<T>(List<T> data, {required String to, String tableName = 'data'})
EcommerceScenario scenario(String type)
Testing Example
import 'package:flutter_test/flutter_test.dart';
import 'package:darturbation/darturbation.dart';
void main() {
test('User service processes data correctly', () {
final testUsers = Darturbation.users(count: 10);
final userService = UserService();
final result = userService.processUsers(testUsers);
expect(result.length, equals(10));
expect(result.every((user) => user.isValid), isTrue);
});
}
Use Cases
- UI testing with realistic mock data
- API endpoint testing and mocking
- Database seeding and testing
- Performance testing with large datasets
- Algorithm testing with correlated data
- Anomaly detection testing
- Form validation testing
- Navigation flow testing
Documentation
Contributing
Contributions are welcome! Please see our Contributing Guide for details on bug reports, feature requests, code contributions, and documentation improvements.
License
This project is licensed under the MIT License - see the LICENSE file for details.