darturbation 2.0.2
darturbation: ^2.0.2 copied to clipboard
An advanced, context-aware, and behavioral mock data generator for Dart & Flutter.
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.