Search code examples
flutterdartclass

How to access a hierarch dart class attribute?


How can I manage image paths for different categories, like logos and backgrounds, in Dart? I tried using nested classes like in Java, but Dart doesn't support that! What are the best practices or alternatives to handle this?


void main() {
  print(Images.background.lake); // it dosn't work!
}

class Images {
  class Portrait {
    final traditional = 'assets/images/portrait/traditional.png';
    final environmental = 'assets/images/portrait/environmental.png';
  }

  class Background {
    final nature = 'assets/images/background/nature.png';
    final lake = 'assets/images/background/lake.png';
  }
}



Solution

  • The Images class contains nested classes _Portrait and _Background, organizing image paths for easy access and allowing for additional nested classes as needed.

    class Images {
      // Nested classes for image-specific path
    
      // portrait images
      static const portrait = _Portrait();
    
      // background images
      static const background = _Background();
    }
    
    class _Portrait {
      const _Portrait();
    
      // portrait directory path
      static const String _portraitDirPath = 'assets/images/portrait/';
    
      final String traditional = '${_portraitDirPath}traditional.png';
      final String environmental = '${_portraitDirPath}environmental.png';
    }
    
    class _Background {
      const _Background();
    
      // background directory path
      static const String _backgroundDirPath = 'assets/images/background/';
    
      final String nature = '${_backgroundDirPath}nature.png';
      final String lake = '${_backgroundDirPath}lake.png';
    }
    

    Then, you can access each image path through their chained member access (dotted notation), like:

    void main() {
      print(Images.portrait.traditional);
      print(Images.background.nature);
    }