rigid_dart 0.1.0 copy "rigid_dart: ^0.1.0" to clipboard
rigid_dart: ^0.1.0 copied to clipboard

Rust-grade guardrails for Dart/Flutter. Enforces layout safety, state discipline, architecture boundaries, and modern Dart idioms as hard analyzer errors via custom_lint.

example/lib/main.dart

// ignore_for_file: unused_import, unused_local_variable
// This file intentionally triggers rigid_dart rules for demonstration.

import 'package:flutter/material.dart';

// ═══════════════════════════════════════════════════════════════════
// 🔴 rigid_no_set_state: Using setState in a StatefulWidget
// ═══════════════════════════════════════════════════════════════════
class CounterWidget extends StatefulWidget {
  const CounterWidget({super.key});

  @override
  State<CounterWidget> createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  int _count = 0;

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // ❌ This will fire rigid_no_set_state.
        // FIX: Use a Riverpod provider instead.
        setState(() => _count++);
      },
      child: Text('Count: $_count'),
    );
  }
}

// ═══════════════════════════════════════════════════════════════════
// 🔴 rigid_no_hardcoded_colors: Using Color() or Colors.* directly
// ═══════════════════════════════════════════════════════════════════
class BadColorWidget extends StatelessWidget {
  const BadColorWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return Container(
      // ❌ This will fire rigid_no_hardcoded_colors.
      // FIX: Use Theme.of(context).colorScheme.primary
      color: Colors.blue,
      child: const Text('Hello'),
    );
  }
}

// ═══════════════════════════════════════════════════════════════════
// 🔴 rigid_no_with_opacity: Deprecated .withOpacity()
// ═══════════════════════════════════════════════════════════════════
class OpacityExample extends StatelessWidget {
  const OpacityExample({super.key});

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context).colorScheme;
    return Container(
      // ❌ This will fire rigid_no_with_opacity.
      // Quick fix available: changes to .withValues(alpha: 0.5)
      color: theme.primary.withOpacity(0.5),
    );
  }
}

// ═══════════════════════════════════════════════════════════════════
// 🟡 rigid_no_hardcoded_strings: Hardcoded text in widgets
// ═══════════════════════════════════════════════════════════════════
class HardcodedStringWidget extends StatelessWidget {
  const HardcodedStringWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        // ❌ This will fire rigid_no_hardcoded_strings.
        // FIX: Use AppLocalizations.of(context).welcomeTitle
        const Text('Welcome to our app'),
        Text('Hello \${context.toString()}'),
      ],
    );
  }
}
0
likes
0
points
15
downloads

Publisher

unverified uploader

Weekly Downloads

Rust-grade guardrails for Dart/Flutter. Enforces layout safety, state discipline, architecture boundaries, and modern Dart idioms as hard analyzer errors via custom_lint.

Repository (GitHub)
View/report issues

Topics

#linting #static-analysis #flutter #architecture #code-quality

License

unknown (license)

Dependencies

analyzer, custom_lint_builder, path, yaml

More

Packages that depend on rigid_dart