widgets.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. onChanged: (value) {
  32. onInputChanged.call(value);
  33. },
  34. ),
  35. );
  36. if (suffixWidget != null) {
  37. children.add(suffixWidget!);
  38. }
  39. return Row(
  40. children: children,
  41. mainAxisAlignment: MainAxisAlignment.center,
  42. );
  43. }
  44. }
  45. class CustomChildOptionDivider extends StatelessWidget {
  46. const CustomChildOptionDivider({super.key});
  47. @override
  48. Widget build(BuildContext context) {
  49. return Divider(color: Colors.grey.shade100, height: 1);
  50. }
  51. }
  52. class CustomChildTextOptionWidget extends StatelessWidget {
  53. final bool isActive;
  54. final String text;
  55. final VoidCallback onClick;
  56. const CustomChildTextOptionWidget({
  57. super.key,
  58. required this.isActive,
  59. required this.text,
  60. required this.onClick,
  61. });
  62. @override
  63. Widget build(BuildContext context) {
  64. return CustomChildOptionWidget(
  65. child: Text(text),
  66. isActive: isActive,
  67. onClick: onClick,
  68. );
  69. }
  70. }
  71. class CustomChildOptionWidget extends StatelessWidget {
  72. final bool isActive;
  73. final Widget child;
  74. final VoidCallback onClick;
  75. const CustomChildOptionWidget({
  76. super.key,
  77. required this.isActive,
  78. required this.child,
  79. required this.onClick,
  80. });
  81. @override
  82. Widget build(BuildContext context) {
  83. return Material(
  84. child: Container(
  85. margin: const EdgeInsets.only(bottom: 4),
  86. child: GestureDetector(
  87. onTap: () {
  88. onClick.call();
  89. },
  90. child: Container(
  91. padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 18),
  92. alignment: Alignment.center,
  93. color: isActive
  94. ? Theme.of(context).secondaryHeaderColor
  95. : Colors.white,
  96. child: child,
  97. ),
  98. ),
  99. ),
  100. );
  101. }
  102. }
  103. class FPlaceHolderInteractiveContainer extends FStatelessWidget
  104. implements FInteractiveContainer {
  105. const FPlaceHolderInteractiveContainer({super.key});
  106. @override
  107. FWidget build(BuildContext context) {
  108. return const FSizedBox();
  109. }
  110. @override
  111. String get pageName => "";
  112. }