You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			365 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			365 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Dart
		
	
| // import 'package:flutter/material.dart';
 | |
| // import 'package:flutter_svg/flutter_svg.dart';
 | |
| // import 'package:shared_preferences/shared_preferences.dart';
 | |
| // import 'package:tangheem/api/tangheem_user_api_client.dart';
 | |
| // import 'package:tangheem/app_state/app_state.dart';
 | |
| // import 'package:tangheem/classes/colors.dart';
 | |
| // import 'package:tangheem/classes/consts.dart';
 | |
| // import 'package:tangheem/classes/utils.dart';
 | |
| // import 'package:tangheem/models/navigation_model.dart';
 | |
| // import 'package:tangheem/models/quick_links_model.dart';
 | |
| // import 'package:tangheem/ui/screens/bookmark_screen.dart';
 | |
| // import 'package:tangheem/ui/screens/content_info_screen.dart';
 | |
| // import 'package:tangheem/ui/screens/login_screen.dart';
 | |
| // import 'package:tangheem/ui/screens/pdf_viewer_screen.dart';
 | |
| // import 'package:url_launcher/url_launcher.dart';
 | |
| //
 | |
| // class CommonAppbar extends StatefulWidget {
 | |
| //   final bool showDrawer;
 | |
| //   final Widget child;
 | |
| //   final bool isFirst;
 | |
| //
 | |
| //   CommonAppbar({Key key, this.showDrawer = false, @required this.child, this.isFirst = false}) : super(key: key);
 | |
| //
 | |
| //   @override
 | |
| //   _CommonAppbarState createState() {
 | |
| //     return _CommonAppbarState();
 | |
| //   }
 | |
| // }
 | |
| //
 | |
| // class _CommonAppbarState extends State<CommonAppbar> {
 | |
| //   final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
 | |
| //   List<QuickLinksData> quickLinks = [];
 | |
| //   List<NavigationDataModel> navigationList = [];
 | |
| //
 | |
| //   @override
 | |
| //   void initState() {
 | |
| //     super.initState();
 | |
| //     getPrefs();
 | |
| //     getNavigation();
 | |
| //     getQuickLinks();
 | |
| //     //getCopyRight();
 | |
| //   }
 | |
| //
 | |
| //   // void getCopyRight() async {
 | |
| //   //   if (AppState().getContentInfoModel == null) {
 | |
| //   //     try {
 | |
| //   //       var model = await TangheemUserApiClient().getContentInfo(3);
 | |
| //   //       var contentList = model?.data ?? [];
 | |
| //   //       if (contentList.length > 0) {
 | |
| //   //         _copyRight = contentList.first;
 | |
| //   //         AppState().setContentInfoModel(_copyRight);
 | |
| //   //       }
 | |
| //   //     } catch (ex) {}
 | |
| //   //   } else {
 | |
| //   //     _copyRight = AppState().getContentInfoModel;
 | |
| //   //   }
 | |
| //   //   setState(() {});
 | |
| //   // }
 | |
| //
 | |
| //   void getNavigation() async {
 | |
| //     if (AppState().getNavigationModel?.data == null) {
 | |
| //       try {
 | |
| //         var model = await TangheemUserApiClient().getNavigation();
 | |
| //         navigationList = model?.data ?? [];
 | |
| //         navigationList.sort((a, b) => a.orderNo.compareTo(b.orderNo));
 | |
| //         AppState().setNavigationModel(model);
 | |
| //       } catch (ex) {}
 | |
| //     } else {
 | |
| //       navigationList = AppState().getNavigationModel.data;
 | |
| //     }
 | |
| //     setState(() {});
 | |
| //   }
 | |
| //
 | |
| //   void getQuickLinks() async {
 | |
| //     if (widget.showDrawer) {
 | |
| //       try {
 | |
| //         quickLinks = (await TangheemUserApiClient().quickLinks())?.data ?? [];
 | |
| //         quickLinks = quickLinks.where((element) => element.position == "down").toList();
 | |
| //         quickLinks.sort((a, b) => a.orderNo.compareTo(b.orderNo));
 | |
| //       } catch (ex) {}
 | |
| //       setState(() {});
 | |
| //     }
 | |
| //   }
 | |
| //
 | |
| //   int fontSize;
 | |
| //   SharedPreferences prefs;
 | |
| //
 | |
| //   void getPrefs() async {
 | |
| //     prefs = await SharedPreferences.getInstance();
 | |
| //     fontSize = prefs.getInt(GlobalConsts.fontZoomSize) ?? 18;
 | |
| //   }
 | |
| //
 | |
| //   @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(
 | |
| //                 crossAxisAlignment: CrossAxisAlignment.center,
 | |
| //                 children: [
 | |
| //                   if (!widget.isFirst)
 | |
| //                     IconButton(
 | |
| //                       icon: Icon(widget.showDrawer ? Icons.menu : Icons.arrow_back_ios, color: ColorConsts.textGrey),
 | |
| //                       padding: EdgeInsets.only(left: 16),
 | |
| //                       onPressed: () {
 | |
| //                         if (widget.showDrawer) {
 | |
| //                           _scaffoldKey.currentState.openDrawer();
 | |
| //                         } else {
 | |
| //                           Navigator.pop(context);
 | |
| //                         }
 | |
| //                       },
 | |
| //                     ),
 | |
| //                   Expanded(child: SizedBox()),
 | |
| //                   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: SafeArea(
 | |
| //           bottom: true,
 | |
| //           top: false,
 | |
| //           right: false,
 | |
| //           left: false,
 | |
| //           maintainBottomViewPadding: true,
 | |
| //           child: Builder(
 | |
| //             builder: (context) {
 | |
| //               bool isPortrait = MediaQuery.of(context).orientation == Orientation.portrait;
 | |
| //               Widget listContents = ListView.builder(
 | |
| //                   shrinkWrap: true,
 | |
| //                   physics: BouncingScrollPhysics(),
 | |
| //                   padding: EdgeInsets.only(left: 24, right: 24),
 | |
| //                   itemCount: navigationList.length,
 | |
| //                   itemBuilder: (context, index) {
 | |
| //                     String icon = "assets/icons/${navigationList[index].mobileFontIcon}.svg";
 | |
| //                     var subList = navigationList.where((element) => element.parentId == navigationList[index].navigationId).toList();
 | |
| //                     return Column(
 | |
| //                       mainAxisSize: MainAxisSize.min,
 | |
| //                       children: [
 | |
| //                         if (navigationList[index].parentId == 1)
 | |
| //                           myListItem(icon, navigationList[index].navigationText, navigationList[index].orderNo == 1 ? true : false, onTap: () {
 | |
| //                             String url = navigationList[index]?.mobileNavigationUrl ?? "";
 | |
| //                             if (url.isEmpty || url.length < 2) {
 | |
| //                               return;
 | |
| //                             }
 | |
| //                             Navigator.pushNamed(context, url, arguments: null);
 | |
| //                           }),
 | |
| //                         for (var subItem in subList)
 | |
| //                           Container(
 | |
| //                             width: double.infinity,
 | |
| //                             child: Row(
 | |
| //                               children: [
 | |
| //                                 Expanded(
 | |
| //                                   child: myListItem("assets/icons/${subItem.mobileFontIcon}.svg", subItem.navigationText, false, onTap: () {
 | |
| //                                     String url = subItem.mobileNavigationUrl ?? "";
 | |
| //                                     if (url.isEmpty) {
 | |
| //                                       return;
 | |
| //                                     }
 | |
| //                                     var contentId;
 | |
| //                                     if (subItem.mobileNavigationUrl == "/introduction") {
 | |
| //                                       url = ContentInfoScreen.routeName;
 | |
| //                                       contentId = 2;
 | |
| //                                     } else if (subItem.mobileNavigationUrl == "/encyclopedia") {
 | |
| //                                       url = ContentInfoScreen.routeName;
 | |
| //                                       contentId = 1;
 | |
| //                                     } else if (subItem.mobileNavigationUrl == "/tangheempdf") {
 | |
| //                                       url = PdfListScreen.routeName;
 | |
| //                                       contentId = 8;
 | |
| //                                     }
 | |
| //                                     Navigator.pushNamed(context, url, arguments: contentId);
 | |
| //                                   }),
 | |
| //                                 ),
 | |
| //                                 Container(
 | |
| //                                   height: 40,
 | |
| //                                   margin: EdgeInsets.only(right: 17, left: 10),
 | |
| //                                   child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
 | |
| //                                 ),
 | |
| //                               ],
 | |
| //                             ),
 | |
| //                           )
 | |
| //                       ],
 | |
| //                     );
 | |
| //                   });
 | |
| //               if (isPortrait) {
 | |
| //                 listContents = Expanded(child: listContents);
 | |
| //               }
 | |
| //               List<Widget> list = [
 | |
| //                 Container(
 | |
| //                   height: 100 + height,
 | |
| //                   padding: EdgeInsets.only(left: 0, top: height),
 | |
| //                   alignment: Alignment.centerLeft,
 | |
| //                   child: IconButton(
 | |
| //                     icon: Icon(Icons.clear, color: ColorConsts.textGrey),
 | |
| //                     onPressed: () {
 | |
| //                       if (_scaffoldKey.currentState.isDrawerOpen) {
 | |
| //                         Navigator.pop(context);
 | |
| //                       }
 | |
| //                     },
 | |
| //                   ),
 | |
| //                 ),
 | |
| //                 Container(
 | |
| //                   margin: EdgeInsets.only(top: 8, bottom: 16),
 | |
| //                   padding: EdgeInsets.only(left: 16, right: 16),
 | |
| //                   child: Row(
 | |
| //                     mainAxisAlignment: MainAxisAlignment.spaceEvenly,
 | |
| //                     children: [
 | |
| //                       commonIconButton("assets/icons/bookmark.svg", () {
 | |
| //                         Navigator.pushNamed(context, BookmarkScreen.routeName);
 | |
| //                       }),
 | |
| //                       commonIconButton("assets/icons/increase_size.svg", () {
 | |
| //                         if (fontSize >= 36) {
 | |
| //                           Utils.showToast("وصل حجم الخط إلى الحد الأقصى للحجم");
 | |
| //                           return;
 | |
| //                         }
 | |
| //                         fontSize += 2;
 | |
| //                         prefs.setInt(GlobalConsts.fontZoomSize, fontSize);
 | |
| //                         Utils.showToast("زيادة حجم الخط");
 | |
| //                       }),
 | |
| //                       commonIconButton("assets/icons/reduce_size.svg", () {
 | |
| //                         if (fontSize <= 12) {
 | |
| //                           Utils.showToast("وصل حجم الخط إلى الحد الأدنى للحجم");
 | |
| //                           return;
 | |
| //                         }
 | |
| //                         fontSize -= 2;
 | |
| //                         prefs.setInt(GlobalConsts.fontZoomSize, fontSize);
 | |
| //                         Utils.showToast("تم تقليل حجم الخط");
 | |
| //                       }),
 | |
| //                       commonIconButton("assets/icons/user_logged.svg", () {
 | |
| //                         if (AppState().isUserLogin) {
 | |
| //                           Utils.showToast("أنت بالفعل تسجيل الدخول");
 | |
| //                           return;
 | |
| //                         }
 | |
| //                         Navigator.pushNamed(context, LoginScreen.routeName);
 | |
| //                       }),
 | |
| //                     ],
 | |
| //                   ),
 | |
| //                 ),
 | |
| //                 listContents,
 | |
| //                 Container(
 | |
| //                   margin: EdgeInsets.only(top: 16, bottom: 12),
 | |
| //                   padding: EdgeInsets.only(left: 32, right: 32),
 | |
| //                   child: Row(
 | |
| //                     children: [
 | |
| //                       for (QuickLinksData _quickLink in quickLinks)
 | |
| //                        commonIconButton(ApiConsts.baseUrl + _quickLink.exposeFilePath, () { //for live production server
 | |
| //                     //     commonIconButton( _quickLink.exposeFilePath, () {
 | |
| //                           _launchURL(_quickLink.imageUrl);
 | |
| //                         }, size: 35, isAsset: false),
 | |
| //                     ],
 | |
| //                   ),
 | |
| //                 ),
 | |
| //                 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, color: Colors.black87),
 | |
| //                       ),
 | |
| //                       SizedBox(width: 8),
 | |
| //                       SvgPicture.asset("assets/logos/cloud_logo.svg", width: 30, height: 30)
 | |
| //                     ],
 | |
| //                   ),
 | |
| //                 )
 | |
| //               ];
 | |
| //               return isPortrait ? Column(children: list) : ListView(children: list);
 | |
| //             },
 | |
| //           ),
 | |
| //         ),
 | |
| //       ),
 | |
| //     );
 | |
| //   }
 | |
| //
 | |
| //   void _launchURL(String _url) async => await canLaunch(_url) ? await launch(_url) : throw 'Could not launch $_url';
 | |
| //
 | |
| //   Widget commonIconButton(String icon, VoidCallback onPressed, {double size, bool isAsset = true}) {
 | |
| //     return Expanded(
 | |
| //       child: IconButton(
 | |
| //           padding: EdgeInsets.zero,
 | |
| //           icon: isAsset ? SvgPicture.asset(icon, height: size ?? 25, width: size ?? 30) : Image.network(icon, height: size ?? 25, width: size ?? 30),
 | |
| //           onPressed: () {
 | |
| //             Navigator.pop(context);
 | |
| //             Future.delayed(Duration(milliseconds: 200), () => onPressed());
 | |
| //           }),
 | |
| //     );
 | |
| //   }
 | |
| //
 | |
| //   Widget myListItem(String icon, String title, bool isSelected, {VoidCallback onTap}) {
 | |
| //     return InkWell(
 | |
| //       onTap: () {
 | |
| //         Navigator.pop(context);
 | |
| //         if (onTap != null) {
 | |
| //           Future.delayed(Duration(milliseconds: 200), () => onTap());
 | |
| //         }
 | |
| //       },
 | |
| //       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: [ColorConsts.gradientPink, ColorConsts.gradientOrange],
 | |
| //                 )
 | |
| //               : null,
 | |
| //         ),
 | |
| //         child: Row(
 | |
| //           mainAxisSize: MainAxisSize.min,
 | |
| //           children: [
 | |
| //             Text(
 | |
| //               title,
 | |
| //               style: TextStyle(fontSize: 14, color: isSelected ? Colors.white : ColorConsts.textGrey),
 | |
| //             ),
 | |
| //             SizedBox(width: 8),
 | |
| //             SvgPicture.asset(icon, height: 20, width: 20, color: isSelected ? Colors.white : ColorConsts.textGrey),
 | |
| //           ],
 | |
| //         ),
 | |
| //       ),
 | |
| //     );
 | |
| //   }
 | |
| // }
 |