Fix no duration crash on media player

This commit is contained in:
estevez-dev
2019-09-15 11:10:19 +03:00
parent db1a076132
commit 5dcb27ada7
4 changed files with 27 additions and 11 deletions

View File

@ -24,9 +24,18 @@ class _MediaPlayerProgressBarState extends State<MediaPlayerProgressBar> {
final MediaPlayerEntity entity = entityModel.entityWrapper.entity; final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
double progress; double progress;
DateTime lastUpdated = DateTime.tryParse("${entity.attributes["media_position_updated_at"]}")?.toLocal(); DateTime lastUpdated = DateTime.tryParse("${entity.attributes["media_position_updated_at"]}")?.toLocal();
if (lastUpdated != null) { Duration duration;
Duration duration = Duration(seconds: entity._getIntAttributeValue("media_duration") ?? 1); Duration position;
Duration position = Duration(seconds: entity._getIntAttributeValue("media_position") ?? 0); int durationInSeconds = entity._getIntAttributeValue("media_duration");
if (durationInSeconds != null) {
duration = Duration(seconds: durationInSeconds);
}
int positionInSeconds = entity._getIntAttributeValue("media_position");
if (positionInSeconds != null) {
position = Duration(
seconds: positionInSeconds);
}
if (lastUpdated != null && duration != null && position != null) {
int currentPosition = position.inSeconds; int currentPosition = position.inSeconds;
int differenceInSeconds = DateTime int differenceInSeconds = DateTime
.now() .now()

View File

@ -33,11 +33,18 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
final MediaPlayerEntity entity = entityModel.entityWrapper.entity; final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
DateTime lastUpdated = DateTime.tryParse("${ DateTime lastUpdated = DateTime.tryParse("${
entity.attributes["media_position_updated_at"]}")?.toLocal(); entity.attributes["media_position_updated_at"]}")?.toLocal();
if (lastUpdated != null) { Duration duration;
Duration duration = Duration( Duration position;
seconds: entity._getIntAttributeValue("media_duration") ?? 1); int durationInSeconds = entity._getIntAttributeValue("media_duration");
Duration position = Duration( if (durationInSeconds != null) {
seconds: entity._getIntAttributeValue("media_position") ?? 0); duration = Duration(seconds: durationInSeconds);
}
int positionInSeconds = entity._getIntAttributeValue("media_position");
if (positionInSeconds != null) {
position = Duration(
seconds: positionInSeconds);
}
if (lastUpdated != null && duration != null && position != null) {
if (entity.state == EntityState.playing && !_seekStarted && if (entity.state == EntityState.playing && !_seekStarted &&
!_changedHere) { !_changedHere) {
_currentPosition = position.inSeconds.toDouble(); _currentPosition = position.inSeconds.toDouble();
@ -45,7 +52,7 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
.now() .now()
.difference(lastUpdated) .difference(lastUpdated)
.inSeconds; .inSeconds;
_currentPosition = (_currentPosition <= duration.inSeconds) ? _currentPosition + differenceInSeconds : duration.inSeconds; _currentPosition = ((_currentPosition + differenceInSeconds) <= duration.inSeconds) ? (_currentPosition + differenceInSeconds) : duration.inSeconds.toDouble();
} else if (_changedHere) { } else if (_changedHere) {
_changedHere = false; _changedHere = false;
} }

View File

@ -133,7 +133,7 @@ EventBus eventBus = new EventBus();
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
const String appName = "HA Client"; const String appName = "HA Client";
const appVersion = "0.6.6"; const appVersion = "0.6.7-alpha1";
void main() async { void main() async {
FlutterError.onError = (errorDetails) { FlutterError.onError = (errorDetails) {

View File

@ -1,7 +1,7 @@
name: hass_client name: hass_client
description: Home Assistant Android Client description: Home Assistant Android Client
version: 0.6.6+662 version: 0.6.7+670
environment: environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0" sdk: ">=2.0.0-dev.68.0 <3.0.0"