Search code examples
fluttertextcontrollertexteditingcontroller

How to create List for Text Editing Controller


I have a lot of Text Editing Controller and instead of repeating it and writing it again and again, is there a way to create a list and assign it to a controller?

TextEditingController _Length =  TextEditingController();
TextEditingController _Width =  TextEditingController();

TextEditingController _LengthInch =  TextEditingController();
TextEditingController _WidthInch =  TextEditingController();

TextEditingController _LengthFt =  TextEditingController();
TextEditingController _WidthFt =  TextEditingController();

TextEditingController doorLength = TextEditingController();
TextEditingController doorWidth = TextEditingController();

TextEditingController doorLengthFt = TextEditingController();
TextEditingController doorWidthFt = TextEditingController();

TextEditingController doorLengthInch = TextEditingController();
TextEditingController doorWidthInch = TextEditingController();

TextEditingController tileLength = TextEditingController();
TextEditingController tileWidth = TextEditingController();

TextEditingController tileLengthInch = TextEditingController();
TextEditingController tileWidthInch = TextEditingController();

I use these text editing controllers in different text field form.

any help is highly appreciated.


Solution

  •     // Your controller Identity Name
        enum YourSpecialControllerKeysNameForClass {
          _Length,
          _Width,
          _LengthInch,
          _WidthInch,
          _LengthFt,
          _WidthFt,
          doorLength,
          doorWidth,
          doorLengthFt,
          doorWidthFt,
          doorLengthInch,
          doorWidthInch,
          tileLength,
          tileWidth,
          tileLengthInch,
          tileWidthInch,
        }
        
        
        
          // Create each for controller names
      Map<YourSpecialControllerKeysNameForClass, TextEditingController> createTextControllers() {
        Map<YourSpecialControllerKeysNameForClass, TextEditingController> createdList = {};
    
        createdList.addEntries(YourSpecialControllerKeysNameForClass.values.map((e) => MapEntry<YourSpecialControllerKeysNameForClass, TextEditingController>(e, TextEditingController())).toList());
    
        return createdList;
      }
        
          // Get Controllers By Name
          TextEditingController getTextController(YourSpecialControllerKeysNameForClass key) {
            return controllerList.entries.toList().firstWhere((element) => element.key == key).value;
          }
        
          // And Define this any Widget  
          Map<YourSpecialControllerKeysNameForClass, TextEditingController> controllerList = {};
        
        
          // Initialize youR contollers in initState
          initState() {
        
            // Create Contoller
            controllerList = createTextControllers();
          }
        
        
        
        
          // Usage
          getTextController(YourSpecialControllerKeysNameForClass._Length);
    
    
    
    
    ///
    ///// If you send data to the list then only what you send is disposed.
    ////  If you don't, they are all disposed.
    ///
    void disposeAllController({List<YourSpecialControllerKeysNameForClass>? onlyList}) {
      if (onlyList != null) {
        controllerList.entries.where((element) => onlyList.contains(element.key)).toList().map((e) => e.value.dispose());
      } else {
        controllerList.values.map((e) => e.dispose());
      }
    }