Advertisement
chnzyn

flutter revive video ad

May 23rd, 2025 (edited)
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.83 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:webview_flutter/webview_flutter.dart';
  3.  
  4. void main() {
  5.   runApp(VideoAdApp());
  6. }
  7.  
  8. class VideoAdApp extends StatelessWidget {
  9.   @override
  10.   Widget build(BuildContext context) {
  11.     return MaterialApp(
  12.       title: 'Revive VAST Ad Demo',
  13.       theme: ThemeData(primarySwatch: Colors.blue),
  14.       home: VideoAdPage(),
  15.     );
  16.   }
  17. }
  18.  
  19. class VideoAdPage extends StatefulWidget {
  20.   @override
  21.   _VideoAdPageState createState() => _VideoAdPageState();
  22. }
  23.  
  24. class _VideoAdPageState extends State<VideoAdPage> {
  25.   late final WebViewController _controller;
  26.  
  27.   final String _htmlContent = '''
  28. <!DOCTYPE html>
  29. <html>
  30. <head>
  31.  <meta charset="UTF-8">
  32.  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  33.  <title>VAST Ad</title>
  34.  <link href="https://vjs.zencdn.net/8.10.0/video-js.css" rel="stylesheet" />
  35.  <script src="https://vjs.zencdn.net/8.10.0/video.min.js"></script>
  36.  <script src="https://imasdk.googleapis.com/js/sdkloader/ima3.js"></script>
  37.  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/videojs-contrib-ads.min.js"></script>
  38.  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/videojs.ima.min.js"></script>
  39.  
  40.  <style>
  41.    html, body {
  42.      margin: 0;
  43.      padding: 0;
  44.      background-color: black;
  45.      height: 100%;
  46.      width: 100%;
  47.    }
  48.  
  49.    #video-wrapper {
  50.      display: flex;
  51.      justify-content: center;
  52.      align-items: center;
  53.      height: 100vh;
  54.      width: 100vw;
  55.      overflow: hidden;
  56.    }
  57.  
  58.    video {
  59.      width: 100%;
  60.      max-width: 100%;
  61.      height: auto;
  62.    }
  63.  </style>
  64. </head>
  65. <body>
  66.  <div id="video-wrapper">
  67.    <video id="inline-video" class="video-js vjs-default-skin" controls playsinline preload="auto">
  68.      <source src="https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4" />
  69.    </video>
  70.  </div>
  71.  
  72.  <script>
  73.    var player = videojs('inline-video');
  74.  
  75.    player.ima({
  76.      id: 'inline-video',
  77.      adTagUrl: 'https://ads.orderi.co/www/delivery/fc.php?script=apVideo:vast2&zoneid=16&cb=' + Date.now(),
  78.       debug: true,
  79.       adsRenderingSettings: {
  80.         enablePreloading: true,
  81.         uiElements: ['skip']
  82.       }
  83.     });
  84.  
  85.     player.ready(function () {
  86.       player.ima.initializeAdDisplayContainer();
  87.       player.ima.requestAds();
  88.     });
  89.   </script>
  90. </body>
  91. </html>
  92. ''';
  93.  
  94.  @override
  95.  void initState() {
  96.    super.initState();
  97.    _controller = WebViewController()
  98.      ..setJavaScriptMode(JavaScriptMode.unrestricted)
  99.      ..loadHtmlString(_htmlContent);
  100.  }
  101.  
  102.  @override
  103.  Widget build(BuildContext context) {
  104.    return Scaffold(
  105.      appBar: AppBar(title: Text('VAST Video Ad')),
  106.      body: WebViewWidget(controller: _controller),
  107.    );
  108.  }
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement