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.

195 lines
6.7 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
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 * 20 / AppConstants.instance.appHeight,
  41. left: context.width * 86 / AppConstants.instance.appWidth,
  42. right: context.width * 86 / AppConstants.instance.appWidth,
  43. ),
  44. child: Image.asset(
  45. 'ic_main_header'.pngPath,
  46. width: context.width * 200 / AppConstants.instance.appWidth,
  47. height: context.height * 200 / AppConstants.instance.appHeight,
  48. ),
  49. ),
  50. Text(
  51. Translator.translate('main_header_text'),
  52. style: const TextStyle(
  53. color: Color(0xffFFD800),
  54. fontSize: 28,
  55. ),
  56. ),
  57. Text(
  58. Translator.translate('second_header_text'),
  59. style: const TextStyle(
  60. color: Color(0xffDEDEDE),
  61. fontSize: 16,
  62. ),
  63. ),
  64. Container(
  65. decoration: BoxDecoration(
  66. color: const Color(0xffF4F4F8),
  67. borderRadius: BorderRadius.circular(22),
  68. ),
  69. margin: EdgeInsets.only(
  70. left: context.width * 35 / AppConstants.instance.appWidth,
  71. right: context.width * 35 / AppConstants.instance.appWidth,
  72. top: context.height * 40 / AppConstants.instance.appHeight,
  73. bottom: context.height * 60 / AppConstants.instance.appHeight,
  74. ),
  75. padding: EdgeInsets.symmetric(
  76. vertical: context.height * 13 / AppConstants.instance.appHeight,
  77. horizontal: context.width * 8 / AppConstants.instance.appWidth,
  78. ),
  79. child: Row(
  80. mainAxisAlignment: MainAxisAlignment.end,
  81. children: [
  82. Text(
  83. Translator.translate('search_term'),
  84. style: const TextStyle(
  85. color: Color(0xffBCC1CD),
  86. fontSize: 16,
  87. ),
  88. ),
  89. SizedBox(width: context.width * 14 / AppConstants.instance.appWidth),
  90. SvgPicture.asset('ic_search'.svgPath),
  91. ],
  92. ),
  93. ),
  94. SvgPicture.asset('ic_line'.svgPath),
  95. SizedBox(height: context.height * 30 / AppConstants.instance.appHeight),
  96. Padding(
  97. padding: EdgeInsets.symmetric(horizontal: context.width * 35 / AppConstants.instance.appWidth),
  98. child: Row(
  99. children: [
  100. GestureDetector(
  101. child: MainItemWidget(icon: _icons[2], name: _names[2]),
  102. onTap: () => _openItem(index: 2),
  103. ),
  104. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  105. GestureDetector(
  106. child: MainItemWidget(icon: _icons[1], name: _names[1]),
  107. onTap: () => _openItem(index: 1),
  108. ),
  109. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  110. GestureDetector(
  111. child: MainItemWidget(icon: _icons[0], name: _names[0]),
  112. onTap: () => _openItem(index: 0),
  113. ),
  114. ],
  115. ),
  116. ),
  117. SizedBox(height: context.height * 10 / AppConstants.instance.appHeight),
  118. Padding(
  119. padding: EdgeInsets.symmetric(horizontal: context.width * 35 / AppConstants.instance.appWidth),
  120. child: Row(
  121. children: [
  122. GestureDetector(
  123. child: MainItemWidget(icon: _icons[5], name: _names[5]),
  124. onTap: () => _openItem(index: 5),
  125. ),
  126. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  127. GestureDetector(
  128. child: MainItemWidget(icon: _icons[4], name: _names[4]),
  129. onTap: () => _openItem(index: 4),
  130. ),
  131. SizedBox(width: context.width * 13 / AppConstants.instance.appWidth),
  132. GestureDetector(
  133. child: MainItemWidget(icon: _icons[3], name: _names[3]),
  134. onTap: () => _openItem(index: 3),
  135. ),
  136. ],
  137. ),
  138. ),
  139. SizedBox(height: context.height * 20 / AppConstants.instance.appHeight),
  140. ],
  141. ),
  142. );
  143. }
  144. void _openItem({required int index}) {
  145. switch (index) {
  146. case 0:
  147. Navigator.push(context, MaterialPageRoute(
  148. builder: (context) {
  149. return PostsScreen(title: _names[index]);
  150. },
  151. ));
  152. break;
  153. case 1:
  154. Navigator.push(context, MaterialPageRoute(
  155. builder: (context) {
  156. return PostsScreen(title: _names[index]);
  157. },
  158. ));
  159. break;
  160. case 2:
  161. Navigator.push(context, MaterialPageRoute(
  162. builder: (context) {
  163. return PostsScreen(title: _names[index]);
  164. },
  165. ));
  166. break;
  167. case 3:
  168. Navigator.push(context, MaterialPageRoute(
  169. builder: (context) {
  170. return PostsScreen(title: _names[index]);
  171. },
  172. ));
  173. break;
  174. case 4:
  175. Navigator.push(context, MaterialPageRoute(
  176. builder: (context) {
  177. return PostsScreen(title: _names[index]);
  178. },
  179. ));
  180. break;
  181. case 5:
  182. Navigator.push(context, MaterialPageRoute(
  183. builder: (context) {
  184. return const AboutUsScreen();
  185. },
  186. ));
  187. break;
  188. }
  189. }
  190. }