widgets.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import 'package:fis_ui/index.dart';
  2. import 'package:fis_ui/interface/interactive_container.dart';
  3. import 'package:flutter/material.dart';
  4. class CustomChildInputOptionWidget extends StatelessWidget {
  5. final bool isActive;
  6. final String value;
  7. final Widget? suffixWidget;
  8. final VoidCallback onClick;
  9. final ValueChanged<String> onInputChanged;
  10. const CustomChildInputOptionWidget({
  11. super.key,
  12. required this.isActive,
  13. required this.value,
  14. required this.onClick,
  15. required this.onInputChanged,
  16. this.suffixWidget,
  17. });
  18. @override
  19. Widget build(BuildContext context) {
  20. return CustomChildOptionWidget(
  21. isActive: isActive,
  22. onClick: onClick,
  23. child: _buildInput(context),
  24. );
  25. }
  26. Widget _buildInput(BuildContext context) {
  27. final children = <Widget>[];
  28. children.add(
  29. FBorderInput(
  30. controller: TextEditingController(text: value),
  31. onTap: () {
  32. onClick.call();
  33. },
  34. onChanged: (value) {
  35. onInputChanged.call(value);
  36. },
  37. ),
  38. );
  39. if (suffixWidget != null) {
  40. children.add(suffixWidget!);
  41. }
  42. return Row(
  43. children: children,
  44. mainAxisAlignment: MainAxisAlignment.center,
  45. );
  46. }
  47. }
  48. class CustomChildOptionDivider extends StatelessWidget {
  49. const CustomChildOptionDivider({super.key});
  50. @override
  51. Widget build(BuildContext context) {
  52. return Divider(color: Colors.grey.shade100, height: 1);
  53. }
  54. }
  55. class CustomChildTextOptionWidget extends StatelessWidget {
  56. final bool isActive;
  57. final String text;
  58. final VoidCallback onClick;
  59. const CustomChildTextOptionWidget({
  60. super.key,
  61. required this.isActive,
  62. required this.text,
  63. required this.onClick,
  64. });
  65. @override
  66. Widget build(BuildContext context) {
  67. return CustomChildOptionWidget(
  68. child: Text(text),
  69. isActive: isActive,
  70. onClick: onClick,
  71. );
  72. }
  73. }
  74. class CustomChildOptionWidget extends StatelessWidget {
  75. final bool isActive;
  76. final Widget child;
  77. final VoidCallback onClick;
  78. const CustomChildOptionWidget({
  79. super.key,
  80. required this.isActive,
  81. required this.child,
  82. required this.onClick,
  83. });
  84. @override
  85. Widget build(BuildContext context) {
  86. return Material(
  87. child: Container(
  88. margin: const EdgeInsets.only(bottom: 4),
  89. child: GestureDetector(
  90. onTap: () {
  91. onClick.call();
  92. },
  93. child: Container(
  94. padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 18),
  95. alignment: Alignment.center,
  96. color: isActive
  97. ? Theme.of(context).secondaryHeaderColor
  98. : Colors.white,
  99. child: child,
  100. ),
  101. ),
  102. ),
  103. );
  104. }
  105. }
  106. class FPlaceHolderInteractiveContainer extends FStatelessWidget
  107. implements FInteractiveContainer {
  108. const FPlaceHolderInteractiveContainer({super.key});
  109. @override
  110. FWidget build(BuildContext context) {
  111. return const FSizedBox();
  112. }
  113. @override
  114. String get pageName => "";
  115. }