Accessing Static Members

Accessing Static Members

About

  • Class Reference: Accessed via class name
  • Inheritance: Not polymorphic
  • Visibility: Public/private rules apply
  • Import Aliases: Affects access syntax

Main Topics

  1. Basic Access

    • Definition: Class name prefix
    • Example:
      print(MathConstants.pi);
      StringUtils.capitalize('text');
  2. Within Class

    • Definition: Omitting class name

    • Example:

      class Counter {
        static int _count = 0;
      
        Counter() {
          _count++; // No class name needed
        }
      }
  3. Inheritance

    • Definition: Static shadowing

    • Example:

      class Parent {
        static String name = 'Parent';
      }
      
      class Child extends Parent {
        static String name = 'Child'; // Shadows Parent.name
      }
  4. Import Aliases

    • Definition: Affected by as

    • Example:

      import 'package:utils.dart' as utils;
      
      void main() {
        utils.StringUtils.capitalize('text');
      }
  5. Visibility Rules

    • Definition: Library-private statics
    • Example:
      class _Internal {
        static String _secret = 'data';
      }

How to Use

  • Organization: Group related statics
  • Naming: Clear class names
  • Access: Use full class name
  • Documentation: Explain usage

How It Works

  1. Resolution: At compile time
  2. Binding: Static to class
  3. Performance: Direct access
  4. Scope: Lexical rules apply

Example:

class ColorPalette {
  static const Color primary = Color(0xFF6200EE);
  static const Color secondary = Color(0xFF03DAC6);

  static List<Color> get allColors => [primary, secondary];
}

void main() {
  final buttonColor = ColorPalette.primary;
  final availableColors = ColorPalette.allColors;
}

Conclusion

Accessing static members in Dart follows clear rules using class name qualification. While they don’t participate in inheritance polymorphism, statics provide efficient class-level functionality that can be organized, documented, and accessed in a consistent manner throughout your codebase.