PSDK-1017 - Версия плеера
This commit is contained in:
committed by
Jura Shikin
parent
5d9c5b8fcf
commit
7b3a76233a
@@ -1,6 +1,8 @@
|
||||
import 'dart:async';
|
||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:nut_player/nut_player.dart';
|
||||
import 'package:nut_player_example/src/common/models/option_data.dart';
|
||||
import 'package:nut_player_example/src/common/repository/settings_repository.dart';
|
||||
import 'package:nut_player_example/src/features/player_screen/mapper/settings_mapper.dart';
|
||||
@@ -10,8 +12,10 @@ part 'settings_state.dart';
|
||||
|
||||
class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
|
||||
final SettingsRepository _repository;
|
||||
StreamSubscription<String>? _versionSubscription;
|
||||
|
||||
SettingsBloc(this._repository) : super(SettingsInitialState.createFromRepository(_repository)) {
|
||||
_onInitialize();
|
||||
on<DismissEvent>(_onDismissEvent);
|
||||
on<CrashEvent>(_onCrashEvent);
|
||||
on<SkinChangedEvent>(_onSkinChangedEvent);
|
||||
@@ -32,9 +36,25 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
|
||||
on<TrackTimeoutsChangedEvent>(_onTrackTimeoutsChangedEvent);
|
||||
on<ChunkTimeoutsChangedEvent>(_onChunkTimeoutsChangedEvent);
|
||||
on<LogTypeChangedEvent>(_onLogTypeChangedEvent);
|
||||
on<VersionReceivedEvent>(_onVersionReceived);
|
||||
}
|
||||
|
||||
_onInitialize() {
|
||||
_versionSubscription = PlayerVersionObserver().versionStream.listen((version) {
|
||||
add(VersionReceivedEvent(version));
|
||||
});
|
||||
}
|
||||
|
||||
_onVersionReceived(VersionReceivedEvent event, Emitter<SettingsState> emit) {
|
||||
final settingsState = state;
|
||||
if (settingsState is! SettingsInitialState) { return; }
|
||||
|
||||
emit(settingsState.copy(playerVersion: event.version));
|
||||
}
|
||||
|
||||
_onDismissEvent(DismissEvent event, Emitter<SettingsState> emit) {
|
||||
_versionSubscription?.cancel();
|
||||
_versionSubscription = null;
|
||||
emit(SettingsDismiss());
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,11 @@ class DismissEvent extends SettingsEvent {}
|
||||
|
||||
class CrashEvent extends SettingsEvent {}
|
||||
|
||||
class VersionReceivedEvent extends SettingsEvent {
|
||||
final String version;
|
||||
VersionReceivedEvent(this.version);
|
||||
}
|
||||
|
||||
class SpeedChangedEvent extends SettingsEvent {
|
||||
final OptionData option;
|
||||
SpeedChangedEvent(this.option);
|
||||
|
||||
@@ -53,6 +53,8 @@ class SettingsDismiss extends SettingsState {}
|
||||
|
||||
@immutable
|
||||
class SettingsInitialState extends SettingsState {
|
||||
final String playerVersion;
|
||||
|
||||
final bool isSkinByDefault;
|
||||
|
||||
final FullscreenSettings fullscreenSettings;
|
||||
@@ -78,6 +80,7 @@ class SettingsInitialState extends SettingsState {
|
||||
final LogType log;
|
||||
|
||||
SettingsInitialState({
|
||||
required this.playerVersion,
|
||||
required this.isSkinByDefault,
|
||||
required this.fullscreenSettings,
|
||||
required this.isPipAvailable,
|
||||
@@ -99,6 +102,8 @@ class SettingsInitialState extends SettingsState {
|
||||
});
|
||||
|
||||
SettingsInitialState copy({
|
||||
String? playerVersion,
|
||||
|
||||
bool? isSkinByDefault,
|
||||
|
||||
FullscreenSettings? fullscreenSettings,
|
||||
@@ -124,6 +129,7 @@ class SettingsInitialState extends SettingsState {
|
||||
LogType? log
|
||||
}) {
|
||||
return SettingsInitialState(
|
||||
playerVersion: playerVersion ?? this.playerVersion,
|
||||
isSkinByDefault: isSkinByDefault ?? this.isSkinByDefault,
|
||||
fullscreenSettings: fullscreenSettings ?? this.fullscreenSettings,
|
||||
isPipAvailable: isPipAvailable ?? this.isPipAvailable,
|
||||
@@ -147,6 +153,7 @@ class SettingsInitialState extends SettingsState {
|
||||
|
||||
factory SettingsInitialState.createFromRepository(SettingsRepository repository) {
|
||||
return SettingsInitialState(
|
||||
playerVersion: "",
|
||||
isSkinByDefault: repository.isSkinByDefault,
|
||||
fullscreenSettings: SettingsMapper.fullscreenSetting(repository.fullscreenSettings),
|
||||
isPipAvailable: repository.isPipAvailable,
|
||||
|
||||
@@ -152,7 +152,7 @@ class SettingsView extends StatelessWidget {
|
||||
child: FutureBuilder(
|
||||
future: PackageInfo.fromPlatform(),
|
||||
builder: (context, snapshot) {
|
||||
return _buildVersion(snapshot);
|
||||
return _buildVersion(snapshot, bloc.state);
|
||||
})
|
||||
)
|
||||
]
|
||||
@@ -164,19 +164,20 @@ class SettingsView extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildVersion(AsyncSnapshot<PackageInfo> packageInfo) {
|
||||
Widget _buildVersion(AsyncSnapshot<PackageInfo> packageInfo, SettingsState state) {
|
||||
const textStyle = TextStyle(
|
||||
decoration: TextDecoration.none,
|
||||
color: CupertinoColors.systemGrey,
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w400);
|
||||
|
||||
if (packageInfo.hasData) {
|
||||
return Column(
|
||||
children: [
|
||||
Text('APP VERSION ${packageInfo.requireData.version} (${packageInfo.requireData.buildNumber})', style: textStyle),
|
||||
const Text('NUT.PLAYER VERSION', style: textStyle)
|
||||
],
|
||||
);
|
||||
var versions = [Text('ВЕРСИЯ ПРИЛОЖЕНИЯ ${packageInfo.requireData.version}', style: textStyle)];
|
||||
|
||||
final settingsState = state;
|
||||
if (settingsState is! SettingsInitialState) { return Column(children: versions); }
|
||||
versions.add(Text('ВЕРСИЯ NUT.PLAYER ${settingsState.playerVersion}', style: textStyle));
|
||||
return Column(children: versions);
|
||||
} else if (packageInfo.hasError) {
|
||||
return Text(packageInfo.error.toString(), style: textStyle);
|
||||
} else {
|
||||
|
||||
@@ -4,6 +4,7 @@ export 'src/legacy/video_progress_indicator.dart';
|
||||
// new one
|
||||
export 'src/widget/video_player.dart';
|
||||
export 'src/controller/video_player_controller.dart';
|
||||
export 'src/player_version_observer.dart';
|
||||
//
|
||||
export 'src/provider/provider.dart';
|
||||
export 'src/provider/common_provider.dart';
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class PlayerVersionObserver {
|
||||
final MethodChannel _pluginChannel = const MethodChannel('tech.nut/plugin');
|
||||
final _versionStreamController = StreamController<String>();
|
||||
|
||||
Stream<String> get versionStream => _versionStreamController.stream.asBroadcastStream();
|
||||
|
||||
PlayerVersionObserver() {
|
||||
_pluginChannel.setMethodCallHandler(_pluginVersionHandler);
|
||||
_pluginChannel.invokeMethod("getPlayerVersion");
|
||||
}
|
||||
|
||||
Future<dynamic> _pluginVersionHandler(MethodCall call) async {
|
||||
switch (call.method) {
|
||||
case 'pluginVersion':
|
||||
final version = call.arguments['version'];
|
||||
if (version != null) {
|
||||
_versionStreamController.add(version);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,6 +62,8 @@ public class NutPlayerIosPlugin: NSObject, FlutterPlugin, NutPlayerViewFactoryDe
|
||||
// print("Method: \(call.method), arguments: \(call.arguments)")
|
||||
|
||||
switch call.method {
|
||||
case "getPlayerVersion":
|
||||
self.playerCall(for: Int64(), method: "pluginVersion", arguments: ["version": NutPlayer.version ?? ""])
|
||||
case "pluginInitialize":
|
||||
self.pluginInitialize(arguments, result: result)
|
||||
case "pluginDispose":
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
|
||||
import '../nut_player_platform_interface.dart';
|
||||
import 'model/platform_player_content.dart';
|
||||
@@ -31,6 +30,7 @@ abstract class NutPlayerPlatform extends PlatformInterface {
|
||||
/// Platform Methods
|
||||
|
||||
Future<int> state(PlayerId playerId) async {
|
||||
|
||||
throw UnimplementedError('state() has not been implemented.');
|
||||
}
|
||||
|
||||
@@ -128,5 +128,4 @@ abstract class NutPlayerPlatform extends PlatformInterface {
|
||||
Stream<Object> skinActionStream() {
|
||||
throw UnimplementedError('skinActionStream() has not been implemented.');
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user