nikoText

Widget nikoText({
  required TextEditingController ctler,
  required String label,
  required Function(String? newValue) fnc,
  final List<TextInputFormatter>? inputFormatters, //追加 入力規則 ①
  final String? Function(String?)? validator, //追加 検査者 ②
  TextInputType? keyboardType,
  int? maxLines,
  int? minLines,
  bool? obscureText,  // 入力内容をマスクする
  bool? enabled,
}){

  return TextFormField(
    readOnly: !(enabled ?? true) ,
    obscureText: obscureText ?? false,
    validator: validator, //追加 バリデーション ③
    inputFormatters: inputFormatters, //追加 入力規則 ④
    autovalidateMode: AutovalidateMode.onUserInteraction, //追加 チェックのタイミング ⑤
    controller: ctler,
      maxLines: maxLines ?? 1,
      minLines: minLines ?? 1,
      style: const TextStyle(fontSize: 20,),
      onChanged:(String? newValue) => fnc(newValue),
      keyboardType: keyboardType,
      decoration: InputDecoration(
        isDense:true,
        border: const OutlineInputBorder(),
        filled: true, // fillColorで指定した色で塗り潰し
        fillColor: Colors.white,
        labelText: label,
        hintText: ' ',
        alignLabelWithHint: true, //開始位置を上寄せ
        // suffixIcon: IconButton(
        //   padding: const EdgeInsets.all(0),
        //   icon: const Icon(Icons.clear),
        //   onPressed: ()=> ctler.clear(),
        // ),
        suffixIconConstraints: const BoxConstraints(maxWidth: 23,minWidth:10),
        contentPadding: const EdgeInsets.symmetric(
        vertical: 12,
        horizontal: 4,
      ),
    ),
  );
}

使い方

                      child: nikoText(
                          label:'距離',ctler:heCmtCtl,
                          //数値キーボード
                          keyboardType:TextInputType.number,
                          //数値のみ
                          inputFormatters: [
                            FilteringTextInputFormatter.allow(RegExp(r'[0-9.]')),
                          ],
                          // validator:
                          //     (value) {
                          //       if (value == null || value.isEmpty) {
                          //       return null;
                          //       }
                          //       debugPrint(value);
                          //       // 正規表現を使用して、数値と小数点以外の文字を検出します。
                          //       RegExp regExp = RegExp(r"[^0-9.]");
                          //       if (regExp.hasMatch(value)) {
                          //         return '数値と小数点以外の文字は入力できません。';
                          //       }
                          //       return null;
                          // },
                          fnc:(String? newValue)=>
                              ref.read(scEditState.notifier).update((state)
                              => state.copyWith.detail(heComment: newValue ?? '' ))
                      )
/* -----codeの行番号----- */