Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

131 righe
4.2 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:provider/provider.dart';
  3. import 'package:qadirneyriz/config/config.dart';
  4. import 'package:qadirneyriz/global/global_state/global_state.dart';
  5. import 'package:qadirneyriz/setting/setting.dart';
  6. import 'package:qadirneyriz/utils/enums/status.dart';
  7. import 'package:qadirneyriz/widgets/custom_appbar.dart';
  8. import 'package:qadirneyriz/widgets/custom_netimage.dart';
  9. class AboutUsScreen extends StatefulWidget {
  10. const AboutUsScreen({super.key});
  11. @override
  12. State<AboutUsScreen> createState() => _AboutUsScreenState();
  13. }
  14. class _AboutUsScreenState extends State<AboutUsScreen> {
  15. // تابع کمکی برای گرفتن مقدار کلید از داده‌ها
  16. String _getByKey(GlobalState globalState, String key) {
  17. if (globalState.logoImagesStatus == Status.ready) {
  18. return globalState.logoImagesModel?.data
  19. ?.firstWhere((element) => element.key == key)
  20. .value ??
  21. '';
  22. }
  23. return '';
  24. }
  25. // تابع کمکی برای ساخت URL
  26. String _buildImageUrl(String imagePath) {
  27. return '${config.network.imageUrl}$imagePath';
  28. }
  29. @override
  30. Widget build(BuildContext context) {
  31. return Consumer<GlobalState>(
  32. builder: (context, globalState, child) {
  33. // گرفتن مقادیر مربوطه
  34. final String textAboutUsFarsi =
  35. _getByKey(globalState, 'about_us_description_fa');
  36. final String textAboutUsEn =
  37. _getByKey(globalState, 'about_us_description_en');
  38. final String textAppVersrionFa =
  39. _getByKey(globalState, 'app_version_fa');
  40. final String textAppVersrionEn =
  41. _getByKey(globalState, 'app_version_en');
  42. final String aboutUsImage = _getByKey(globalState, 'about_us_image');
  43. final String logoImage = _getByKey(globalState, 'logo');
  44. final String aboutUsImageUrl = _buildImageUrl(aboutUsImage);
  45. final String logoUrl = _buildImageUrl(logoImage);
  46. // ساخت ویو بر اساس وضعیت
  47. switch (globalState.logoImagesStatus) {
  48. case Status.ready:
  49. return CustomScrollView(
  50. slivers: [
  51. const CustomAppbar(),
  52. SliverToBoxAdapter(
  53. child: Column(
  54. children: [
  55. _buildImageSection(aboutUsImageUrl, 300, 300),
  56. _buildAboutUsText(
  57. context, textAboutUsFarsi, textAboutUsEn),
  58. _buildFooter(
  59. logoUrl, textAppVersrionEn, textAppVersrionFa),
  60. ],
  61. ),
  62. ),
  63. ],
  64. );
  65. default:
  66. return const Center(child: CircularProgressIndicator());
  67. }
  68. },
  69. );
  70. }
  71. // ویجت برای بخش تصویر
  72. Widget _buildImageSection(String imageUrl, double width, double height) {
  73. return Padding(
  74. padding: const EdgeInsets.symmetric(vertical: 50),
  75. child: CustomImage(
  76. image: imageUrl,
  77. logo: true,
  78. width: width,
  79. height: height,
  80. boxFit: BoxFit.contain,
  81. ),
  82. );
  83. }
  84. // ویجت برای متن درباره ما
  85. Widget _buildAboutUsText(BuildContext context, String textFa, textEn) {
  86. final String lang = setting.userLocalDb.getUser().language;
  87. return Padding(
  88. padding: const EdgeInsets.symmetric(horizontal: 20),
  89. child: Text(
  90. lang == 'en' ? textEn : textFa,
  91. textAlign: TextAlign.justify,
  92. ),
  93. );
  94. }
  95. // ویجت برای بخش فوتر (لوگو و نسخه اپلیکیشن)
  96. Widget _buildFooter(
  97. String logoUrl, String textVersionEn, String textVersionFa) {
  98. final String lang = setting.userLocalDb.getUser().language;
  99. return Column(
  100. children: [
  101. Padding(
  102. padding: const EdgeInsets.symmetric(vertical: 10),
  103. child: CustomImage(
  104. image: logoUrl,
  105. logo: true,
  106. width: 80,
  107. height: 80,
  108. boxFit: BoxFit.contain,
  109. ),
  110. ),
  111. const SizedBox(height: 8),
  112. Text(
  113. lang == 'en' ? textVersionEn : textVersionFa,
  114. style: TextStyle(fontSize: 12),
  115. ),
  116. const SizedBox(height: 10),
  117. ],
  118. );
  119. }
  120. }