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
-
Basic Access
- Definition: Class name prefix
- Example:
print(MathConstants.pi); StringUtils.capitalize('text');
-
Within Class
-
Definition: Omitting class name
-
Example:
class Counter { static int _count = 0; Counter() { _count++; // No class name needed } }
-
-
Inheritance
-
Definition: Static shadowing
-
Example:
class Parent { static String name = 'Parent'; } class Child extends Parent { static String name = 'Child'; // Shadows Parent.name }
-
-
Import Aliases
-
Definition: Affected by
as
-
Example:
import 'package:utils.dart' as utils; void main() { utils.StringUtils.capitalize('text'); }
-
-
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
- Resolution: At compile time
- Binding: Static to class
- Performance: Direct access
- 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.