Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Advanced Mock Data Generator to create realistic data for testing and development for Dart & Flutter Development

License

Notifications You must be signed in to change notification settings

mathtechstudio/darturbation

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’¦ Darturbation πŸ’¦: Advanced Mock Data Generator for Dart & Flutter

Dart CI Version Platforms

Darturbation is the most advanced mock data generator for Dart and Flutter applications, designed specifically for developers who need realistic, context-aware, and behaviorally consistent test data. Unlike traditional faker libraries, Darturbation generates data that maintains logical relationships and follows real-world patterns.

πŸš€ What's New in v2.0.1

🎯 Advanced Data Generation

  • Time Series Data - Generate realistic data with trends, seasonality, and noise
  • Hierarchical Structures - Create nested data with parent-child relationships
  • Graph Data - Generate network data with nodes and edges
  • Correlated Datasets - Create mathematically correlated data series
  • Anomaly Injection - Add realistic outliers for testing data validation

πŸ“± Flutter-Specific Features

  • ListView/GridView Data - Optimized mock data for Flutter list widgets
  • Card Widget Data - Pre-structured data for Material Design cards
  • Form Generation - Complete form data with validation rules
  • Navigation Mock - Route and navigation history simulation
  • Theme Data - Generate Flutter theme configurations

🌐 API Testing Tools

  • REST API Mocking - Generate realistic API responses with proper headers
  • GraphQL Support - Create GraphQL-compliant responses
  • WebSocket Messages - Mock real-time message payloads
  • Error Responses - Generate proper HTTP error responses with status codes

πŸ† Core Value Proposition

1. Indonesian-First Approach

Generate authentic Indonesian data that feels real:

  • Authentic Names: Budi Santoso, Siti Rahayu, Agus Setiawan
  • Real Addresses: Complete with Indonesian cities, provinces, and RT/RW
  • Local Phone Numbers: Properly formatted Indonesian mobile numbers
  • Cultural Context: Data that reflects Indonesian cultural patterns

2. Context-Aware Intelligence

Smart data generation that maintains logical relationships:

  • Related Fields: Email addresses match names, cities match provinces
  • Behavioral Consistency: User demographics influence purchasing patterns
  • Temporal Logic: Order dates align with user registration, reviews follow purchases
  • Geographic Correlation: Addresses, cities, and postal codes are geographically consistent

3. Behavioral Pattern Simulation

Realistic patterns that mirror real-world behavior:

  • Seasonal Trends: Ramadan boost, Christmas sales, payday effects
  • User Archetypes: Power users, casual shoppers, inactive accounts
  • Natural Distributions: Pareto principle for sales, realistic rating distributions
  • Time-Based Patterns: Weekend activity, business hours, seasonal variations

πŸ“¦ Installation

Add Darturbation to your pubspec.yaml:

dependencies:
  darturbation: ^2.0.0

Then run:

dart pub get

πŸš€ Quick Start

import 'package:darturbation/darturbation.dart';

void main() {
  // Generate a single user
  final user = Darturbation.user();
  print('${user.firstName} ${user.lastName} - ${user.email}');
  
  // Generate multiple products
  final products = Darturbation.products(count: 5);
  products.forEach((p) => print('${p.name}: Rp${p.price}'));
  
  // Generate with custom schema
  final customData = Darturbation.fromSchema(
    schema: {
      'firstName': String,
      'lastName': String,
      'age': int,
      'isActive': bool,
      'salary': double,
      'joinDate': DateTime,
    },
    count: 10,
  );
}

🎯 Advanced Features

πŸ“Š Time Series Data Generation

Perfect for testing analytics dashboards and time-based visualizations:

// Generate sales data with trend 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,           // 10% upward trend
  seasonality: 0.3,     // 30% seasonal variation
  noise: 0.1,           // 10% random noise
);

// Use in your charts
salesData.forEach((point) {
  print('${point['date']}: ${point['value']}');
});

🌳 Hierarchical Data Structures

Generate organizational charts, category trees, or any nested data:

// Create company org chart
final orgChart = Darturbation.hierarchical(
  schema: {
    'name': String,
    'title': String,
    'department': String,
    'salary': double,
  },
  maxDepth: 4,
  totalNodes: 100,
  childrenPerNode: [2, 5], // 2-5 direct reports per manager
);

// Access hierarchical relationships
orgChart.forEach((employee) {
  print('${employee['name']} (${employee['title']}) - Depth: ${employee['depth']}');
  print('Reports to: ${employee['parentId']}');
  print('Direct Reports: ${employee['children'].length}');
});

πŸ•ΈοΈ Graph Data Generation

Create network data for social networks, dependency graphs, or relationship analysis:

// Generate social network data
final socialNetwork = Darturbation.graph(
  nodeCount: 100,
  nodeSchema: {
    'name': String,
    'age': int,
    'interests': String,
    'location': String,
  },
  connectionProbability: 0.15, // 15% chance of connection
  directed: false,
);

// Access nodes and relationships
final nodes = socialNetwork['nodes'];
final edges = socialNetwork['edges'];
final metadata = socialNetwork['metadata'];

print('Generated ${nodes.length} users with ${edges.length} connections');
print('Average connections per user: ${metadata['averageDegree']}');

πŸ“ˆ Correlated Data Series

Generate mathematically correlated datasets for testing analytics algorithms:

// Create correlated business metrics
final businessMetrics = Darturbation.correlatedSeries(
  seriesNames: ['marketing_spend', 'website_traffic', 'sales_revenue'],
  correlationMatrix: [
    [1.0, 0.8, 0.6],  // marketing_spend correlations
    [0.8, 1.0, 0.7],  // website_traffic correlations  
    [0.6, 0.7, 1.0],  // sales_revenue correlations
  ],
  count: 365, // One year of daily data
  means: [10000, 50000, 25000],
  standardDeviations: [2000, 10000, 5000],
);

// Use for testing correlation analysis
print('Marketing Spend vs Sales correlation: ${calculateCorrelation(
  businessMetrics['marketing_spend']!,
  businessMetrics['sales_revenue']!,
)}');

🚨 Data with Anomalies

Generate datasets with realistic outliers for testing data validation and anomaly detection:

// Create user data with anomalies
final userData = Darturbation.withAnomalies(
  schema: {
    'age': int,
    'income': double,
    'email': String,
    'lastLogin': DateTime,
  },
  count: 1000,
  anomalyRate: 0.05, // 5% anomalies
  anomalyTypes: ['extreme_values', 'missing_data', 'inconsistent_patterns'],
);

// Filter and analyze anomalies
final anomalies = userData.where((item) => item['isAnomaly'] == true).toList();
print('Found ${anomalies.length} anomalies:');
anomalies.forEach((anomaly) {
  print('Type: ${anomaly['anomalyType']}, Data: ${anomaly['data']}');
});

πŸ“± Flutter-Specific Features

πŸ“‹ ListView/GridView Mock Data

Generate data optimized for Flutter list widgets:

// Generate user profile list data
final userProfiles = Darturbation.listView(
  itemCount: 50,
  itemType: 'user_profile',
);

// Use in ListView.builder
ListView.builder(
  itemCount: userProfiles.length,
  itemBuilder: (context, index) {
    final user = userProfiles[index];
    return ListTile(
      leading: CircleAvatar(
        backgroundImage: NetworkImage(user['avatarUrl']),
      ),
      title: Text('${user['firstName']} ${user['lastName']}'),
      subtitle: Text(user['bio']),
      trailing: Text(user['joinedDate'].toString()),
    );
  },
);

🎴 Card Widget Data

Pre-structured data for Material Design cards:

// Generate product cards
final productCards = Darturbation.cards(
  cardCount: 20,
  cardType: 'product',
);

// Use in card widgets
GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
  itemCount: productCards.length,
  itemBuilder: (context, index) {
    final product = productCards[index];
    return Card(
      child: Column(
        children: [
          Image.network(product['imageUrl']),
          Text(product['name']),
          Text('Rp${product['price']}'),
          Row(
            children: [
              Icon(Icons.star),
              Text('${product['rating']}'),
              Text('(${product['reviewCount']} reviews)'),
            ],
          ),
        ],
      ),
    );
  },
);

πŸ“ Form Generation with Validation

Complete form data with validation rules:

// Generate registration form
final registrationForm = Darturbation.form(
  formType: 'registration',
  includeValidation: true,
  includeInitialValues: true,
);

// Use form data to build forms
final formFields = registrationForm['fields'] as List;
Column(
  children: formFields.map((field) {
    return TextFormField(
      decoration: InputDecoration(
        labelText: field['label'],
        hintText: field['initialValue']?.toString(),
      ),
      validator: (value) {
        final validation = field['validation'];
        if (validation['required'] && (value?.isEmpty ?? true)) {
          return validation['message'];
        }
        return null;
      },
    );
  }).toList(),
);

🧭 Navigation Mock Data

Generate navigation routes and history:

// Generate app navigation structure
final navigationData = Darturbation.navigation(
  routeCount: 15,
  includeHistory: true,
);

// Use for testing navigation
final routes = navigationData['routes'] as List;
final currentRoute = navigationData['currentRoute'];
final history = navigationData['history'] as List;

// Build navigation drawer
Drawer(
  child: ListView(
    children: routes.map((route) {
      return ListTile(
        leading: Icon(getIconData(route['icon'])),
        title: Text(route['title']),
        onTap: () => Navigator.pushNamed(context, route['path']),
      );
    }).toList(),
  ),
);

🎨 Theme Data Generation

Generate Flutter theme configurations:

// Generate dark theme
final darkTheme = Darturbation.theme(
  themeName: 'dark_professional',
  isDark: true,
);

// Apply to ThemeData
final themeData = ThemeData(
  brightness: darkTheme['isDark'] ? Brightness.dark : Brightness.light,
  primaryColor: Color(int.parse(darkTheme['colors']['primary'].substring(1), radix: 16)),
  scaffoldBackgroundColor: Color(int.parse(darkTheme['colors']['background'].substring(1), radix: 16)),
  // ... apply other theme properties
);

🌐 API Testing & Mocking

πŸ”„ REST API Response Mocking

Generate realistic API responses with proper structure:

// Mock user list API response
final userListResponse = Darturbation.apiResponse(
  endpoint: '/api/users',
  method: 'GET',
  dataSchema: {
    'id': String,
    'firstName': String,
    'lastName': String,
    'email': String,
    'avatar': String,
  },
  itemCount: 20,
  statusCode: 200,
);

// Use in HTTP client testing
when(mockHttpClient.get('/api/users'))
  .thenAnswer((_) async => Response(
    jsonEncode(userListResponse),
    userListResponse['status'],
    headers: userListResponse['headers'],
  ));

πŸ“Š GraphQL Response Mocking

Create GraphQL-compliant responses:

// Mock GraphQL query response
final graphqlResponse = Darturbation.graphqlResponse(
  query: '''
    query GetUsers {
      users {
        id
        name
        email
        posts {
          title
          content
        }
      }
    }
  ''',
  dataSchema: {
    'users': List,
  },
  itemCount: 10,
);

// Use in GraphQL client testing
when(mockGraphQLClient.query(any))
  .thenAnswer((_) async => QueryResult(
    data: graphqlResponse['data'],
    errors: graphqlResponse['errors'],
  ));

πŸ’¬ WebSocket Message Mocking

Generate realistic WebSocket messages:

// Mock chat message
final chatMessage = Darturbation.websocketMessage(
  type: 'chat_message',
  dataSchema: {
    'userId': String,
    'username': String,
    'message': String,
    'timestamp': DateTime,
  },
);

// Use in WebSocket testing
final mockMessages = List.generate(50, (i) => 
  Darturbation.websocketMessage(
    type: 'chat_message',
    dataSchema: {
      'userId': String,
      'message': String,
    },
  ),
);

❌ Error Response Generation

Generate proper HTTP error responses:

// Generate 404 error
final notFoundError = Darturbation.errorResponse(
  statusCode: 404,
  message: 'User not found',
);

// Generate validation error
final validationError = Darturbation.errorResponse(
  statusCode: 422,
);

// Use in error handling tests
when(mockHttpClient.get('/api/users/invalid-id'))
  .thenAnswer((_) async => Response(
    jsonEncode(notFoundError),
    404,
  ));

πŸͺ E-commerce Scenario

Generate complete e-commerce datasets with realistic relationships:

// Generate complete e-commerce scenario
final ecommerceData = Darturbation.scenario('indonesian_ecommerce')
  .users(100)
  .products(200)
  .orders()
  .reviews()
  .generate();

// Access generated data
final users = ecommerceData['users'] as List<User>;
final products = ecommerceData['products'] as List<Product>;
final orders = ecommerceData['orders'] as List<Order>;
final reviews = ecommerceData['reviews'] as List<Review>;

// Verify relationships
orders.forEach((order) {
  print('Order ${order.id} by ${order.user.firstName}');
  print('Items: ${order.items.map((item) => item.product.name).join(', ')}');
  print('Total: Rp${order.totalAmount}');
});

🌊 Streaming for Large Datasets

Handle large datasets efficiently with streaming:

// Stream 10,000 users without memory issues
final userStream = Darturbation.streamUsers(count: 10000);

await for (final user in userStream) {
  // Process one user at a time
  await saveUserToDatabase(user);
  
  // Progress tracking
  if (user.id.hashCode % 1000 == 0) {
    print('Processed ${user.id.hashCode} users...');
  }
}

πŸ“€ Data Export

Export generated data in multiple formats:

final users = Darturbation.users(count: 100);

// Export to JSON
final jsonData = Darturbation.export(users, to: 'json');
File('users.json').writeAsStringSync(jsonData);

// Export to CSV
final csvData = Darturbation.export(users, to: 'csv');
File('users.csv').writeAsStringSync(csvData);

// Export to SQL
final sqlData = Darturbation.export(
  users, 
  to: 'sql', 
  tableName: 'app_users',
);
File('users.sql').writeAsStringSync(sqlData);

πŸ›  Schema-Based Generation

Improved schema intelligence with context-aware field recognition:

// Smart field recognition
final userData = Darturbation.fromSchema(
  schema: {
    // Names
    'firstName': String,      // β†’ Indonesian first names
    'lastName': String,       // β†’ Indonesian last names
    
    // Contact Info
    'emailAddress': String,   // β†’ Valid email format
    'phoneNumber': String,    // β†’ Indonesian phone format
    
    // Demographics
    'userAge': int,          // β†’ Age between 18-65
    'gender': String,        // β†’ 'male' or 'female'
    
    // Business Data
    'salary': double,        // β†’ Realistic salary range (IDR)
    'isActive': bool,        // β†’ 80% chance true
    'isVerified': bool,      // β†’ 70% chance true
    'isPremium': bool,       // β†’ 30% chance true
    
    // Dates
    'birthDate': DateTime,   // β†’ Age-appropriate birth date
    'createdAt': DateTime,   // β†’ Up to 2 years ago
    'updatedAt': DateTime,   // β†’ Recent (last 30 days)
  },
  count: 1000,
);

πŸ“– Complete API Reference

Core Methods

// Single entity generation
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 = 10, required List<User> fromUsers, required List<Product> withProducts})

// Streaming generation
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 generation
List<Map<String, dynamic>> fromSchema({required Map<String, Type> schema, int count = 10})

// Advanced generation
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, Type> nodeSchema, ...})
Map<String, List<double>> correlatedSeries({required List<String> seriesNames, ...})
List<Map<String, dynamic>> withAnomalies({required Map<String, Type> schema, double anomalyRate = 0.1, ...})

Flutter-Specific Methods

// UI component data
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

// API response mocking
Map<String, dynamic> apiResponse({required String endpoint, String method = 'GET', ...})
Map<String, dynamic> graphqlResponse({required String query, Map<String, Type> dataSchema, ...})
Map<String, dynamic> websocketMessage({required String type, Map<String, Type> dataSchema})
Map<String, dynamic> errorResponse({int statusCode = 500, String? message})

Utility Methods

// Random utilities
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()

// Export utilities
String export<T>(List<T> data, {required String to, String tableName = 'data'})

// Scenario utilities
EcommerceScenario scenario(String type)

πŸ§ͺ Testing Examples

Unit Testing with Mocked Data

import 'package:flutter_test/flutter_test.dart';
import 'package:darturbation/darturbation.dart';

void main() {
  group('User Service Tests', () {
    test('should process user data correctly', () {
      // Generate test users
      final testUsers = Darturbation.users(count: 10);
      
      // Test your service
      final userService = UserService();
      final result = userService.processUsers(testUsers);
      
      expect(result.length, equals(10));
      expect(result.every((user) => user.isValid), isTrue);
    });
    
    test('should handle API errors gracefully', () {
      // Generate error response
      final errorResponse = Darturbation.errorResponse(
        statusCode: 500,
        message: 'Internal server error',
      );
      
      // Test error handling
      expect(
        () => apiClient.handleResponse(errorResponse),
        throwsA(isA<ApiException>()),
      );
    });
  });
}

Widget Testing with Mock Data

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:darturbation/darturbation.dart';

void main() {
  testWidgets('User list displays correctly', (WidgetTester tester) async {
    // Generate test data
    final mockUsers = Darturbation.listView(
      itemCount: 5,
      itemType: 'user_profile',
    );
    
    // Build widget with mock data
    await tester.pumpWidget(
      MaterialApp(
        home: UserListScreen(users: mockUsers),
      ),
    );
    
    // Verify UI elements
    expect(find.byType(ListTile), findsNWidgets(5));
    expect(find.text(mockUsers.first['firstName']), findsOneWidget);
    expect(find.byType(CircleAvatar), findsNWidgets(5));
  });
}

🎯 Use Cases

For Flutter Developers

  • UI Testing: Generate realistic data for ListView, GridView, and Card widgets
  • Form Testing: Create form data with validation rules
  • Theme Testing: Generate color schemes and typography settings
  • Navigation Testing: Mock route structures and navigation flows

For Backend Developers

  • API Testing: Generate realistic request/response data
  • Database Testing: Create test datasets with proper relationships
  • Performance Testing: Generate large datasets for load testing
  • Error Handling: Test with realistic error responses

For Data Scientists

  • Algorithm Testing: Generate correlated datasets for ML model testing
  • Time Series Analysis: Create temporal data with trends and seasonality
  • Anomaly Detection: Test with datasets containing realistic outliers
  • Graph Analysis: Generate network data for social network analysis

For QA Engineers

  • Test Data Management: Generate consistent test datasets
  • Edge Case Testing: Create data with anomalies and edge cases
  • Cross-Platform Testing: Generate data that works across platforms
  • Automated Testing: Integration with testing frameworks

🌟 Why Choose Darturbation?

vs Traditional Faker Libraries

  • βœ… Context-Aware: Data fields are logically related
  • βœ… Behavioral Patterns: Realistic user behavior simulation
  • βœ… Indonesian Focus: Authentic local data
  • βœ… Advanced Features: Time series, graphs, hierarchical data
  • βœ… Flutter Integration: Specialized Flutter utilities

vs Manual Test Data Creation

  • βœ… Scale: Generate thousands of records instantly
  • βœ… Variety: Diverse data patterns and edge cases
  • βœ… Consistency: Reproducible data generation
  • βœ… Maintenance: No manual updates needed
  • βœ… Realism: Statistically accurate distributions

vs Static JSON Files

  • βœ… Dynamic: Fresh data every time
  • βœ… Customizable: Adjust parameters as needed
  • βœ… Scalable: Generate any amount of data
  • βœ… Relationships: Maintain data relationships
  • βœ… Formats: Export to multiple formats

πŸ“š Resources

🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details on:

  • πŸ› Bug Reports: Help us identify and fix issues
  • πŸ’‘ Feature Requests: Suggest new capabilities
  • πŸ”§ Code Contributions: Submit pull requests
  • πŸ“– Documentation: Improve guides and examples
  • 🌍 Localization: Add support for other regions

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


About

Advanced Mock Data Generator to create realistic data for testing and development for Dart & Flutter Development

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.