message_select.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import 'package:easy_localization/easy_localization.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:telnow_mobile_new/src/layouts/mobile/message_broadcast.dart';
  4. import 'package:telnow_mobile_new/src/layouts/components/template.dart';
  5. import 'package:telnow_mobile_new/src/utils/U.dart';
  6. class MobMessageSelectPage extends StatefulWidget {
  7. final user;
  8. final tenants;
  9. const MobMessageSelectPage(this.user, this.tenants, {super.key});
  10. @override
  11. State<MobMessageSelectPage> createState() => _MobMessageSelectPageState();
  12. }
  13. class _MobMessageSelectPageState extends State<MobMessageSelectPage> {
  14. List data = [];
  15. bool isLoaded = false;
  16. bool _multiSelectMode = false;
  17. List<int> selectedIndexes = [];
  18. getTenant() async {
  19. List tempData = widget.tenants;
  20. setState(() {
  21. isLoaded = true;
  22. if (tempData.length != 0) {
  23. data.addAll(tempData);
  24. }
  25. });
  26. }
  27. _selectedIndex(i) {
  28. if (selectedIndexes.contains(i)) {
  29. selectedIndexes.remove(i);
  30. } else {
  31. selectedIndexes.add(i);
  32. }
  33. setState(() {
  34. _multiSelectMode = selectedIndexes.length == 0 ? false : true;
  35. });
  36. }
  37. _getDataTenants() {
  38. List tempData = [];
  39. selectedIndexes.forEach((e) {
  40. tempData.add(data[e]);
  41. });
  42. return tempData;
  43. }
  44. @override
  45. void initState() {
  46. // TODO: implement initState
  47. getTenant();
  48. super.initState();
  49. }
  50. @override
  51. Widget build(BuildContext context) {
  52. var bodyWidth = U.bodyWidth(context);
  53. return Scaffold(
  54. backgroundColor: Colors.white,
  55. appBar: appBarTemplate(context: context, title: 'selectRecipient'.tr()),
  56. body: !isLoaded ? loadingTemplate(() {},) : Column(
  57. children: [
  58. divider(),
  59. Expanded(
  60. child: Container(
  61. alignment: Alignment.topCenter,
  62. width: bodyWidth,
  63. child: ListView(
  64. children: List.generate(data.length, (i) {
  65. return GestureDetector(
  66. child: Container(
  67. child: ListTile(
  68. leading: Container(
  69. height: 40,
  70. width: 40,
  71. child: Center(
  72. child: _multiSelectMode && selectedIndexes.contains(i) ? Icon(
  73. Icons.check,
  74. color: Colors.white,
  75. ) : Text(data[i]['name'][0], style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
  76. ),
  77. decoration: BoxDecoration(shape: BoxShape.circle, color: Color(U.getColor(data[i]['code']))),
  78. ),
  79. title: Text(data[i]['name']),
  80. subtitle: Text(data[i]['description'], style: TextStyle(fontSize: 13.0)),
  81. ),
  82. decoration: BoxDecoration(color: _multiSelectMode && selectedIndexes.contains(i) ? Colors.black12 : Colors.white)
  83. ),
  84. onTap: () async {
  85. if(_multiSelectMode){
  86. _selectedIndex(i);
  87. }
  88. else{
  89. navigateTo(context, MobMessageBroadcastPage(widget.user, [data[i]]));
  90. // Navigator.of(context).pop();
  91. }
  92. },
  93. onLongPress: () {
  94. setState(() {
  95. _multiSelectMode = true;
  96. _selectedIndex(i);
  97. });
  98. },
  99. );
  100. }),
  101. ),
  102. ),
  103. )
  104. ],
  105. ),
  106. floatingActionButton: _multiSelectMode ? FloatingActionButton(
  107. child: U.iconsax('arrow-right'),
  108. backgroundColor: primaryColor,
  109. onPressed: () async {
  110. final value = await navigateTo(context, MobMessageBroadcastPage(widget.user, _getDataTenants()));
  111. if (value == 'pop') {
  112. Navigator.pop(context);
  113. }
  114. },
  115. ):null,
  116. );
  117. }
  118. }