text_field_item.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/services.dart';
  4. import 'package:liftmanager/res/resources.dart';
  5. import 'package:liftmanager/utils/number_text_input_formatter.dart';
  6. import 'package:keyboard_actions/keyboard_actions.dart';
  7. import 'package:liftmanager/utils/theme_utils.dart';
  8. /// 封装输入框
  9. class TextFieldItem extends StatelessWidget {
  10. const TextFieldItem(
  11. {Key key,
  12. this.controller,
  13. @required this.title,
  14. this.keyboardType: TextInputType.text,
  15. this.hintText: "",
  16. this.isMust: false,
  17. this.content: "",
  18. this.focusNode,
  19. this.onChanged,
  20. this.config,
  21. this.enabled=true})
  22. : super(key: key);
  23. final TextEditingController controller;
  24. final String title;
  25. final String hintText;
  26. final bool isMust;
  27. final String content;
  28. final TextInputType keyboardType;
  29. final FocusNode focusNode;
  30. final Function onChanged;
  31. final KeyboardActionsConfig config;
  32. final bool enabled;
  33. @override
  34. Widget build(BuildContext context) {
  35. bool isDark = ThemeUtils.isDark(context);
  36. if (config != null && defaultTargetPlatform == TargetPlatform.iOS) {
  37. // 因Android平台输入法兼容问题,所以只配置IOS平台
  38. FormKeyboardActions.setKeyboardActions(context, config);
  39. }
  40. if(content.length>0){
  41. controller.text = content;
  42. }
  43. return Container(
  44. height: 50.0,
  45. padding: const EdgeInsets.only(left: 16.0),
  46. width: double.infinity,
  47. decoration: BoxDecoration(
  48. color: isDark?Colors.black:Colors.white,
  49. border: Border(
  50. bottom: Divider.createBorderSide(context, width: 0.6),
  51. )),
  52. child: Row(
  53. children: <Widget>[
  54. Padding(
  55. padding: const EdgeInsets.only(right: 5.0),
  56. child: Text(title),
  57. ),
  58. Offstage(
  59. offstage: !this.isMust,
  60. child: Text(
  61. "*",
  62. style: TextStyle(color: Colors.red),
  63. ),
  64. ),
  65. Expanded(
  66. flex: 1,
  67. child: TextField(
  68. enabled: enabled,
  69. textAlign: TextAlign.right,
  70. onChanged: onChanged,
  71. focusNode: focusNode,
  72. keyboardType: keyboardType,
  73. inputFormatters: _getInputFormatters(),
  74. controller: controller,
  75. //style: TextStyles.textDark14,
  76. decoration: InputDecoration(
  77. hintText: hintText,
  78. hintStyle: TextStyle(color: Colours.text_gray_c),
  79. border: InputBorder.none, //去掉下划线
  80. //hintStyle: TextStyles.textGrayC14
  81. )),
  82. ),
  83. Gaps.hGap16
  84. ],
  85. ),
  86. );
  87. }
  88. _getInputFormatters() {
  89. if (keyboardType == TextInputType.numberWithOptions(decimal: true)) {
  90. return [UsNumberTextInputFormatter()];
  91. }
  92. if (keyboardType == TextInputType.number ||
  93. keyboardType == TextInputType.phone) {
  94. return [WhitelistingTextInputFormatter.digitsOnly];
  95. }
  96. return null;
  97. }
  98. }