在抽象类中访问TextFormField控制器

时间:2020-10-06 18:45:06

标签: flutter

我想知道是否有任何方法可以访问有状态主窗口小部件之外的控制器。

例如,我创建了一个抽象类来分隔有状态类的溢出。

我想使用小部件中的文本值并且据我所知可以通过 some_controller.text

访问的问题

有什么建议吗?

abstract class TextFieldWidget {
TextEditingController _emailController = TextEditingController();
 static Widget emailTextFeild() {
    return Container(
      padding: EdgeInsets.all(10),
      decoration: BoxDecoration(
          border: Border(bottom: BorderSide(color: Colors.grey[200]))),
      child: TextFormField(
        decoration: InputDecoration(
            focusedBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.orange[100], width: 2)),
            floatingLabelBehavior: FloatingLabelBehavior.always,
            labelText: "Email",
            prefixIcon: Icon(
              Icons.person,
              color: Colors.blueAccent[100],
            ),
            hintStyle: TextStyle(color: Colors.grey),
            border: InputBorder.none),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

您想在全班使用控制器吗?

您可以通过在外部使用它来实现此目的,如下所示。

TextEditingController _emailController = TextEditingController();

然后

abstract class TextFieldWidget {
  static Widget emailTextFeild(email) {
    return Container(
      padding: EdgeInsets.all(10),
      decoration: BoxDecoration(
          border: Border(bottom: BorderSide(color: Colors.grey[200]))),
      child: TextFormField(
        controller: email,
        decoration: InputDecoration(
            focusedBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.orange[100], width: 2)),
            floatingLabelBehavior: FloatingLabelBehavior.always,
            labelText: "Email",
            prefixIcon: Icon(
              Icons.person,
              color: Colors.blueAccent[100],
            ),
            hintStyle: TextStyle(color: Colors.grey),
            border: InputBorder.none),
      ),
    );
  }
}

然后在主类中调用该类,如下所示。

import 'package:flutter/material.dart';

class MyApp extends StatelessWidget {
  final ScrollController _scrollController = ScrollController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: TextFieldWidget.emailTextFeild(_emailController),
        ),
      ),
    );
  }
}