Advertisement
B33peen

Untitled

May 29th, 2024
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 7.28 KB | None | 0 0
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/gestures.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_bloc/flutter_bloc.dart';
  5. import 'package:hi_foods_business/modules/socials/cubit/facebook_connect/facebook_connect_cubit.dart';
  6. import 'package:hi_foods_business/modules/socials/model/facebook_accountList_model.dart';
  7. import 'package:hi_foods_business/modules/socials/model/facebook_connect_model.dart';
  8. import 'package:hi_foods_business/modules/socials/repository/facebook_connect_repo.dart';
  9. import 'package:webview_flutter/webview_flutter.dart';
  10.  
  11. import '../../../constants/api_constants.dart';
  12. import '../../../constants/color_constant.dart';
  13. import '../../auth/bloc/auth_cubit/auth_cubit.dart';
  14.  
  15. class FacebookConnectSheetWidget extends StatefulWidget {
  16.   final String jwt;
  17.   const FacebookConnectSheetWidget({
  18.     required this.jwt,
  19.     super.key,
  20.   });
  21.  
  22.   @override
  23.   State<FacebookConnectSheetWidget> createState() =>
  24.       _FacebookConnectSheetWidgetState();
  25. }
  26.  
  27. class _FacebookConnectSheetWidgetState
  28.     extends State<FacebookConnectSheetWidget> {
  29.   late final WebViewController webViewController;
  30.   String userAgent =
  31.       "Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
  32.   bool processing = false;
  33.   bool instaprocessing = false;
  34.   @override
  35.   void initState() {
  36.     webViewController = WebViewController()
  37.       ..setJavaScriptMode(JavaScriptMode.unrestricted)
  38.       ..setBackgroundColor(const Color(0x00000000))
  39.       ..setUserAgent(userAgent)
  40.       ..enableZoom(true)
  41.       ..setNavigationDelegate(
  42.         NavigationDelegate(
  43.           onProgress: (int progress) {},
  44.           onPageStarted: (String url) {},
  45.           onPageFinished: (String url) {},
  46.           onWebResourceError: (WebResourceError error) {},
  47.           onUrlChange: (UrlChange url) async {
  48.             final uri = Uri.parse(url.url ?? "https://hyteno.com");
  49.             final queryParams = uri.queryParameters;
  50.             late FacebookConnectModel facebookConnectModel;
  51.  
  52.             if (queryParams['fbsuccess'] == "true") {
  53.               facebookConnectModel = FacebookConnectModel(
  54.                   accessToken: queryParams['accessToken']!,
  55.                   expiryDate: queryParams['expiryDate']!,
  56.                   refreshToken: queryParams['refreshToken']!,
  57.                   pageToken: queryParams['pageToken'] ??
  58.                       queryParams['page_token'] ??
  59.                       "",
  60.                   facebookPageId:
  61.                       queryParams['facebook_account_id'].toString());
  62.               processing = true;
  63.               String refereshToken = await context
  64.                   .read<FacebookConnectRepo>()
  65.                   .fetchRefereshToken(
  66.                       accessToken: facebookConnectModel.accessToken);
  67.               facebookConnectModel =
  68.                   facebookConnectModel.copyWith(accessToken: refereshToken);
  69.               final FacebookAccount? account = await context
  70.                   .read<FacebookConnectCubit>()
  71.                   .facebookConnectRepo
  72.                   .fetchPageToken(
  73.                       access_token: facebookConnectModel.accessToken,
  74.                       page_id: facebookConnectModel.facebookPageId!);
  75.               if (account != null) {
  76.                 context
  77.                     .read<FacebookConnectCubit>()
  78.                     .setFacebookAccount(facebookAccount: account);
  79.               }
  80.               context.read<FacebookConnectCubit>().updateFacebookConnectModel(
  81.                   facebookConnectModel: facebookConnectModel);
  82.               await context.read<AuthCubit>().updateMetaInfo(
  83.                   key: "facebook", value: facebookConnectModel.toString());
  84.               context
  85.                   .read<FacebookConnectCubit>()
  86.                   .fetchFacebookPost(page_token: facebookConnectModel.pageToken)
  87.                   .then((value) {
  88.                 context
  89.                     .read<FacebookConnectCubit>()
  90.                     .updateFacebookConnectStatus(
  91.                         facebookConnectStaus: FacebookConnectStaus.connected);
  92.               });
  93.               processing = false;
  94.             }
  95.             if (queryParams['fbsuccess'] == "true" &&
  96.                 queryParams['instasuccess'] == "true") {
  97.               instaprocessing = true;
  98.               facebookConnectModel = facebookConnectModel.copyWith(
  99.                   instagramPageId: queryParams['instagram_account_id']);
  100.               context.read<FacebookConnectCubit>().updateFacebookConnectModel(
  101.                   facebookConnectModel: facebookConnectModel);
  102.               await context.read<AuthCubit>().updateMetaInfo(
  103.                   key: "facebook", value: facebookConnectModel.toString());
  104.               Navigator.pop(context);
  105.               context.read<FacebookConnectCubit>().updateInstagramConnectStatus(
  106.                   instagramConnectStatus: InstaConnectStaus.connected);
  107.               context.read<FacebookConnectCubit>().fetchInstagramPost(
  108.                   instaId: queryParams["instagram_account_id"].toString(),
  109.                   accessToken: queryParams['accessToken'] ?? "");
  110.               instaprocessing = false;
  111.             }
  112.             if (queryParams['fbsuccess'] == "true" &&
  113.                 queryParams['instasuccess'] == "false") {
  114.               Navigator.pop(context);
  115.             }
  116.           },
  117.         ),
  118.       )
  119.       ..loadRequest(
  120.           Uri.parse('${ApiContants.facebookConnectUrl}?jwt=${widget.jwt}'));
  121.  
  122.     super.initState();
  123.   }
  124.  
  125.   final Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers = {
  126.     Factory(() => EagerGestureRecognizer())
  127.   };
  128.  
  129.   @override
  130.   Widget build(BuildContext context) {
  131.     return Container(
  132.       decoration: BoxDecoration(
  133.         borderRadius: BorderRadius.only(
  134.             topLeft: Radius.circular(12), topRight: Radius.circular(12)),
  135.         color: ColorConstant.backgroundColor,
  136.       ),
  137.       width: MediaQuery.of(context).size.width,
  138.       child: Column(
  139.         children: [
  140.           Container(
  141.             height: 50,
  142.             width: MediaQuery.of(context).size.width,
  143.             decoration: BoxDecoration(
  144.               borderRadius: BorderRadius.only(
  145.                   topLeft: Radius.circular(12), topRight: Radius.circular(12)),
  146.               color: ColorConstant.appbarbackgroundColor,
  147.             ),
  148.             child: Row(
  149.               mainAxisAlignment: MainAxisAlignment.end,
  150.               children: [
  151.                 InkWell(
  152.                   onTap: () {
  153.                     if (instaprocessing != true && processing != true) {
  154.                       Navigator.pop(context);
  155.                     }
  156.                   },
  157.                   child: Padding(
  158.                     padding: const EdgeInsets.symmetric(horizontal: 20),
  159.                     child: Icon(Icons.close),
  160.                   ),
  161.                 )
  162.               ],
  163.             ),
  164.           ),
  165.           Expanded(
  166.             child: Container(
  167.               width: MediaQuery.of(context).size.width,
  168.               child: WebViewWidget(
  169.                   gestureRecognizers: gestureRecognizers,
  170.                   controller: webViewController),
  171.             ),
  172.           ),
  173.         ],
  174.       ),
  175.     );
  176.   }
  177. }
  178.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement