InAppWebView
unknown
dart
a year ago
5.6 kB
3
Indexable
Never
import 'dart:developer'; import 'package:base_architecture/core/shared_widgets/ACScaffold.dart'; import 'package:base_architecture/core/shared_widgets/ac_appbar_widget.dart'; import 'package:base_architecture/core/shared_widgets/share_box_widget.dart'; import 'package:base_architecture/presentation/notifiers/podcast_notifier/podcast_notifier.dart'; import 'package:base_architecture/presentation/notifiers/theme_notifier.dart'; import 'package:base_architecture/presentation/pages/main/main_page.dart'; import 'package:dartz/dartz_unsafe.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_uxcam/flutter_uxcam.dart'; import 'package:provider/provider.dart'; class LivePodcastPage extends StatefulWidget { const LivePodcastPage({Key? key}) : super(key: key); @override State<LivePodcastPage> createState() => _LivePodcastPageState(); } class _LivePodcastPageState extends State<LivePodcastPage> { late PodcastNotifier _podcastNotifier; @override void initState() { mixpanel?.track('Live podcast Page viewed'); mixpanel?.track('View live podcast'); FlutterUxcam.logEvent('Live podcast Page viewed'); FlutterUxcam.logEvent('View live podcast'); _podcastNotifier = Provider.of<PodcastNotifier>(context, listen: false); _podcastNotifier.getLivePodcast(); super.initState(); } @override Widget build(BuildContext context) { Size mediaQuery = MediaQuery.of(context).size; ThemeNotifier themeNotifier = Provider.of<ThemeNotifier>( context, listen: true, ); PodcastNotifier podcastNotifier = Provider.of<PodcastNotifier>(context, listen: true); return ACScaffold( backgroundColor: themeNotifier.getTheme().primaryColor, appBar: _appBar(podcastNotifier), body: _mainBody(mediaQuery, themeNotifier, podcastNotifier), ); } Widget _mainBody( Size mediaQuery, ThemeNotifier themeNotifier, PodcastNotifier podcastNotifier, ) => Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), child: Column( children: <Widget>[ _liveContainer(mediaQuery, podcastNotifier), _liveHoster(themeNotifier, podcastNotifier), ], ), ); Widget _liveHoster( ThemeNotifier themeNotifier, PodcastNotifier podcastNotifier) => Column( children: <Widget>[ Container( padding: const EdgeInsets.only( top: 35, bottom: 8, ), child: Text( '${podcastNotifier.livePodcastData?.data?.name ?? ''}', style: themeNotifier.getTheme().textTheme.headline2!.copyWith( fontSize: 22, color: themeNotifier.getTheme().hoverColor, ), textAlign: TextAlign.center, ), ), RichText( textAlign: TextAlign.center, text: TextSpan( text: '', style: themeNotifier.getTheme().textTheme.headline2!.copyWith( fontSize: 18, color: themeNotifier.getTheme().hintColor, ), children: [ TextSpan( text: '${podcastNotifier.livePodcastData?.data?.description}', style: themeNotifier.getTheme().textTheme.headline2!.copyWith( fontSize: 18, color: themeNotifier.getTheme().hintColor, ), ), ], ), ), ], ); Widget _liveContainer( Size mediaQuery, PodcastNotifier podcastNotifier, ) { String? path = podcastNotifier.livePodcastData?.data?.podcastLink; RegExp exp = RegExp(r'[\u0621-\u064a-\u061b\u060c|@\$]'); String result = path!.replaceAll(exp, ''); return Container( height: mediaQuery.height * 0.28, child: Center( child: InAppWebView( initialUrlRequest: URLRequest( url: Uri.parse( Uri.dataFromString( '<html style="margin:0;padding:0"><meta name="viewport"content="width=device-width"> <iframe width="100%" height="100%" allowfullscreen${result}</html>', mimeType: 'text/html', ).toString(), ), ), initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions( mediaPlaybackRequiresUserGesture: false, ), ), ), ), ); } PreferredSizeWidget? _appBar( PodcastNotifier podcastNotifier, ) => ACAppBar( hasBack: true, title: 'Podcast details'.tr(), leadingWidth: 65, toolbarHeight: 80, actions: <Widget>[ Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: ShareBoxWidget( showText: false, title: podcastNotifier.livePodcastData?.data?.name ?? '', desc: podcastNotifier.livePodcastData?.data?.description ?? '', image: 'image', type: 'live_podcast', id: 0, ), ), ], onBack: () { Navigator.of(navigatorKey.currentContext!).pop(); mixpanel?.track('Pressed back '); FlutterUxcam.logEvent('Pressed back '); }, ); }