Newer
Older
flutterBaseApp / lib / ui / widgets / login_page / login_item_widget.dart
StephanieGitHub on 9 Feb 2021 3 KB first commit
import 'package:base_app/res/index.dart';
import 'package:flutter/material.dart';

/// 登录项
class LoginItem extends StatefulWidget {
  final IconData prefixIcon; // 前方icon
  final bool hasSuffixIcon; // 是否要后面的icon
  final String hintText; // 提示文字
  final bool autoFocus; // 自动聚焦
  final TextInputType keyboardType; // 键盘类型
  final int maxLength; // 最大程度
  final bool maxLengthEnforced; // 当长度达到限制长度时,是否强制组织输入
  final TextInputAction textInputAction; // 输入action
  final TextEditingController controller; // controller
  final FocusNode focusNode; //focusNode
  final VoidCallback onEditingComplete; // 输入完毕后的回调

  const LoginItem(
      {Key key,
      this.prefixIcon,
      this.hasSuffixIcon = false,
      this.autoFocus = false,
      this.keyboardType = TextInputType.text,
      this.hintText,
      this.maxLength,
      this.maxLengthEnforced = true,
      this.textInputAction,
      this.controller,
      this.focusNode,
      this.onEditingComplete})
      : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return LoginItemState();
  }
}

class LoginItemState extends State<LoginItem> {
  bool _obscureText; // 是否隐藏原始文字 // 密码用

  @override
  void initState() {
    super.initState();
    _obscureText = widget.hasSuffixIcon;
  }

  @override
  Widget build(BuildContext context) {
    return new Row(
      children: <Widget>[
        new IconButton(
            iconSize: 28,
            icon: new Icon(
              widget.prefixIcon,
              color: Theme.of(context).primaryColor,
            ),
            onPressed: () {}),
        Gaps.hGap5,
        new Expanded(
          child: new TextField(
              textInputAction: widget.textInputAction,
              focusNode: widget.focusNode,
              onEditingComplete: widget.onEditingComplete,
              obscureText: _obscureText,
              controller: widget.controller,
              maxLength: widget.maxLength,
              maxLengthEnforced: widget.maxLengthEnforced,
              style: new TextStyle(color: Colours.gray_66, fontSize: 14),
              decoration: new InputDecoration(
                hintText: widget.hintText,
                hintStyle: new TextStyle(color: Colours.gray_99, fontSize: 14),
                suffixIcon: widget.hasSuffixIcon
                    ? new IconButton(
                        icon: new Icon(
                          _obscureText
                              ? Icons.visibility
                              : Icons.visibility_off,
                          color: Colours.gray_66,
                        ),
                        onPressed: () {
                          setState(() {
                            _obscureText = !_obscureText;
                          });
                        })
                    : null,
                focusedBorder: new UnderlineInputBorder(
                    borderSide: new BorderSide(color: Colours.green_de)),
                enabledBorder: new UnderlineInputBorder(
                    borderSide: new BorderSide(color: Colours.green_de)),
              )),
        ),
      ],
    );
  }
}