123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- import 'package:flutter/foundation.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:keyboard_actions/keyboard_actions.dart';
- import 'package:liftmanager/res/resources.dart';
- import 'package:liftmanager/utils/number_text_input_formatter.dart';
- import 'package:liftmanager/utils/theme_utils.dart';
- /// 封装输入框
- class TextFieldItem extends StatelessWidget {
- const TextFieldItem(
- {Key key,
- this.controller,
- @required this.title,
- this.keyboardType: TextInputType.text,
- this.hintText: "",
- this.isMust: false,
- this.content: "",
- this.maxLength,
- this.focusNode,
- this.onChanged,
- this.config,
- this.enabled=true})
- : super(key: key);
- final TextEditingController controller;
- final String title;
- final String hintText;
- final bool isMust;
- final String content;
- final TextInputType keyboardType;
- final int maxLength;
- final FocusNode focusNode;
- final Function onChanged;
- final KeyboardActionsConfig config;
- final bool enabled;
- @override
- Widget build(BuildContext context) {
- bool isDark = ThemeUtils.isDark(context);
- if (config != null && defaultTargetPlatform == TargetPlatform.iOS) {
- // 因Android平台输入法兼容问题,所以只配置IOS平台
- FormKeyboardActions.setKeyboardActions(context, config);
- }
- if (content.length > 0) {
- controller.text = content;
- }
- return Container(
- height: 50.0,
- margin: const EdgeInsets.only(left: 16.0),
- width: double.infinity,
- decoration: BoxDecoration(
- color: isDark?Colors.black:Colors.white,
- border: Border(
- bottom: Divider.createBorderSide(context, width: 0.6),
- )),
- child: Row(
- children: <Widget>[
- Padding(
- padding: const EdgeInsets.only(right: 5.0),
- child: Text(title),
- ),
- Offstage(
- offstage: !this.isMust,
- child: Text(
- " *",
- style: TextStyle(color: Colors.red),
- ),
- ),
- Expanded(
- flex: 1,
- child: TextField(
- enabled: enabled,
- textAlign: TextAlign.right,
- onChanged: onChanged,
- maxLength: maxLength,
- focusNode: focusNode,
- keyboardType: keyboardType,
- inputFormatters: _getInputFormatters(),
- controller: controller,
- //style: TextStyles.textDark14,
- decoration: InputDecoration(
- hintText: hintText,
- hintStyle: TextStyle(color: Colours.text_gray_c),
- border: InputBorder.none, //去掉下划线
- //hintStyle: TextStyles.textGrayC14
- )
- ),
- ),
- Gaps.hGap16
- ],
- ),
- );
- }
- _getInputFormatters() {
- if (keyboardType == TextInputType.numberWithOptions(decimal: true)) {
- return [UsNumberTextInputFormatter(),MoneyTextInputFormatter()];
- }
- if (keyboardType == TextInputType.number ||
- keyboardType == TextInputType.phone) {
- return [WhitelistingTextInputFormatter.digitsOnly];
- }
- return null;
- }
- }
- class MoneyTextInputFormatter extends TextInputFormatter{
- @override
- TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
- // TODO: implement formatEditUpdate
- String newvalueText=newValue.text;
- if(newvalueText=="."){
- //第一个数为.
- newvalueText="0.";
- } else if(newvalueText.contains(".")){
- if(newvalueText.lastIndexOf(".")!=newvalueText.indexOf(".")){
- //输入了2个小数点
- newvalueText= newvalueText.substring(0,newvalueText.lastIndexOf('.'));
- }else if(newvalueText.length-1-newvalueText.indexOf(".")>2){
- //输入了1个小数点 小数点后两位
- newvalueText=newvalueText.substring(0,newvalueText.indexOf(".")+3);
- }
- }
- String a ;
- if(!RegExp(r"^([1-9]\d*|[0]{1,1})$").hasMatch(newvalueText)){
- if(newvalueText.contains(".")){
- a = newvalueText;
- }else if (newvalueText == "00"){
- a = "0";
- }
- // else if (newvalueText == "00."){
- // newvalueText = "0.";
- // }
- else {
- a = newvalueText.replaceAll(RegExp(r'(^[0]+)'), "");
- }
-
- // ignore: unnecessary_statements
- }else (
- a = newvalueText
- );
- print(a);
- print(123456789);
- return TextEditingValue(
- text: a,
- selection: TextSelection.collapsed(offset: a.length),
- );
- }
- }
|