smithery/AJBcoding

moai-lang-dart

Dart 3.5 enterprise development with Flutter 3.24, advanced async programming, state management, and cross-platform mobile development. Enterprise patterns for scalable applications with Context7 MCP integration.

Installation

$ npx skills add smithery/AJBcoding --skill moai-lang-dart

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/AJBcoding · top by installs.

npx skills add smithery/AJBcoding

Browse all from smithery/AJBcoding

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Version4.0.0
Allowed toolsRead, Bash, mcp__context7__resolve-library-id, mcp__context7__get-library-docs

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 10,885 B
  • docs SUMMARY.md 234 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Dart - Enterprise v4.0.0

Metadata

Field Value
Skill Name moai-lang-dart
Version 4.0.0 (2025-11-12)
Allowed tools Read, Bash, Context7 MCP
Auto-load On demand when keywords detected
Tier Language Enterprise
Context7 Integration ✅ Dart/Flutter/Async/StateManagement

What It Does

Dart 3.5 enterprise development featuring Flutter 3.24, advanced async programming patterns, modern state management (BLoC, Riverpod, Provider), and enterprise-grade cross-platform mobile development. Context7 MCP integration provides real-time access to official Dart and Flutter documentation.

Key capabilities:

  • ✅ Dart 3.5 with advanced type system and patterns
  • ✅ Flutter 3.24 enterprise mobile development
  • ✅ Advanced async programming with Isolates and Streams
  • ✅ Modern state management (BLoC, Riverpod, Provider)
  • ✅ Cross-platform development (iOS, Android, Web, Desktop)
  • ✅ Enterprise architecture patterns (Clean Architecture, MVVM)
  • ✅ Performance optimization and memory management
  • ✅ Testing strategies with unit, widget, and integration tests
  • ✅ Context7 MCP integration for real-time documentation

When to Use

Automatic triggers:

  • Dart and Flutter development discussions
  • Cross-platform mobile application development
  • State management pattern implementation
  • Async programming and stream handling
  • Mobile app architecture and design
  • Enterprise Flutter application development

Manual invocation:

  • Design mobile application architecture
  • Implement advanced async patterns
  • Optimize Flutter app performance
  • Review enterprise Dart/Flutter code
  • Implement state management solutions
  • Troubleshoot mobile development issues

Technology Stack (2025-11-12)

Component Version Purpose Status
Dart 3.6.0 Core language ✅ Current
Flutter 3.24.0 UI framework ✅ Current
Riverpod 2.6.1 State management ✅ Current
BLoC 8.1.6 State management ✅ Current
Dio 5.6.0 HTTP client ✅ Current
Provider 6.4.0 State management ✅ Current
Firebase Core 2.28.0 Backend ✅ Current

Quick Reference

Null Safety (Dart 3.5)

// Non-nullable by default
String name = 'Alice';

// Nullable with explicit ?
String? email;

// Late initialization
late String value;

// Null-coalescing operator
String display = email ?? 'No email';

// Safe navigation
int? length = email?.length;

Async Programming

// Modern async/await
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 1));
  return 'Data';
}

// Stream for continuous values
Stream<int> counter() async* {
  for (int i = 0; i < 5; i++) {
    yield i;
  }
}

// Error handling
try {
  final data = await fetchData();
} catch (e) {
  print('Error: $e');
}

Flutter Widgets

// StatelessWidget - immutable UI
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) => Text('Hello');
}

// StatefulWidget - mutable state
class Counter extends StatefulWidget {
  @override
  State<Counter> createState() => _CounterState();
}

class _CounterState extends State<Counter> {
  int count = 0;

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
      onPressed: () => setState(() => count++),
      child: Text('$count'),
    );
  }
}

State Management Pattern Selection

Simple UI          → setState
Single Feature     → Provider / GetX
Complex App        → Riverpod / BLoC
Enterprise Scale   → BLoC + Repository Pattern

Implementation Patterns

Pattern 1: Null Safety Best Practices

// Type safety ensures null checks at compile time
class User {
  final String id;
  final String? optionalEmail;

  User({required this.id, this.optionalEmail});

  // Safe method with null-coalescing
  String getEmail() => optionalEmail ?? '[email protected]';

  // Null-aware property access
  bool hasEmail() => optionalEmail?.isNotEmpty ?? false;
}

// Usage ensures type safety
final user = User(id: '1', optionalEmail: '[email protected]');
print(user.getEmail());     // Type-safe string
print(user.hasEmail());     // Type-safe boolean

Pattern 2: Async Stream Handling

// Generator function for streams
Stream<String> dataStream() async* {
  for (int i = 0; i < 5; i++) {
    yield 'Item $i';
    await Future.delayed(Duration(seconds: 1));
  }
}

// Listening with error handling
dataStream().listen(
  (value) => print(value),
  onError: (error) => print('Error: $error'),
  onDone: () => print('Complete'),
  cancelOnError: false,
);

Pattern 3: Provider State Management

// Simple provider for state
class CounterProvider extends ChangeNotifier {
  int _count = 0;
  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}

// Using Provider in widget
Consumer<CounterProvider>(
  builder: (context, counter, child) {
    return Text('Count: ${counter.count}');
  },
)

Pattern 4: Repository Pattern

// Data layer abstraction
abstract class UserRepository {
  Future<User> getUser(String id);
  Future<void> saveUser(User user);
}

// Implementation
class UserRepositoryImpl implements UserRepository {
  final apiClient = ApiClient();

  @override
  Future<User> getUser(String id) async {
    final response = await apiClient.get('/users/$id');
    return User.fromJson(response);
  }

  @override
  Future<void> saveUser(User user) async {
    await apiClient.post('/users', data: user.toJson());
  }
}

Pattern 5: Widget Architecture

// Composition-based widget tree
class AppScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Title')),
      body: ListView(
        children: [
          HeaderSection(),
          ContentSection(),
          FooterSection(),
        ],
      ),
    );
  }
}

Advanced Topics

Error Handling Strategy

User Input    → Validation errors → Show in UI
Network Call  → Timeout/connection → Retry with exponential backoff
Data Parse    → Format errors → Log and use default
State Update  → Concurrent updates → Use immutable state pattern

Performance Optimization

  • Use const constructors for immutable widgets
  • Implement ListView.builder instead of ListView for large lists
  • Cache expensive computations with memoization
  • Profile with DevTools to identify bottlenecks
  • Use RepaintBoundary for complex widget trees

Testing Strategy

  • Unit Tests: Business logic (90%+ coverage target)
  • Widget Tests: UI components and interactions
  • Integration Tests: Full user flows and scenarios
  • Mocking: External dependencies with Mockito

Common Use Cases

Mobile App with API Integration

  1. Define models and repository layer
  2. Implement state management (Riverpod/Provider)
  3. Create service layer for API calls
  4. Build UI widgets consuming state
  5. Add comprehensive error handling
  6. Test with mocks and fixtures

Cross-Platform App (iOS + Android + Web)

  1. Use Flutter for shared UI code
  2. Platform channels for native code
  3. State management for feature consistency
  4. Responsive design with MediaQuery
  5. Test on all target platforms

Real-Time Data (Streams)

  1. Define stream-based providers
  2. Listen to data updates in UI
  3. Implement unsubscribe on disposal
  4. Handle connection errors gracefully
  5. Buffer/throttle high-frequency updates

Enterprise Checklist

  • Null safety enabled (sdk: '>=3.0.0')
  • Clean architecture with separation of concerns
  • Repository pattern for data access
  • State management with proper scoping
  • Comprehensive error handling
  • Logging and monitoring in place
  • Unit test coverage ≥85%
  • Widget tests for critical UI
  • Integration tests for key flows
  • Performance profiling completed
  • Security review (data encryption, API auth)
  • Documentation and code examples provided
  • CI/CD pipeline configured
  • Crash reporting integrated

Common Pitfalls

❌ Avoid

// Throwing unhandled exceptions
Future<Data> fetchData() async => apiCall();  // No error handling

// Memory leaks in streams
controller.stream.listen(...);  // Not cancelled

// Mutable state in build()
int counter = 0;  // Recreated on each build

✅ Do Instead

// Handle errors gracefully
Future<Data> fetchData() async {
  try { return await apiCall(); }
  catch (e) { return Data.empty(); }
}

// Cancel subscriptions
StreamSubscription sub = stream.listen(...);
@override void dispose() { sub.cancel(); }

// Use State/Provider for mutable data
class Counter extends StatefulWidget { ... }

Resources

Official Documentation:

Learning:

Tools:

  • Flutter DevTools: DevTools for debugging
  • Dart Analyzer: Static analysis
  • Coverage Tools: lcov for coverage reporting

Context7 Integration

This skill integrates with Context7 MCP for real-time documentation:

Keyword Detection → Context7 Query → Real-Time API Docs
  "async/await"   → Dart async guide
  "Flutter widget" → Flutter widget docs
  "Riverpod"     → Riverpod state management
  "Firebase"     → Firebase integration guide

Enable with: mcpcontext7resolve-library-id + mcpcontext7get-library-docs


Version History

Version Date Status Notes
4.0.0 2025-11-12 Current Enterprise v4 restructure, Context7 integration
3.5.4 2025-10-22 Previous Advanced patterns focus
3.0.0 2025-09-01 Legacy Initial release

For detailed examples → See examples.md For API reference → See reference.md For hands-on patterns → See examples.md Part 3-4