Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

192 lines
6.6 KiB

1 year ago
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_svg/flutter_svg.dart';
  3. import 'package:sonnat/core/extensions/context_extension.dart';
  4. import 'package:sonnat/core/extensions/string_extension.dart';
  5. import 'package:sonnat/core/language/translator.dart';
  6. import 'package:sonnat/core/utils/app_constants.dart';
  7. import 'package:sonnat/features/aabout_us/about_us_screen.dart';
  8. import 'package:sonnat/features/main/widget/main_item_widget.dart';
  9. import 'package:sonnat/features/posts/screen/posts_screen.dart';
  10. class MainScreen extends StatefulWidget {
  11. const MainScreen({super.key});
  12. @override
  13. State<MainScreen> createState() => _MainScreenState();
  14. }
  15. class _MainScreenState extends State<MainScreen> {
  16. final List<String> _icons = [
  17. 'ic_mataen',
  18. 'ic_shobahat',
  19. 'ic_aqayed',
  20. 'ic_vijeha',
  21. 'ic_akhbar',
  22. 'ic_video',
  23. ];
  24. final List<String> _names = [
  25. Translator.translate('forbidden'),
  26. Translator.translate('doubts'),
  27. Translator.translate('criticism_of_ideas'),
  28. Translator.translate('specials'),
  29. Translator.translate('news'),
  30. Translator.translate('video'),
  31. ];
  32. @override
  33. Widget build(BuildContext context) {
  34. return Scaffold(
  35. backgroundColor: const Color(0xff26237A),
  36. body: Column(
  37. children: [
  38. Container(
  39. margin: EdgeInsets.only(
  40. top: context.height * 27 / AppConstants.instance.appHeight,
  41. left: context.width * 86 / AppConstants.instance.appWidth,
  42. right: context.width * 86 / AppConstants.instance.appWidth,
  43. ),
  44. child: Image.asset('ic_main_header'.pngPath),
  45. ),
  46. Text(
  47. Translator.translate('main_header_text'),
  48. style: const TextStyle(
  49. color: Color(0xffFFD800),
  50. fontSize: 28,
  51. ),
  52. ),
  53. SizedBox(height: context.height * 5 / AppConstants.instance.appHeight),
  54. Text(
  55. Translator.translate('second_header_text'),
  56. style: const TextStyle(
  57. color: Color(0xffDEDEDE),
  58. fontSize: 16,
  59. ),
  60. ),
  61. Container(
  62. decoration: BoxDecoration(
  63. color: const Color(0xffF4F4F8),
  64. borderRadius: BorderRadius.circular(22),
  65. ),
  66. margin: EdgeInsets.only(
  67. left: context.width * 35 / AppConstants.instance.appWidth,
  68. right: context.width * 35 / AppConstants.instance.appWidth,
  69. top: context.height * 40 / AppConstants.instance.appHeight,
  70. bottom: context.height * 90 / AppConstants.instance.appHeight,
  71. ),
  72. padding: EdgeInsets.symmetric(
  73. vertical: context.height * 13 / AppConstants.instance.appHeight,
  74. horizontal: context.width * 8 / AppConstants.instance.appWidth,
  75. ),
  76. child: Row(
  77. mainAxisAlignment: MainAxisAlignment.end,
  78. children: [
  79. Text(
  80. Translator.translate('search_term'),
  81. style: const TextStyle(
  82. color: Color(0xffBCC1CD),
  83. fontSize: 16,
  84. ),
  85. ),
  86. SizedBox(width: context.width * 14 / AppConstants.instance.appWidth),
  87. SvgPicture.asset('ic_search'.svgPath),
  88. ],
  89. ),
  90. ),
  91. SvgPicture.asset('ic_line'.svgPath),
  92. SizedBox(height: context.height * 70 / AppConstants.instance.appHeight),
  93. Padding(
  94. padding: EdgeInsets.symmetric(horizontal: context.width * 35 / AppConstants.instance.appWidth),
  95. child: Row(
  96. children: [
  97. GestureDetector(
  98. child: MainItemWidget(icon: _icons[2], name: _names[2]),
  99. onTap: () => _openItem(index: 2),
  100. ),
  101. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  102. GestureDetector(
  103. child: MainItemWidget(icon: _icons[1], name: _names[1]),
  104. onTap: () => _openItem(index: 1),
  105. ),
  106. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  107. GestureDetector(
  108. child: MainItemWidget(icon: _icons[0], name: _names[0]),
  109. onTap: () => _openItem(index: 0),
  110. ),
  111. ],
  112. ),
  113. ),
  114. SizedBox(height: context.height * 15 / AppConstants.instance.appHeight),
  115. Padding(
  116. padding: EdgeInsets.symmetric(horizontal: context.width * 35 / AppConstants.instance.appWidth),
  117. child: Row(
  118. children: [
  119. GestureDetector(
  120. child: MainItemWidget(icon: _icons[5], name: _names[5]),
  121. onTap: () => _openItem(index: 5),
  122. ),
  123. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  124. GestureDetector(
  125. child: MainItemWidget(icon: _icons[4], name: _names[4]),
  126. onTap: () => _openItem(index: 4),
  127. ),
  128. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  129. GestureDetector(
  130. child: MainItemWidget(icon: _icons[3], name: _names[3]),
  131. onTap: () => _openItem(index: 3),
  132. ),
  133. ],
  134. ),
  135. ),
  136. SizedBox(height: context.height * 40 / AppConstants.instance.appHeight),
  137. ],
  138. ),
  139. );
  140. }
  141. void _openItem({required int index}) {
  142. switch (index) {
  143. case 0:
  144. Navigator.push(context, MaterialPageRoute(
  145. builder: (context) {
  146. return PostsScreen(title: _names[index]);
  147. },
  148. ));
  149. break;
  150. case 1:
  151. Navigator.push(context, MaterialPageRoute(
  152. builder: (context) {
  153. return PostsScreen(title: _names[index]);
  154. },
  155. ));
  156. break;
  157. case 2:
  158. Navigator.push(context, MaterialPageRoute(
  159. builder: (context) {
  160. return PostsScreen(title: _names[index]);
  161. },
  162. ));
  163. break;
  164. case 3:
  165. Navigator.push(context, MaterialPageRoute(
  166. builder: (context) {
  167. return PostsScreen(title: _names[index]);
  168. },
  169. ));
  170. break;
  171. case 4:
  172. Navigator.push(context, MaterialPageRoute(
  173. builder: (context) {
  174. return PostsScreen(title: _names[index]);
  175. },
  176. ));
  177. break;
  178. case 5:
  179. Navigator.push(context, MaterialPageRoute(
  180. builder: (context) {
  181. return const AboutUsScreen();
  182. },
  183. ));
  184. break;
  185. }
  186. }
  187. }