選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

112 行
3.8 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:go_router/go_router.dart';
  3. import 'package:provider/provider.dart';
  4. import 'package:qadirneyriz/global/global_state/global_state.dart';
  5. import 'package:qadirneyriz/utils/enums/status.dart';
  6. import 'package:qadirneyriz/utils/tools/tools.dart';
  7. import 'package:qadirneyriz/widgets/custom_button.dart';
  8. import 'package:qadirneyriz/widgets/custom_textfield.dart';
  9. import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  10. class AddSubjectDiolog extends StatelessWidget {
  11. AddSubjectDiolog({
  12. super.key,
  13. });
  14. final TextEditingController farsiSubjectController = TextEditingController();
  15. final TextEditingController englishSubjectController =
  16. TextEditingController();
  17. @override
  18. Widget build(BuildContext context) {
  19. return Consumer<GlobalState>(
  20. builder: (context, value, child) {
  21. return Dialog(
  22. child: Padding(
  23. padding: const EdgeInsets.all(20.0),
  24. child: Column(
  25. mainAxisSize: MainAxisSize.min, // برای اندازه‌گیری درست دیالوگ
  26. children: [
  27. Text(
  28. AppLocalizations.of(context)!.newsubject,
  29. ),
  30. CustomTextField(
  31. label: AppLocalizations.of(context)!.farsi,
  32. hintText: '',
  33. textEditingController: farsiSubjectController,
  34. textInputType: TextInputType.text),
  35. CustomTextField(
  36. label: AppLocalizations.of(context)!.english,
  37. hintText: '',
  38. textEditingController: englishSubjectController,
  39. textInputType: TextInputType.text),
  40. SizedBox(
  41. height: 20,
  42. ),
  43. submit(value, context),
  44. ],
  45. ),
  46. ),
  47. );
  48. },
  49. );
  50. }
  51. CustomButton submit(GlobalState state, BuildContext context) {
  52. switch (state.statusAddNewSubject) {
  53. case Status.loading:
  54. return CustomButton(
  55. hieght: 40,
  56. width: double.infinity,
  57. text: AppLocalizations.of(context)!.loading,
  58. fontSize: 13,
  59. onPressed: null,
  60. borderRadius: 10,
  61. );
  62. default:
  63. return CustomButton(
  64. hieght: 40,
  65. width: double.infinity,
  66. text: AppLocalizations.of(context)!.add,
  67. fontSize: 13,
  68. onPressed: () async {
  69. if (farsiSubjectController.text != '' &&
  70. englishSubjectController.text != '') {
  71. // call add new subject
  72. final status = await state.addNewSubject(
  73. enSubject: englishSubjectController.text,
  74. subject: farsiSubjectController.text);
  75. if (status == Status.ready) {
  76. // call refrresh subjects
  77. await state.getSubjects();
  78. Tools.showCustomSnackBar(
  79. text: AppLocalizations.of(context)!.addedsubject,
  80. isError: false,
  81. context,
  82. );
  83. context.pop();
  84. } else {
  85. Tools.showCustomSnackBar(
  86. text: state.errorsAddNewSubject == null
  87. ? state.messageAddNewSubject ??
  88. AppLocalizations.of(context)!.haserror
  89. : Tools.combineErrorMessages(
  90. state.errorsAddNewSubject ?? {}),
  91. isError: true,
  92. context,
  93. );
  94. }
  95. } else {
  96. Tools.showCustomSnackBar(
  97. text: AppLocalizations.of(context)!.erroraddsubject,
  98. isError: true,
  99. context,
  100. );
  101. }
  102. },
  103. borderRadius: 10,
  104. );
  105. }
  106. }
  107. }