【问题标题】:Custom TextFormField Flutter suffix icon自定义TextFormField Flutter后缀图标
【发布时间】:2022-01-30 23:49:56
【问题描述】:

我想用可选的suffixIcon (IconButton) 制作 TextFormField 怎么做?

import 'package:flutter/material.dart';

class CustomTextFormField extends StatelessWidget {
  final String text;
  final String hintText;
  final bool obsecureText;
  final IconButton iconButton;

  const CustomTextFormField({
    Key? key,
    required this.text,
    required this.hintText,
    this.obsecureText = false,
    this.iconButton = IconButton() //I dont know the logic
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(text),
        const SizedBox(height: 8.0),
        Form(
          child: TextFormField(
            obscureText: obsecureText,
            decoration: InputDecoration(
              suffixIcon: iconButton,
              hintText: hintText,
            ),
          ),
        ),
        const SizedBox(height: 24.0),
      ],
    );
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以创建可空的IconButton 和默认iconButtononPressed 的回调方法,

    final IconButton? iconButton;
    final VoidCallback? callback;
    
    const CustomTextFormField({
      this.iconButton,
      this.callback,
      ....
     }
    
    suffixIcon: iconButton ??
        IconButton(
          onPressed: callback,
          icon: const Icon(Icons.ac_unit),
        ),
    

    或者

    final IconButton iconButton;
    final VoidCallback? callback;
    
    CustomTextFormField({
      this.callback,
      Key? key,
      required this.text,
      required this.hintText,
      this.obsecureText = false,
    })  : iconButton = IconButton(
            onPressed: callback,
            icon: const Icon(Icons.ac_unit),
          ),
          super(key: key);
    
    

    按钮必须使用回调,否则可以进行状态管理。

    【讨论】:

    • IconButton?VoidCallback?iconButton??(问号)是什么意思?
    • ?? 提供默认值,左侧为空,DataType? 为可空数据,您可以查看this answer
    猜你喜欢
    • 2019-10-07
    • 2019-08-12
    • 2022-11-01
    • 2022-12-15
    • 2019-09-12
    • 2021-09-06
    • 1970-01-01
    • 2020-02-13
    • 2021-09-12
    相关资源
    最近更新 更多