【问题标题】:Passing TextEditingController as a paramater to a function?将 TextEditingController 作为参数传递给函数?
【发布时间】:2021-01-02 09:04:46
【问题描述】:

我使用一个函数在颤振中创建了两个文本字段,但我想为每个字段使用两个不同的 TextEditingController。如何将 TextEditingController 作为参数传递给函数?

         Widget fieldmaker(String title) {
        return Container(
          width: double.infinity,
          height: 50,
          padding: EdgeInsets.symmetric(
            horizontal: 10,
          ),
          child: TextField(
            controller: ,
            decoration: InputDecoration(
              hintText: title,
              hintStyle: TextStyle(
                fontSize: 20,
              ),
              contentPadding: EdgeInsets.all(2),
            ),
          ),
        );
     }
final amountcontroller=TextEditingController();
  final titlecontroller=TextEditingController();

        Widget build(BuildContext context) {
      return Column(
        children: [
          fieldmaker('Title'),
          fieldmaker('Amount'),
        ],
      );
    }

【问题讨论】:

    标签: flutter dart textfield texteditingcontroller


    【解决方案1】:

    如果您的 fieldMaker 方法是 FieldMaker 扩展 StatefulWidget 的类,则该类可以创建 TextController 并根据标题对其进行配置。然后你可以:

    children: <Widget>[
      FieldMaker('Title'),
      FieldMaker('Amount'),
    ]
    

    【讨论】:

      【解决方案2】:

      您可以将它作为参数传递给您的函数:

               Widget fieldmaker(String title,TextEditingController controller) {
              return Container(
                width: double.infinity,
                height: 50,
                padding: EdgeInsets.symmetric(
                  horizontal: 10,
                ),
                child: TextField(
                  controller: controller,
                  decoration: InputDecoration(
                    hintText: title,
                    hintStyle: TextStyle(
                      fontSize: 20,
                    ),
                    contentPadding: EdgeInsets.all(2),
                  ),
                ),
              );
           }
      final amountcontroller=TextEditingController();
        final titlecontroller=TextEditingController();
      
              Widget build(BuildContext context) {
            return Column(
              children: [
                //pass them to the function from here
                fieldmaker('Title',titlecontroller), 
                fieldmaker('Amount',amountcontroller),
              ],
            );
          }
      

      【讨论】:

        【解决方案3】:

        通过就好了

        fieldmaker('Title', amountcontroller);
        

        修改你的函数

        fieldmaker(String title, TextEditingController yourTextEditingController){
        //use yourTextEditingController here
        return Container(
                  width: double.infinity,
                  height: 50,
                  padding: EdgeInsets.symmetric(
                    horizontal: 10,
                  ),
                  child: TextField(
                    controller: yourTextEditingController,
                    decoration: InputDecoration(
                      hintText: title,
                      hintStyle: TextStyle(
                        fontSize: 20,
                      ),
                      contentPadding: EdgeInsets.all(2),
                    ),
                  ),
                );
        
        }
        
        

        【讨论】:

          猜你喜欢
          • 2021-02-10
          • 2013-01-27
          • 2021-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多