A Flutter plugin provides a cast button widget and sync cast state with it.
Add this to your package's pubspec.yaml file:
dependencies:
flutter_google_cast_button: {last_version}
You can install packages from the command line:
with pub:
$ pub get
with Flutter:
$ flutter packages get
Alternatively, your editor might support pub get or flutter packages get. Check the docs for your editor to learn more.
Add following properties to gradle.properties
.
android.useAndroidX=true
android.enableJetifier=true
Add play-services-cast-framework
dependency into android/build.gradle
implementation "com.google.android.gms:play-services-cast-framework:16.2.0"
class DefaultCastOptionsProvider : OptionsProvider {
override fun getCastOptions(context: Context): CastOptions {
return CastOptions.Builder()
.setReceiverApplicationId(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID)
.build()
}
override fun getAdditionalSessionProviders(context: Context): List<SessionProvider>? {
return null
}
}
Add meta-data
to project's AndroidManifest.xml
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="github.showang.flutter_google_cast_button_example.DefaultCastOptionsProvider" />
Add following code into MainActivity
for update new state when resume.
override fun onResume() {
super.onResume()
FlutterGoogleCastButtonPlugin.instance?.onResume()
}
-
Get packages Run
pod install
before open Xcode. -
Initializing CastContext when
application didFinishLaunching
. EX:
let kReceiverAppID = kGCKDefaultMediaReceiverApplicationID
let kDebugLoggingEnabled = true
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
) -> Bool {
let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID)
let options = GCKCastOptions(discoveryCriteria: criteria)
GCKCastContext.setSharedInstanceWith(options)
// Enable logger.
GCKLogger.sharedInstance().delegate = self
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
Package paths relative with button widget.
import 'package:flutter_google_cast_button/bloc_media_route.dart';
import 'package:flutter_google_cast_button/cast_button_widget.dart';
Initialize/Dispose bloc when scope of widget's life cycle for saving/release state.
MediaRouteBloc _mediaRouteBloc;
@override
void initState() {
super.initState();
mediaRouteBloc = MediaRouteBloc();
}
@override
void dispose() {
mediaRouteBloc.dispose();
super.dispose();
}
Using bloc provider or any injection frameworks what you prefer.
Provide a bloc.
var widgetTree = new BlocProvider(
bloc: _mediaRouteBloc,
child: WidgetDependentWithBloc(),
);
If you are using BlocProvider.
var _castButtonWidget = new CastButtonWidget();
else, inject the bloc for widget.
var _castButtonWidget = new CastButtonWidget(bloc: _mediaRouteBloc);