Advanced mock data generator for Dart and Flutter applications with context-aware generation, behavioral patterns, and Indonesian localization.
- 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
dependencies:
darturbation: ^2.0.2dart pub getimport '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,
);
}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>;// 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,
);// 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,
);// 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',
);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',
);// Memory-efficient generation
final userStream = Darturbation.streamUsers(count: 10000);
await for (final user in userStream) {
await processUser(user);
}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
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
// 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, ...})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})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})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)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);
});
}- 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
Contributions are welcome! Please see our Contributing Guide for details on bug reports, feature requests, code contributions, and documentation improvements.
This project is licensed under the MIT License - see the LICENSE file for details.