首页 > 解决方案 > 在抽象类中访问 TextFormField 控制器

问题描述

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

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

我想在小部件中使用文本值的问题,据我所知,它可以通过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),
      ),
    );
  }
}

标签: flutter

解决方案


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

您可以通过在外部使用它来做到这一点,如下所示。

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),
        ),
      ),
    );
  }
}

推荐阅读