From 54153126bd390e2d8096002d6ba7c35fcbdd8de7 Mon Sep 17 00:00:00 2001 From: gianlucaparadise Date: Thu, 13 Jan 2022 06:36:11 +0100 Subject: [PATCH] MiniController initial stub implementation --- example/lib/main.dart | 7 +- .../mini_controller/MiniController.dart | 70 +++++++++++++++++++ .../mini_controller/TransparentImage.dart | 68 ++++++++++++++++++ lib/widgets.dart | 2 + 4 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 lib/src/cast/widgets/mini_controller/MiniController.dart create mode 100644 lib/src/cast/widgets/mini_controller/TransparentImage.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index 8136448..90491ef 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -171,7 +171,12 @@ class _MyAppState extends State { child: Text('Expanded Controls'), onPressed: _openExpandedControls, ), - ) + ), + _buildTitle("Mini Controller"), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: MiniController(), + ), ], ), ), diff --git a/lib/src/cast/widgets/mini_controller/MiniController.dart b/lib/src/cast/widgets/mini_controller/MiniController.dart new file mode 100644 index 0000000..7bf6119 --- /dev/null +++ b/lib/src/cast/widgets/mini_controller/MiniController.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_cast_framework/src/cast/widgets/mini_controller/TransparentImage.dart'; + +class MiniController extends StatelessWidget { + const MiniController({Key? key}) : super(key: key); + + void _onPausePressed() {} + + @override + Widget build(BuildContext context) { + final thumbnail = AspectRatio( + aspectRatio: 1, + child: FadeInImage.memoryNetwork( + fit: BoxFit.cover, + placeholder: kTransparentImage, + image: + "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg", + ), + ); + + final title = Text( + "this.title", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontWeight: FontWeight.w500), + ); + final subtitle = Text( + "this.subtitle", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: Colors.grey), + ); + + final playPauseButton = IconButton( + padding: EdgeInsets.zero, + onPressed: _onPausePressed, + icon: Icon(Icons.pause, color: Colors.black, size: 38), + ); + + return Stack( + children: [ + SizedBox( + height: 60, + child: Row( + children: [ + thumbnail, + Container(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + title, + subtitle, + ], + ), + ), + playPauseButton, + ], + ), + ), + LinearProgressIndicator( + color: Colors.red, + backgroundColor: Colors.transparent, + value: 0.1, + ), + ], + ); + } +} diff --git a/lib/src/cast/widgets/mini_controller/TransparentImage.dart b/lib/src/cast/widgets/mini_controller/TransparentImage.dart new file mode 100644 index 0000000..da0c83b --- /dev/null +++ b/lib/src/cast/widgets/mini_controller/TransparentImage.dart @@ -0,0 +1,68 @@ +import 'dart:typed_data'; + +final Uint8List kTransparentImage = new Uint8List.fromList([ + 0x89, + 0x50, + 0x4E, + 0x47, + 0x0D, + 0x0A, + 0x1A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x49, + 0x48, + 0x44, + 0x52, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x01, + 0x08, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1F, + 0x15, + 0xC4, + 0x89, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x49, + 0x44, + 0x41, + 0x54, + 0x78, + 0x9C, + 0x63, + 0x00, + 0x01, + 0x00, + 0x00, + 0x05, + 0x00, + 0x01, + 0x0D, + 0x0A, + 0x2D, + 0xB4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x49, + 0x45, + 0x4E, + 0x44, + 0xAE, +]); diff --git a/lib/widgets.dart b/lib/widgets.dart index 689eca5..2cedb8d 100644 --- a/lib/widgets.dart +++ b/lib/widgets.dart @@ -7,3 +7,5 @@ export 'src/cast/widgets/expanded_controls/ExpandedControlsPlayer.dart'; export 'src/cast/widgets/expanded_controls/ExpandedControlsProgress.dart'; export 'src/cast/widgets/expanded_controls/ExpandedControlsToolbar.dart'; export 'src/cast/widgets/expanded_controls/ExpandedControlsConnectedDeviceLabel.dart'; + +export 'src/cast/widgets/mini_controller/MiniController.dart';