Skip to content

how can change video quality doesn't reflect #2

Description

@this-sunil

import 'package:theoplayer/theoplayer.dart';
import 'package:flutter/material.dart';
class QualitySelector extends StatefulWidget {
final List tracks;

const QualitySelector({super.key, required this.tracks});

@OverRide
_QualitySelectorState createState() => _QualitySelectorState();
}

class _QualitySelectorState extends State {
VideoQuality? activeQuality;

@OverRide
void initState() {
super.initState();
// Initialize the active quality to the first quality in the first track
if (widget.tracks.isNotEmpty && widget.tracks.first.qualities.isNotEmpty) {
activeQuality = widget.tracks.first.activeQuality ?? widget.tracks.first.qualities.first;
print("Active Quality ${activeQuality?.bandwidth}");
}
}

void changeTargetQuality(VideoTrack videoTrack, VideoQuality targetQuality) {
// Use TheoPlayer's method to change the video quality
try {
videoTrack.targetQuality=targetQuality; // This is a TheoPlayer API call
print("Changed target quality to: ${targetQuality.width}x${targetQuality.height} (${targetQuality.bandwidth / 1000} kbps)");
} catch (e) {
print("Error changing quality: $e");
}
}

@OverRide
Widget build(BuildContext context) {
return ListView(
children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: ListTile(
title: Text(
"Select Video Quality",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
),
),
// List for the qualities of the first track
ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: widget.tracks.first.qualities.length, // Display qualities of the first track
itemBuilder: (context, trackIndex) {
final videoQuality = widget.tracks.first.qualities[trackIndex];

        return ListTile(
          title: Text(
            "${videoQuality.width}x${videoQuality.height}p (${videoQuality.bandwidth / 1000} kbps)",
          ),
          trailing: Icon(
            // Show checkmark icon if this quality is the active one
            videoQuality.bandwidth == activeQuality?.bandwidth ? Icons.check : null,
          ),
          onTap: () {
            // Update the active quality
            changeTargetQuality(widget.tracks.first, videoQuality);  // Change target quality
            Navigator.pop(context);  // Close the modal
          },
        );
      },
    ),
  ],
);

}
}

void showQualitySelector(BuildContext context, List tracks) {
showModalBottomSheet(
showDragHandle: true,
isDismissible: true,
context: context,
builder: (BuildContext context) {
return QualitySelector(tracks: tracks); // Use StatefulWidget here
},
);
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions