diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ee5149c..cdbf5e5 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -8,7 +8,9 @@ + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..e66f3f9 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..56c14d7 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..1082541 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..2e2a989 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..f34def9 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..6c5a3d1 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..5cf5549 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..c2c7f9c Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..9554a74 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..0aff0df 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..1a520a8 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..e909977 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..5442321 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..043f2a4 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..f3a76ce Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/assets/icons/next.svg b/assets/icons/next.svg new file mode 100644 index 0000000..778158f --- /dev/null +++ b/assets/icons/next.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/icons/next_single.svg b/assets/icons/next_single.svg new file mode 100644 index 0000000..7deebfa --- /dev/null +++ b/assets/icons/next_single.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/prev.svg b/assets/icons/prev.svg new file mode 100644 index 0000000..b5cae00 --- /dev/null +++ b/assets/icons/prev.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/icons/prev_single.svg b/assets/icons/prev_single.svg new file mode 100644 index 0000000..04e2982 --- /dev/null +++ b/assets/icons/prev_single.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/logos/cloud_logo.svg b/assets/logos/cloud_logo.svg new file mode 100644 index 0000000..4cf9e0c --- /dev/null +++ b/assets/logos/cloud_logo.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4..4ae7e05 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf0..0761f57 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd9..6baa946 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b..cf312d2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde121..0788040 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e..e351e06 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc230..c38e2ab 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd9..6baa946 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8..2b7e3ce 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b86..7a246b0 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b86..7a246b0 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d16..def093a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d..a905588 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41..a1052b2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f58..ba92f0a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/lib/main.dart b/lib/main.dart index 87ab1ad..526e50b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,11 +2,10 @@ import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:tangheem/ui/home_screen.dart'; -import 'package:tangheem/ui/surah_screen.dart'; -import 'package:tangheem/ui/tangheem_screen.dart'; -import 'package:tangheem/widgets/common_appbar_widget.dart'; - +import 'package:tangheem/ui/common_appbar.dart'; +import 'package:tangheem/ui/screens/home_screen.dart'; +import 'package:tangheem/ui/screens/surah_screen.dart'; +import 'package:tangheem/ui/screens/tangheem_screen.dart'; import 'classes/const.dart'; void main() { @@ -26,14 +25,14 @@ class Application extends StatelessWidget { var className; switch (settings.name) { case HomeScreen.routeName: - className = CommonAppbarWidget(showDrawer: true, child: HomeScreen()); + className = CommonAppbar(showDrawer: true, child: HomeScreen()); break; case TangheemScreen.routeName: - className = CommonAppbarWidget(child: TangheemScreen()); + className = CommonAppbar(child: TangheemScreen()); break; case SurahScreen.routeName: String query = settings.arguments.toString(); - className = CommonAppbarWidget(child: SurahScreen(query: query)); + className = CommonAppbar(child: SurahScreen(query: query)); break; } return goToNavigation(className); diff --git a/lib/ui/common_appbar.dart b/lib/ui/common_appbar.dart new file mode 100644 index 0000000..c278932 --- /dev/null +++ b/lib/ui/common_appbar.dart @@ -0,0 +1,291 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:tangheem/classes/const.dart'; + +class CommonAppbar extends StatefulWidget { + final bool showDrawer; + final Widget child; + + CommonAppbar({Key key, this.showDrawer = false, @required this.child}) : super(key: key); + + @override + _CommonAppbarState createState() { + return _CommonAppbarState(); + } +} + +class _CommonAppbarState extends State { + final GlobalKey _scaffoldKey = new GlobalKey(); + + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + key: widget.showDrawer ? _scaffoldKey : null, + drawer: widget.showDrawer ? drawerView() : null, + resizeToAvoidBottomInset: true, + drawerScrimColor: Colors.black.withOpacity(.3), + body: SafeArea( + child: Column( + children: [ + Container( + color: Colors.white, + height: 100, + padding: EdgeInsets.only(top: 8, bottom: 8, right: 16), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + IconButton( + icon: Icon(widget.showDrawer ? Icons.menu : Icons.arrow_back_ios, color: Const.textGrey), + padding: EdgeInsets.only(left: 16), + onPressed: () { + if (widget.showDrawer) { + _scaffoldKey.currentState.openDrawer(); + } else { + Navigator.pop(context); + } + }, + ), + Hero( + tag: "logo", + child: SvgPicture.asset( + "assets/logos/tangheem_logo.svg", + height: 100, + width: 100, + alignment: Alignment.centerRight, + ), + ) + ], + ), + ), + Expanded(child: Directionality(textDirection: TextDirection.rtl, child: widget.child)), + ], + ), + ), + ); + } + + Widget drawerView() { + var height = MediaQuery.of(context).padding.top; + return Drawer( + elevation: 0, + child: Container( + color: Colors.white, + child: Column( + children: [ + Container( + height: 100 + height, + padding: EdgeInsets.only(left: 0, top: height), + alignment: Alignment.centerLeft, + child: IconButton( + icon: Icon(Icons.clear, color: Const.textGrey), + onPressed: () { + if (_scaffoldKey.currentState.isDrawerOpen) { + Navigator.pop(context); + } + }, + ), + ), + Container( + margin: EdgeInsets.only(top: 8, bottom: 16), + padding: EdgeInsets.only(left: 12, right: 12), + child: Row( + children: [ + commonIconButton("assets/icons/accessibility.svg", () {}), + commonIconButton("assets/icons/dark_mode.svg", () {}), + commonIconButton("assets/icons/bookmark.svg", () {}), + commonIconButton("assets/icons/increase_size.svg", () {}), + commonIconButton("assets/icons/reduce_size.svg", () {}), + commonIconButton("assets/icons/notification.svg", () {}), + commonIconButton("assets/icons/user_logged.svg", () {}), + ], + ), + ), + Expanded( + child: ListView( + physics: BouncingScrollPhysics(), + padding: EdgeInsets.only(left: 24, right: 24), + children: [ + myListItem("assets/icons/home.svg", "الرئيسية", true), + SizedBox(height: 2), + myListItem("assets/icons/encyclopedia.svg", "موسوعة تنغيم", false), + Container( + width: double.infinity, + child: Row( + children: [ + Expanded( + child: myListItem("assets/icons/about.svg", "التعريف بموسوعة تنغيم", false), + ), + Container( + // width: 35, + height: 40, + margin: EdgeInsets.only(right: 17, left: 10), + // color: Const.primaryBlack, + child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), + ), + ], + ), + ), + Container( + width: double.infinity, + child: Row( + children: [ + Expanded( + child: myListItem("assets/icons/browse.svg", "تصفح الموسوعة", false), + ), + Container( + // width: 35, + height: 40, + margin: EdgeInsets.only(right: 17, left: 10), + // color: Const.primaryBlack, + child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), + ), + ], + ), + ), + Container( + width: double.infinity, + child: Row( + children: [ + Expanded( + child: myListItem("assets/icons/download.svg", "تنزيل الموسوعة", false), + ), + Container( + // width: 35, + height: 40, + margin: EdgeInsets.only(right: 17, left: 10), + // color: Const.primaryBlack, + child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), + ), + ], + ), + ), + Container( + width: double.infinity, + child: Row( + children: [ + Expanded( + child: myListItem("assets/icons/copyrights.svg", "حقوق الموسوعة", false), + ), + Container( + // width: 35, + height: 40, + margin: EdgeInsets.only(right: 17, left: 10), + // color: Const.primaryBlack, + child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), + ), + ], + ), + ), + Container( + width: double.infinity, + child: Row( + children: [ + Expanded( + child: myListItem("assets/icons/members.svg", "اللجنة الاستشارية", false), + ), + Container( + // width: 35, + height: 40, + margin: EdgeInsets.only(right: 17, left: 10), + // color: Const.primaryBlack, + child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), + ), + ], + ), + ), + SizedBox(height: 2), + myListItem("assets/icons/read_quran.svg", "اقرأ القرآن الكريم", false), + SizedBox(height: 2), + myListItem("assets/icons/contact.svg", "الاتصال بنا", false), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 16, bottom: 12), + padding: EdgeInsets.only(left: 32, right: 32), + child: Row( + children: [ + commonIconButton("assets/icons/linkedin.svg", () {}, size: 35), + commonIconButton("assets/icons/pinterest.svg", () {}, size: 35), + commonIconButton("assets/icons/whatsapp.svg", () {}, size: 35), + commonIconButton("assets/icons/facebook.svg", () {}, size: 35), + commonIconButton("assets/icons/instgram.svg", () {}, size: 35), + commonIconButton("assets/icons/twitter.svg", () {}, size: 35), + ], + ), + ), + Padding( + padding: EdgeInsets.only(left: 32, right: 32, bottom: 8), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Powered by Cloud Solutions", + maxLines: 1, + textAlign: TextAlign.right, + style: TextStyle(fontSize: 14), + ), + SizedBox(width: 8), + SvgPicture.asset("assets/logos/cloud_logo.svg", width: 30, height: 30) + ], + ), + ) + ], + ), + ), + ); + } + + Widget commonIconButton(String icon, VoidCallback onPressed, {double size}) { + return Expanded( + child: IconButton(padding: EdgeInsets.zero, icon: SvgPicture.asset(icon, height: size ?? 25, width: size ?? 30), onPressed: onPressed), + ); + } + + Widget myListItem(String icon, String title, bool isSelected) { + return InkWell( + onTap: () { + Navigator.pop(context); + }, + child: Container( + height: 40, + padding: EdgeInsets.only(left: 8, right: 8), + alignment: Alignment.centerRight, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + gradient: isSelected + ? LinearGradient( + stops: [0.0, 0.5], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Const.gradientPink, Const.gradientOrange], + ) + : null, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + title, + style: TextStyle(fontSize: 14, color: isSelected ? Colors.white : Const.textGrey), + ), + SizedBox(width: 8), + SvgPicture.asset(icon, height: 20, width: 20, color: isSelected ? Colors.white : Const.textGrey), + ], + ), + ), + ); + } +} diff --git a/lib/ui/home_screen.dart b/lib/ui/home_screen.dart deleted file mode 100644 index 292f7d5..0000000 --- a/lib/ui/home_screen.dart +++ /dev/null @@ -1,134 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/painting.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:tangheem/classes/const.dart'; -import 'package:tangheem/ui/surah_screen.dart'; -import 'package:tangheem/ui/tangheem_screen.dart'; -import 'package:tangheem/widgets/common_dropdown_button.dart'; - -class HomeScreen extends StatefulWidget { - static const String routeName = "/"; - - HomeScreen({Key key}) : super(key: key); - - @override - _HomeScreenState createState() { - return _HomeScreenState(); - } -} - -class _HomeScreenState extends State { - TextEditingController _searchController = TextEditingController(); - - @override - void initState() { - super.initState(); - SystemChannels.textInput.invokeMethod('TextInput.hide'); - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Container( - padding: EdgeInsets.fromLTRB(16, 16, 16, 0), - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - "موسوعةالأداء القرآني", - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: Const.primaryBlue, height: 1), - ), - SizedBox(height: 4), - Text( - "للأساليب اللغوية", - style: TextStyle(fontSize: 20, color: Const.primaryBlue, height: 1), - ), - SizedBox(height: 8), - Text( - "تساعدك موسوعة \"تنغيم\" على أداء الأساليب اللغوية القرآنية (كالاستفهام والأمر والنهي والإتمام) بما يخدم معنى الآية. وقد أشرف عليها متخصصون في اللغة العربية والدراسات القرآنية.", - style: TextStyle(fontSize: 14, color: Const.textGrey, height: 1), - ), - SizedBox(height: 32), - Row( - children: [ - Expanded( - child: CommonDropDownButton("الأسلوب اللغوي", onPressed: () {}), - ), - SizedBox(width: 8), - Expanded( - child: CommonDropDownButton("السورة", onPressed: () {}), - ) - ], - ), - SizedBox(height: 16), - CommonDropDownButton( - "ابدأ البحث", - color: Const.secondaryPink, - icon: "assets/icons/go_forward.svg", - widthHeight: 20, - iconColor: Colors.white, - onPressed: () { - FocusScope.of(context).unfocus(); - Navigator.pushNamed(context, TangheemScreen.routeName); - }, - ), - SizedBox(height: 16), - SizedBox( - height: 40, - child: TextField( - controller: _searchController, - style: TextStyle(color: Const.primaryBlack, fontSize: 14), - decoration: InputDecoration( - contentPadding: EdgeInsets.fromLTRB(4, 4, 4, 4), - alignLabelWithHint: true, - fillColor: Colors.white, - filled: true, - hintStyle: TextStyle(color: Const.textHintGrey, fontSize: 12), - hintText: "البحث عن سورة أو آية", - prefixIconConstraints: BoxConstraints(maxHeight: 16), - prefixIcon: Padding( - padding: EdgeInsets.only(right: 6), - child: SvgPicture.asset( - "assets/icons/search.svg", - //color: Const.secondaryOrange, - ), - ), - suffixIcon: InkWell( - onTap: () { - FocusScope.of(context).unfocus(); - Navigator.pushNamed(context, SurahScreen.routeName, arguments: _searchController.text); - }, - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - child: Container( - alignment: Alignment.center, - width: 80, - child: Text( - "بحث", - style: TextStyle(fontSize: 14, color: Colors.white), - ), - decoration: BoxDecoration( - color: Const.secondaryPink, - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(6), - topLeft: Radius.circular(6), - ), - ), - ), - ), - border: OutlineInputBorder(borderRadius: BorderRadius.circular(6), borderSide: BorderSide.none), - ), - ), - ) - ], - ), - ); - } -} diff --git a/lib/ui/screens/home_screen.dart b/lib/ui/screens/home_screen.dart new file mode 100644 index 0000000..461dcb0 --- /dev/null +++ b/lib/ui/screens/home_screen.dart @@ -0,0 +1,145 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/painting.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:tangheem/classes/const.dart'; +import 'package:tangheem/ui/screens/surah_screen.dart'; +import 'package:tangheem/ui/screens/tangheem_screen.dart'; +import 'package:tangheem/widgets/common_dropdown_button.dart'; + +class HomeScreen extends StatefulWidget { + static const String routeName = "/"; + + HomeScreen({Key key}) : super(key: key); + + @override + _HomeScreenState createState() { + return _HomeScreenState(); + } +} + +class _HomeScreenState extends State { + TextEditingController _searchController = TextEditingController(); + FocusNode _searchFocusNode = FocusNode(); + @override + void initState() { + super.initState(); + SystemChannels.textInput.invokeMethod('TextInput.hide'); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + width: double.infinity, + child: SingleChildScrollView( + padding: EdgeInsets.fromLTRB(16, 16, 16, 0), + physics: BouncingScrollPhysics(), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "موسوعةالأداء القرآني", + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: Const.primaryBlue, height: 1), + ), + SizedBox(height: 4), + Text( + "للأساليب اللغوية", + style: TextStyle(fontSize: 20, color: Const.primaryBlue, height: 1), + ), + SizedBox(height: 8), + Text( + "تساعدك موسوعة \"تنغيم\" على أداء الأساليب اللغوية القرآنية (كالاستفهام والأمر والنهي والإتمام) بما يخدم معنى الآية. وقد أشرف عليها متخصصون في اللغة العربية والدراسات القرآنية.", + style: TextStyle(fontSize: 14, color: Const.textGrey, height: 1), + ), + SizedBox(height: 32), + Row( + children: [ + Expanded( + child: CommonDropDownButton("الأسلوب اللغوي", onPressed: () {}), + ), + SizedBox(width: 8), + Expanded( + child: CommonDropDownButton("السورة", onPressed: () {}), + ) + ], + ), + SizedBox(height: 16), + CommonDropDownButton( + "ابدأ البحث", + color: Const.secondaryPink, + icon: "assets/icons/go_forward.svg", + widthHeight: 20, + isExpanded: false, + iconColor: Colors.white, + onPressed: () async { + _searchFocusNode.unfocus(); + _searchFocusNode.canRequestFocus = false; + await Navigator.pushNamed(context, TangheemScreen.routeName); + _searchFocusNode.canRequestFocus = true; + }, + ), + SizedBox(height: 16), + Container( + height: 50, + padding: EdgeInsets.only(top: 4, bottom: 6), + child: TextField( + controller: _searchController, + focusNode: _searchFocusNode, + style: TextStyle(color: Const.primaryBlack, fontSize: 14), + decoration: InputDecoration( + contentPadding: EdgeInsets.fromLTRB(4, 4, 4, 4), + alignLabelWithHint: true, + fillColor: Colors.white, + filled: true, + hintStyle: TextStyle(color: Const.textHintGrey, fontSize: 12), + hintText: "البحث عن سورة أو آية", + prefixIconConstraints: BoxConstraints(maxHeight: 16), + prefixIcon: Padding( + padding: EdgeInsets.only(right: 6), + child: SvgPicture.asset( + "assets/icons/search.svg", + //color: Const.secondaryOrange, + ), + ), + suffixIcon: InkWell( + onTap: () async { + _searchFocusNode.unfocus(); + _searchFocusNode.canRequestFocus = false; + await Navigator.pushNamed(context, SurahScreen.routeName, arguments: _searchController.text); + _searchFocusNode.canRequestFocus = true; + }, + splashColor: Colors.transparent, + highlightColor: Colors.transparent, + child: Container( + alignment: Alignment.center, + width: 80, + child: Text( + "بحث", + style: TextStyle(fontSize: 14, color: Colors.white), + ), + decoration: BoxDecoration( + color: Const.secondaryPink, + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(6), + topLeft: Radius.circular(6), + ), + ), + ), + ), + border: OutlineInputBorder(borderRadius: BorderRadius.circular(6), borderSide: BorderSide.none), + ), + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/ui/surah_screen.dart b/lib/ui/screens/surah_screen.dart similarity index 92% rename from lib/ui/surah_screen.dart rename to lib/ui/screens/surah_screen.dart index 9748c2a..ec9bfee 100644 --- a/lib/ui/surah_screen.dart +++ b/lib/ui/screens/surah_screen.dart @@ -73,8 +73,8 @@ class _SurahScreenState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - nextOptionButton("assets/icons/go_forward.svg", "سورة الفاتحة", () {}), - previousOptionButton("assets/icons/go_forward.svg", "سورة آل عمران", () {}), + nextOptionButton("assets/icons/prev.svg", "سورة الفاتحة", () {}), + previousOptionButton("assets/icons/next.svg", "سورة آل عمران", () {}), ], ), Expanded( @@ -107,14 +107,14 @@ class _SurahScreenState extends State { SizedBox(height: 8), Text( "1 2 3 4 5 6 7 8 9", - style: TextStyle(fontSize: 14, color: Const.textHintGrey), + style: TextStyle(fontSize: 16, color: Const.textHintGrey), ), SizedBox(height: 4), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - nextOptionButton("assets/icons/go_forward.svg", "الآيات السابقة", () {}), - previousOptionButton("assets/icons/go_forward.svg", "الآيات التالية", () {}), + nextOptionButton("assets/icons/prev_single.svg", "الآيات السابقة", () {}), + previousOptionButton("assets/icons/next_single.svg", "الآيات التالية", () {}), ], ), ], @@ -134,7 +134,7 @@ class _SurahScreenState extends State { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ - SvgPicture.asset(icon, height: 16, width: 16, color: Colors.orange), + SvgPicture.asset(icon, height: 12, width: 12), SizedBox(width: 4), Text( text, @@ -157,7 +157,7 @@ class _SurahScreenState extends State { style: TextStyle(color: Const.textGrey), ), SizedBox(width: 4), - SvgPicture.asset(icon, height: 16, width: 16, color: Colors.orange), + SvgPicture.asset(icon, height: 12, width: 12), ], ), ); diff --git a/lib/ui/tangheem_screen.dart b/lib/ui/screens/tangheem_screen.dart similarity index 95% rename from lib/ui/tangheem_screen.dart rename to lib/ui/screens/tangheem_screen.dart index 0cf7db6..a38dc1e 100644 --- a/lib/ui/tangheem_screen.dart +++ b/lib/ui/screens/tangheem_screen.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:tangheem/classes/const.dart'; import 'package:tangheem/widgets/aya_player_widget.dart'; -import 'package:tangheem/widgets/common_dropdown_button.dart'; class TangheemScreen extends StatefulWidget { static const String routeName = "/tangheem"; @@ -145,8 +144,8 @@ class _TangheemScreenState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - nextOptionButton("assets/icons/go_forward.svg", "الآيات السابقة", () {}), - previousOptionButton("assets/icons/go_forward.svg", "الآيات التالية", () {}), + nextOptionButton("assets/icons/prev_single.svg", "الآيات السابقة", () {}), + previousOptionButton("assets/icons/next_single.svg", "الآيات التالية", () {}), ], ), ), @@ -167,7 +166,7 @@ class _TangheemScreenState extends State { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ - SvgPicture.asset(icon, height: 16, width: 16,color: Colors.orange), + SvgPicture.asset(icon, height: 12, width: 12), SizedBox(width: 4), Text( text, @@ -190,7 +189,7 @@ class _TangheemScreenState extends State { style: TextStyle(color: Const.textGrey), ), SizedBox(width: 4), - SvgPicture.asset(icon, height: 16, width: 16,color: Colors.orange), + SvgPicture.asset(icon, height: 12, width: 12), ], ), ); diff --git a/lib/widgets/aya_player_widget.dart b/lib/widgets/aya_player_widget.dart index df83386..5368736 100644 --- a/lib/widgets/aya_player_widget.dart +++ b/lib/widgets/aya_player_widget.dart @@ -54,7 +54,7 @@ class _AyaPlayerWidgetState extends State { decoration: BoxDecoration( image: DecorationImage( fit: BoxFit.cover, - image: NetworkImage("https://i.pinimg.com/originals/91/cf/45/91cf453d79f58df425b6b0267603ccb3.jpg"), + image: NetworkImage("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSgswb98Ga7aJjIaNvqUWBsjMkdR18xzp3pyg&usqp=CAU"), ), borderRadius: BorderRadius.all( Radius.circular(30.0), diff --git a/lib/widgets/common_appbar_widget.dart b/lib/widgets/common_appbar_widget.dart deleted file mode 100644 index 02d07c2..0000000 --- a/lib/widgets/common_appbar_widget.dart +++ /dev/null @@ -1,267 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:tangheem/classes/const.dart'; - -class CommonAppbarWidget extends StatefulWidget { - final bool showDrawer; - final Widget child; - - CommonAppbarWidget({Key key, this.showDrawer = false, @required this.child}) : super(key: key); - - @override - _CommonAppbarWidgetState createState() { - return _CommonAppbarWidgetState(); - } -} - -class _CommonAppbarWidgetState extends State { - final GlobalKey _scaffoldKey = new GlobalKey(); - - @override - void initState() { - super.initState(); - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - key: widget.showDrawer ? _scaffoldKey : null, - drawer: widget.showDrawer ? drawerView() : null, - drawerScrimColor: Colors.black.withOpacity(.3), - body: SafeArea( - child: Column( - children: [ - Container( - color: Colors.white, - height: 100, - padding: EdgeInsets.only(top: 8, bottom: 8,right: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - IconButton( - icon: Icon(widget.showDrawer ? Icons.menu : Icons.arrow_back_ios, color: Const.textGrey), - padding: EdgeInsets.only(left: 16), - onPressed: () { - if (widget.showDrawer) { - _scaffoldKey.currentState.openDrawer(); - } else { - Navigator.pop(context); - } - }, - ), - SvgPicture.asset( - "assets/logos/tangheem_logo.svg", - height: 100, - width: 100, - alignment: Alignment.centerRight, - ) - ], - ), - ), - Expanded(child: Directionality(textDirection: TextDirection.rtl, child: widget.child)), - ], - ), - ), - ); - } - - Widget drawerView() { - var height = MediaQuery.of(context).padding.top; - return Drawer( - elevation: 0, - child: Container( - color: Colors.white, - child: Column( - children: [ - Container( - height: 100 + height, - padding: EdgeInsets.only(left: 0, top: height), - alignment: Alignment.centerLeft, - child: IconButton( - icon: Icon(Icons.clear, color: Const.textGrey), - onPressed: () { - if (_scaffoldKey.currentState.isDrawerOpen) { - Navigator.pop(context); - } - }, - ), - ), - Container( - margin: EdgeInsets.only(top: 8, bottom: 16), - padding: EdgeInsets.only(left: 12, right: 12), - child: Row( - children: [ - commonIconButton("assets/icons/accessibility.svg", () {}), - commonIconButton("assets/icons/dark_mode.svg", () {}), - commonIconButton("assets/icons/bookmark.svg", () {}), - commonIconButton("assets/icons/increase_size.svg", () {}), - commonIconButton("assets/icons/reduce_size.svg", () {}), - commonIconButton("assets/icons/notification.svg", () {}), - commonIconButton("assets/icons/user_logged.svg", () {}), - ], - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(left: 24, right: 24), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - myListItem("assets/icons/home.svg", "الرئيسية", true), - SizedBox(height: 2), - myListItem("assets/icons/encyclopedia.svg", "موسوعة تنغيم", false), - Container( - width: double.infinity, - child: Row( - children: [ - Expanded( - child: myListItem("assets/icons/about.svg", "التعريف بموسوعة تنغيم", false), - ), - Container( - // width: 35, - height: 40, - margin: EdgeInsets.only(right: 17, left: 10), - // color: Const.primaryBlack, - child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), - ), - ], - ), - ), - Container( - width: double.infinity, - child: Row( - children: [ - Expanded( - child: myListItem("assets/icons/browse.svg", "تصفح الموسوعة", false), - ), - Container( - // width: 35, - height: 40, - margin: EdgeInsets.only(right: 17, left: 10), - // color: Const.primaryBlack, - child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), - ), - ], - ), - ), - Container( - width: double.infinity, - child: Row( - children: [ - Expanded( - child: myListItem("assets/icons/download.svg", "تنزيل الموسوعة", false), - ), - Container( - // width: 35, - height: 40, - margin: EdgeInsets.only(right: 17, left: 10), - // color: Const.primaryBlack, - child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), - ), - ], - ), - ), - Container( - width: double.infinity, - child: Row( - children: [ - Expanded( - child: myListItem("assets/icons/copyrights.svg", "حقوق الموسوعة", false), - ), - Container( - // width: 35, - height: 40, - margin: EdgeInsets.only(right: 17, left: 10), - // color: Const.primaryBlack, - child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), - ), - ], - ), - ), - Container( - width: double.infinity, - child: Row( - children: [ - Expanded( - child: myListItem("assets/icons/members.svg", "اللجنة الاستشارية", false), - ), - Container( - // width: 35, - height: 40, - margin: EdgeInsets.only(right: 17, left: 10), - // color: Const.primaryBlack, - child: VerticalDivider(color: Const.primaryBlack, thickness: .7, width: 1), - ), - ], - ), - ), - SizedBox(height: 2), - myListItem("assets/icons/read_quran.svg", "اقرأ القرآن الكريم", false), - SizedBox(height: 2), - myListItem("assets/icons/contact.svg", "الاتصال بنا", false), - ], - ), - ), - ), - Container( - margin: EdgeInsets.only(top: 16, bottom: 0), - padding: EdgeInsets.only(left: 32, right: 32), - child: Row( - children: [ - commonIconButton("assets/icons/linkedin.svg", () {}, size: 35), - commonIconButton("assets/icons/pinterest.svg", () {}, size: 35), - commonIconButton("assets/icons/whatsapp.svg", () {}, size: 35), - commonIconButton("assets/icons/facebook.svg", () {}, size: 35), - commonIconButton("assets/icons/instgram.svg", () {}, size: 35), - commonIconButton("assets/icons/twitter.svg", () {}, size: 35), - ], - ), - ), - ], - ), - ), - ); - } - - Widget commonIconButton(String icon, VoidCallback onPressed, {double size}) { - return Expanded( - child: IconButton(padding: EdgeInsets.zero, icon: SvgPicture.asset(icon, height: size ?? 25, width: size ?? 30), onPressed: onPressed), - ); - } - - Widget myListItem(String icon, String title, bool isSelected) { - return Container( - height: 40, - padding: EdgeInsets.only(left: 8, right: 8), - alignment: Alignment.centerRight, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6), - gradient: isSelected - ? LinearGradient( - stops: [0.0, 0.5], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [Const.gradientPink, Const.gradientOrange], - ) - : null, - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - title, - style: TextStyle(fontSize: 14, color: isSelected ? Colors.white : Const.textGrey), - ), - SizedBox(width: 8), - SvgPicture.asset(icon, height: 20, width: 20, color: isSelected ? Colors.white : Const.textGrey), - ], - ), - ); - } -} diff --git a/lib/widgets/common_dropdown_button.dart b/lib/widgets/common_dropdown_button.dart index 37d1af7..1974688 100644 --- a/lib/widgets/common_dropdown_button.dart +++ b/lib/widgets/common_dropdown_button.dart @@ -7,10 +7,11 @@ class CommonDropDownButton extends StatelessWidget { final String icon; final Color iconColor; final Color color; + final bool isExpanded; final VoidCallback onPressed; final double widthHeight; - CommonDropDownButton(this.text, {Key key, this.onPressed, this.color, this.icon, this.widthHeight, this.iconColor}) : super(key: key); + CommonDropDownButton(this.text, {Key key, this.onPressed, this.isExpanded = true, this.color, this.icon, this.widthHeight, this.iconColor}) : super(key: key); @override Widget build(BuildContext context) { @@ -24,17 +25,31 @@ class CommonDropDownButton extends StatelessWidget { color: color ?? Const.primaryBlue, borderRadius: BorderRadius.circular(6), ), - padding: EdgeInsets.fromLTRB(8, 8, 16, 8), + padding: EdgeInsets.fromLTRB(8, 8, 8, 8), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ + + + isExpanded + ? Expanded( + child: Text( + text, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 12, color: Colors.white), + ), + ) + : Text( - text, - style: TextStyle(fontSize: 13, color: Colors.white), - ), - SizedBox(width: 8), + text, + maxLines: 1, + // overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 12, color: Colors.white), + ), + SizedBox(width: 4), SvgPicture.asset( icon ?? "assets/icons/drop_menu.svg", width: widthHeight ?? 10,