[multiple_web] Adapt web PlatformView widgets to work slotted. (#3964)
* [url_launcher_web] Make Link take 100% width/height of the PlatformView.
* [google_maps_flutter_web] Make Map take 100% width/height of the PlatformView.
* [video_player_web] Make Video take 100% width/height of the PlatformView.
* [video_player_web] Move tests to integration_test style so they run in CI.
* [url_launcher] Add link example
diff --git a/.cirrus.yml b/.cirrus.yml
index f09c3a9..129b6cb 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -161,7 +161,7 @@
env:
# Currently missing; see https://github.com/flutter/flutter/issues/81982
# and https://github.com/flutter/flutter/issues/82211
- PLUGINS_TO_EXCLUDE_INTEGRATION_TESTS: "file_selector,image_picker_for_web,shared_preferences_web,video_player_web"
+ PLUGINS_TO_EXCLUDE_INTEGRATION_TESTS: "file_selector,image_picker_for_web,shared_preferences_web"
matrix:
CHANNEL: "master"
CHANNEL: "stable"
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
index fd56b64..0544ba2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.0+1
+
+* Change sizing code of `GoogleMap` widget's `HtmlElementView` so it works well when slotted.
+
## 0.3.0
* Migrate package to null-safety.
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart
index 2528490..2262682 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart
@@ -96,7 +96,10 @@
// Register the view factory that will hold the `_div` that holds the map in the DOM.
// The `_div` needs to be created outside of the ViewFactory (and cached!) so we can
// use it to create the [gmaps.GMap] in the `init()` method of this class.
- _div = DivElement()..id = _getViewType(mapId);
+ _div = DivElement()
+ ..id = _getViewType(mapId)
+ ..style.width = '100%'
+ ..style.height = '100%';
ui.platformViewRegistry.registerViewFactory(
_getViewType(mapId),
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
index 47e6c53..3eb3afb 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
@@ -2,7 +2,7 @@
description: Web platform implementation of google_maps_flutter
repository: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_web
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 0.3.0
+version: 0.3.0+1
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md
index 2c2ebc3..3ff1a08 100644
--- a/packages/url_launcher/url_launcher/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher/CHANGELOG.md
@@ -1,6 +1,7 @@
-## NEXT
+## 6.0.5
* Add iOS unit and UI integration test targets.
+* Add a `Link` widget to the example app.
## 6.0.4
diff --git a/packages/url_launcher/url_launcher/example/lib/main.dart b/packages/url_launcher/url_launcher/example/lib/main.dart
index 7faf2a8..d593e6d 100644
--- a/packages/url_launcher/url_launcher/example/lib/main.dart
+++ b/packages/url_launcher/url_launcher/example/lib/main.dart
@@ -7,6 +7,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
+import 'package:url_launcher/link.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
@@ -196,6 +197,19 @@
child: const Text('Launch in app + close after 5 seconds'),
),
const Padding(padding: EdgeInsets.all(16.0)),
+ Link(
+ uri: Uri.parse(
+ 'https://pub.dev/documentation/url_launcher/latest/link/link-library.html'),
+ target: LinkTarget.blank,
+ builder: (ctx, openLink) {
+ return TextButton.icon(
+ onPressed: openLink,
+ label: Text('Link Widget documentation'),
+ icon: Icon(Icons.read_more),
+ );
+ },
+ ),
+ const Padding(padding: EdgeInsets.all(16.0)),
FutureBuilder<void>(future: _launched, builder: _launchStatus),
],
),
diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml
index b2b2def..ca5dd6b 100644
--- a/packages/url_launcher/url_launcher/pubspec.yaml
+++ b/packages/url_launcher/url_launcher/pubspec.yaml
@@ -3,7 +3,7 @@
web, phone, SMS, and email schemes.
repository: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 6.0.4
+version: 6.0.5
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md
index 7da0ba0..488c338 100644
--- a/packages/url_launcher/url_launcher_web/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 2.0.1
+
+- Change sizing code of `Link` widget's `HtmlElementView` so it works well when slotted.
+
# 2.0.0
- Migrate to null safety.
diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart
index fcbbaae..3c556b3 100644
--- a/packages/url_launcher/url_launcher_web/lib/src/link.dart
+++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart
@@ -170,6 +170,8 @@
_element.style
..opacity = '0'
..display = 'block'
+ ..width = '100%'
+ ..height = '100%'
..cursor = 'unset';
// This is recommended on MDN:
diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml
index 5e3ba9f..7afdc0a 100644
--- a/packages/url_launcher/url_launcher_web/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/pubspec.yaml
@@ -2,7 +2,7 @@
description: Web platform implementation of url_launcher
repository: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 2.0.0
+version: 2.0.1
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/video_player/video_player_web/CHANGELOG.md b/packages/video_player/video_player_web/CHANGELOG.md
index 63d4e10..63d950c 100644
--- a/packages/video_player/video_player_web/CHANGELOG.md
+++ b/packages/video_player/video_player_web/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 2.0.1
+
+* Change sizing code of `Video` widget's `HtmlElementView` so it works well when slotted.
+* Move tests to `example` directory, so they run as integration_tests with `flutter drive`.
+
## 2.0.0
* Migrate to null safety.
diff --git a/packages/video_player/video_player_web/example/README.md b/packages/video_player/video_player_web/example/README.md
new file mode 100644
index 0000000..0ec01e0
--- /dev/null
+++ b/packages/video_player/video_player_web/example/README.md
@@ -0,0 +1,21 @@
+# Testing
+
+This package utilizes the `integration_test` package to run its tests in a web browser.
+
+See [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) for more info.
+
+## Running the tests
+
+Make sure you have updated to the latest Flutter master.
+
+1. Check what version of Chrome is running on the machine you're running tests on.
+
+2. Download and install driver for that version from here:
+ * <https://chromedriver.chromium.org/downloads>
+
+3. Start the driver using `chromedriver --port=4444`
+
+4. Run tests: `flutter drive -d web-server --browser-name=chrome --driver=test_driver/integration_driver.dart --target=integration_test/TEST_NAME.dart`, or (in Linux):
+
+ * Single: `./run_test.sh integration_test/TEST_NAME.dart`
+ * All: `./run_test.sh`
diff --git a/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart
new file mode 100644
index 0000000..d3ad80c
--- /dev/null
+++ b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart
@@ -0,0 +1,157 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:flutter/services.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
+import 'package:video_player_platform_interface/video_player_platform_interface.dart';
+import 'package:video_player_web/video_player_web.dart';
+
+void main() {
+ IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+
+ group('VideoPlayer for Web', () {
+ late Future<int> textureId;
+
+ setUp(() {
+ VideoPlayerPlatform.instance = VideoPlayerPlugin();
+ textureId = VideoPlayerPlatform.instance
+ .create(
+ DataSource(
+ sourceType: DataSourceType.network,
+ uri:
+ 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4',
+ ),
+ )
+ .then((textureId) => textureId!);
+ });
+
+ testWidgets('can init', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.init(), completes);
+ });
+
+ testWidgets('can create from network', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.create(
+ DataSource(
+ sourceType: DataSourceType.network,
+ uri:
+ 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4'),
+ ),
+ completion(isNonZero));
+ });
+
+ testWidgets('can create from asset', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.create(
+ DataSource(
+ sourceType: DataSourceType.asset,
+ asset: 'videos/bee.mp4',
+ package: 'bee_vids',
+ ),
+ ),
+ completion(isNonZero));
+ });
+
+ testWidgets('cannot create from file', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.create(
+ DataSource(
+ sourceType: DataSourceType.file,
+ uri: '/videos/bee.mp4',
+ ),
+ ),
+ throwsUnimplementedError);
+ });
+
+ testWidgets('can dispose', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.dispose(await textureId), completes);
+ });
+
+ testWidgets('can set looping', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.setLooping(await textureId, true),
+ completes,
+ );
+ });
+
+ testWidgets('can play', (WidgetTester tester) async {
+ // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
+ await VideoPlayerPlatform.instance.setVolume(await textureId, 0);
+ expect(VideoPlayerPlatform.instance.play(await textureId), completes);
+ });
+
+ testWidgets('throws PlatformException when playing bad media',
+ (WidgetTester tester) async {
+ int videoPlayerId = (await VideoPlayerPlatform.instance.create(
+ DataSource(
+ sourceType: DataSourceType.network,
+ uri:
+ 'https://flutter.github.io/assets-for-api-docs/assets/videos/_non_existent_video.mp4'),
+ ))!;
+
+ Stream<VideoEvent> eventStream =
+ VideoPlayerPlatform.instance.videoEventsFor(videoPlayerId);
+
+ // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
+ await VideoPlayerPlatform.instance.setVolume(videoPlayerId, 0);
+ await VideoPlayerPlatform.instance.play(videoPlayerId);
+
+ expect(() async {
+ await eventStream.last;
+ }, throwsA(isA<PlatformException>()));
+ });
+
+ testWidgets('can pause', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.pause(await textureId), completes);
+ });
+
+ testWidgets('can set volume', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.setVolume(await textureId, 0.8),
+ completes,
+ );
+ });
+
+ testWidgets('can set playback speed', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.setPlaybackSpeed(await textureId, 2.0),
+ completes,
+ );
+ });
+
+ testWidgets('can seek to position', (WidgetTester tester) async {
+ expect(
+ VideoPlayerPlatform.instance.seekTo(
+ await textureId,
+ Duration(seconds: 1),
+ ),
+ completes,
+ );
+ });
+
+ testWidgets('can get position', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.getPosition(await textureId),
+ completion(isInstanceOf<Duration>()));
+ });
+
+ testWidgets('can get video event stream', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.videoEventsFor(await textureId),
+ isInstanceOf<Stream<VideoEvent>>());
+ });
+
+ testWidgets('can build view', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.buildView(await textureId),
+ isInstanceOf<Widget>());
+ });
+
+ testWidgets('ignores setting mixWithOthers', (WidgetTester tester) async {
+ expect(VideoPlayerPlatform.instance.setMixWithOthers(true), completes);
+ expect(VideoPlayerPlatform.instance.setMixWithOthers(false), completes);
+ });
+ });
+}
diff --git a/packages/video_player/video_player_web/example/lib/main.dart b/packages/video_player/video_player_web/example/lib/main.dart
new file mode 100644
index 0000000..e1a38dc
--- /dev/null
+++ b/packages/video_player/video_player_web/example/lib/main.dart
@@ -0,0 +1,25 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/material.dart';
+
+void main() {
+ runApp(MyApp());
+}
+
+/// App for testing
+class MyApp extends StatefulWidget {
+ @override
+ _MyAppState createState() => _MyAppState();
+}
+
+class _MyAppState extends State<MyApp> {
+ @override
+ Widget build(BuildContext context) {
+ return Directionality(
+ textDirection: TextDirection.ltr,
+ child: Text('Testing... Look at the console output for results!'),
+ );
+ }
+}
diff --git a/packages/video_player/video_player_web/example/pubspec.yaml b/packages/video_player/video_player_web/example/pubspec.yaml
new file mode 100644
index 0000000..c172eea
--- /dev/null
+++ b/packages/video_player/video_player_web/example/pubspec.yaml
@@ -0,0 +1,20 @@
+name: connectivity_for_web_integration_tests
+publish_to: none
+
+environment:
+ sdk: ">=2.12.0 <3.0.0"
+ flutter: ">=2.2.0"
+
+dependencies:
+ video_player_web:
+ path: ../
+ flutter:
+ sdk: flutter
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_driver:
+ sdk: flutter
+ integration_test:
+ sdk: flutter
diff --git a/packages/video_player/video_player_web/example/run_test.sh b/packages/video_player/video_player_web/example/run_test.sh
new file mode 100755
index 0000000..aa52974
--- /dev/null
+++ b/packages/video_player/video_player_web/example/run_test.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+# Copyright 2013 The Flutter Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+if pgrep -lf chromedriver > /dev/null; then
+ echo "chromedriver is running."
+
+ if [ $# -eq 0 ]; then
+ echo "No target specified, running all tests..."
+ find integration_test/ -iname *_test.dart | xargs -n1 -i -t flutter drive -d web-server --web-port=7357 --browser-name=chrome --driver=test_driver/integration_test.dart --target='{}'
+ else
+ echo "Running test target: $1..."
+ set -x
+ flutter drive -d web-server --web-port=7357 --browser-name=chrome --driver=test_driver/integration_test.dart --target=$1
+ fi
+
+ else
+ echo "chromedriver is not running."
+ echo "Please, check the README.md for instructions on how to use run_test.sh"
+fi
+
diff --git a/packages/video_player/video_player_web/example/test_driver/integration_test.dart b/packages/video_player/video_player_web/example/test_driver/integration_test.dart
new file mode 100644
index 0000000..4f10f2a
--- /dev/null
+++ b/packages/video_player/video_player_web/example/test_driver/integration_test.dart
@@ -0,0 +1,7 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:integration_test/integration_test_driver.dart';
+
+Future<void> main() => integrationDriver();
diff --git a/packages/video_player/video_player_web/example/web/index.html b/packages/video_player/video_player_web/example/web/index.html
new file mode 100644
index 0000000..7fb138c
--- /dev/null
+++ b/packages/video_player/video_player_web/example/web/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<!-- Copyright 2013 The Flutter Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file. -->
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>example</title>
+</head>
+<body>
+ <script src="main.dart.js" type="application/javascript"></script>
+</body>
+</html>
diff --git a/packages/video_player/video_player_web/lib/video_player_web.dart b/packages/video_player/video_player_web/lib/video_player_web.dart
index a61e010..560c4af 100644
--- a/packages/video_player/video_player_web/lib/video_player_web.dart
+++ b/packages/video_player/video_player_web/lib/video_player_web.dart
@@ -181,7 +181,9 @@
..src = uri
..autoplay = false
..controls = false
- ..style.border = 'none';
+ ..style.border = 'none'
+ ..style.height = '100%'
+ ..style.width = '100%';
// Allows Safari iOS to play the video inline
videoElement.setAttribute('playsinline', 'true');
diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml
index b303980..568a926 100644
--- a/packages/video_player/video_player_web/pubspec.yaml
+++ b/packages/video_player/video_player_web/pubspec.yaml
@@ -2,7 +2,7 @@
description: Web platform implementation of video_player.
repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_web
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.0.0
+version: 2.0.1
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/video_player/video_player_web/test/README.md b/packages/video_player/video_player_web/test/README.md
new file mode 100644
index 0000000..7c5b4ad
--- /dev/null
+++ b/packages/video_player/video_player_web/test/README.md
@@ -0,0 +1,5 @@
+## test
+
+This package uses integration tests for testing.
+
+See `example/README.md` for more info.
diff --git a/packages/video_player/video_player_web/test/tests_exist_elsewhere_test.dart b/packages/video_player/video_player_web/test/tests_exist_elsewhere_test.dart
new file mode 100644
index 0000000..442c501
--- /dev/null
+++ b/packages/video_player/video_player_web/test/tests_exist_elsewhere_test.dart
@@ -0,0 +1,14 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+ test('Tell the user where to find the real tests', () {
+ print('---');
+ print('This package uses integration_test for its tests.');
+ print('See `example/README.md` for more info.');
+ print('---');
+ });
+}
diff --git a/packages/video_player/video_player_web/test/video_player_web_test.dart b/packages/video_player/video_player_web/test/video_player_web_test.dart
deleted file mode 100644
index 1827266..0000000
--- a/packages/video_player/video_player_web/test/video_player_web_test.dart
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-@TestOn('browser')
-
-import 'dart:async';
-
-import 'package:flutter/services.dart';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:video_player_platform_interface/video_player_platform_interface.dart';
-import 'package:video_player_web/video_player_web.dart';
-
-void main() {
- group('VideoPlayer for Web', () {
- late int textureId;
-
- setUp(() async {
- VideoPlayerPlatform.instance = VideoPlayerPlugin();
- textureId = (await VideoPlayerPlatform.instance.create(
- DataSource(
- sourceType: DataSourceType.network,
- uri:
- 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4'),
- ))!;
- });
-
- test('$VideoPlayerPlugin is the live instance', () {
- expect(VideoPlayerPlatform.instance, isA<VideoPlayerPlugin>());
- });
-
- test('can init', () {
- expect(VideoPlayerPlatform.instance.init(), completes);
- });
-
- test('can create from network', () {
- expect(
- VideoPlayerPlatform.instance.create(
- DataSource(
- sourceType: DataSourceType.network,
- uri:
- 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4'),
- ),
- completion(isNonZero));
- });
-
- test('can create from asset', () {
- expect(
- VideoPlayerPlatform.instance.create(
- DataSource(
- sourceType: DataSourceType.asset,
- asset: 'videos/bee.mp4',
- package: 'bee_vids',
- ),
- ),
- completion(isNonZero));
- });
-
- test('cannot create from file', () {
- expect(
- VideoPlayerPlatform.instance.create(
- DataSource(
- sourceType: DataSourceType.file,
- uri: '/videos/bee.mp4',
- ),
- ),
- throwsUnimplementedError);
- });
-
- test('can dispose', () {
- expect(VideoPlayerPlatform.instance.dispose(textureId), completes);
- });
-
- test('can set looping', () {
- expect(
- VideoPlayerPlatform.instance.setLooping(textureId, true), completes);
- });
-
- test('can play', () async {
- // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
- await VideoPlayerPlatform.instance.setVolume(textureId, 0);
- expect(VideoPlayerPlatform.instance.play(textureId), completes);
- });
-
- test('throws PlatformException when playing bad media', () async {
- int videoPlayerId = (await VideoPlayerPlatform.instance.create(
- DataSource(
- sourceType: DataSourceType.network,
- uri:
- 'https://flutter.github.io/assets-for-api-docs/assets/videos/_non_existent_video.mp4'),
- ))!;
-
- Stream<VideoEvent> eventStream =
- VideoPlayerPlatform.instance.videoEventsFor(videoPlayerId);
-
- // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
- await VideoPlayerPlatform.instance.setVolume(videoPlayerId, 0);
- await VideoPlayerPlatform.instance.play(videoPlayerId);
-
- expect(() async {
- await eventStream.last;
- }, throwsA(isA<PlatformException>()));
- });
-
- test('can pause', () {
- expect(VideoPlayerPlatform.instance.pause(textureId), completes);
- });
-
- test('can set volume', () {
- expect(VideoPlayerPlatform.instance.setVolume(textureId, 0.8), completes);
- });
-
- test('can set playback speed', () {
- expect(
- VideoPlayerPlatform.instance.setPlaybackSpeed(textureId, 2.0),
- completes,
- );
- });
-
- test('can seek to position', () {
- expect(
- VideoPlayerPlatform.instance.seekTo(textureId, Duration(seconds: 1)),
- completes);
- });
-
- test('can get position', () {
- expect(VideoPlayerPlatform.instance.getPosition(textureId),
- completion(isInstanceOf<Duration>()));
- });
-
- test('can get video event stream', () {
- expect(VideoPlayerPlatform.instance.videoEventsFor(textureId),
- isInstanceOf<Stream<VideoEvent>>());
- });
-
- test('can build view', () {
- expect(VideoPlayerPlatform.instance.buildView(textureId),
- isInstanceOf<Widget>());
- });
-
- test('ignores setting mixWithOthers', () {
- expect(VideoPlayerPlatform.instance.setMixWithOthers(true), completes);
- expect(VideoPlayerPlatform.instance.setMixWithOthers(false), completes);
- });
- });
-}