menus.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:vitalapp/components/cell.dart';
  4. import 'package:vitalapp/components/panel.dart';
  5. import 'package:vitalapp/consts/styles.dart';
  6. import 'package:vitalapp/pages/from_page/controller.dart';
  7. import 'package:vitalapp/pages/from_page/models/menu.dart';
  8. class FromMenuListViewWidget extends StatefulWidget {
  9. final List<FromMenuItem> source;
  10. final ScrollController? scrollerController;
  11. const FromMenuListViewWidget({
  12. super.key,
  13. required this.source,
  14. this.scrollerController,
  15. });
  16. @override
  17. State<FromMenuListViewWidget> createState() => _FromMenuListViewWidgetState();
  18. }
  19. class _FromMenuListViewWidgetState extends State<FromMenuListViewWidget> {
  20. late List<FromMenuItem> sourceList = widget.source;
  21. @override
  22. Widget build(BuildContext context) {
  23. return SizedBox(
  24. width: 440,
  25. // padding: const EdgeInsets.all(16).copyWith(right: 0),
  26. // color: Colors.white,
  27. child: VPanel(
  28. child: Column(
  29. children: sourceList.map(
  30. (item) {
  31. return FromItemWidget(
  32. data: item,
  33. onChangeTab: () => _onChangeTab(item),
  34. );
  35. },
  36. ).toList()),
  37. ));
  38. }
  39. void _onChangeTab(FromMenuItem data) {
  40. final index = sourceList.indexWhere((e) => e.routeName == data.routeName);
  41. if (index < 0) return;
  42. sourceList.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  43. sourceList[index].isSelected = true;
  44. Get.find<FromPageController>().switchNavByName(data.routeName);
  45. setState(() {});
  46. }
  47. }
  48. class FromItemWidget extends StatelessWidget {
  49. final FromMenuItem data;
  50. final VoidCallback onChangeTab;
  51. const FromItemWidget({
  52. super.key,
  53. required this.data,
  54. required this.onChangeTab,
  55. });
  56. @override
  57. Widget build(BuildContext context) {
  58. return InkWell(
  59. onTap: () => onChangeTab.call(),
  60. child: Container(
  61. padding: const EdgeInsets.all(16),
  62. decoration: BoxDecoration(
  63. borderRadius: GlobalStyles.borderRadius,
  64. color: data.isSelected ? Colors.red : Colors.white,
  65. ),
  66. child: Row(
  67. children: [
  68. const Icon(Icons.access_time_sharp),
  69. Text(
  70. data.title,
  71. ),
  72. ],
  73. ),
  74. ),
  75. );
  76. }
  77. }