- screaming_possum.gif
This commit is contained in:
@ -1,14 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:f0ckapp/providers/theme_provider.dart';
|
||||
//import 'package:f0ckapp/services/api_service.dart';
|
||||
import 'package:f0ckapp/utils/appversion_util.dart';
|
||||
|
||||
class EndDrawer extends StatelessWidget {
|
||||
final WidgetRef ref;
|
||||
|
||||
const EndDrawer({super.key, required this.ref});
|
||||
const EndDrawer({super.key});
|
||||
|
||||
void _showMsg(String message, BuildContext context) {
|
||||
ScaffoldMessenger.of(context)
|
||||
@ -18,6 +17,9 @@ class EndDrawer extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
//final ApiService c = Get.find<ApiService>();
|
||||
final ThemeController themeController = Get.find();
|
||||
|
||||
return Drawer(
|
||||
child: ListView(
|
||||
padding: EdgeInsets.zero,
|
||||
@ -88,34 +90,32 @@ class EndDrawer extends StatelessWidget {
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: Column(
|
||||
children: themeMap.entries.map((entry) {
|
||||
final String themeName = entry.key;
|
||||
final ThemeData themeData = entry.value;
|
||||
final ThemeData currentTheme = ref.watch(
|
||||
themeNotifierProvider,
|
||||
);
|
||||
final bool isSelected = currentTheme == themeData;
|
||||
return ListTile(
|
||||
title: Text(themeName),
|
||||
selected: isSelected,
|
||||
selectedTileColor: Colors.blue.withValues(alpha: 0.2),
|
||||
onTap: () async {
|
||||
await ref
|
||||
.read(themeNotifierProvider.notifier)
|
||||
.updateTheme(themeName);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
child: Obx(() {
|
||||
return Column(
|
||||
children: themeController.themeMap.entries.map((entry) {
|
||||
final String themeName = entry.key;
|
||||
final ThemeData themeData = entry.value;
|
||||
final bool isSelected =
|
||||
themeController.currentTheme.value == themeData;
|
||||
return ListTile(
|
||||
title: Text(themeName),
|
||||
selected: isSelected,
|
||||
selectedTileColor: Colors.blue.withValues(alpha: 0.2),
|
||||
onTap: () async {
|
||||
await themeController.updateTheme(themeName);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
);
|
||||
}),
|
||||
),
|
||||
],
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Einstellungen'),
|
||||
title: const Text('Settings'),
|
||||
onTap: () {
|
||||
//context.go('/settings');
|
||||
Navigator.pushReplacementNamed(context, '/settings');
|
||||
Navigator.pop(context);
|
||||
Get.toNamed('/settings');
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
|
@ -1,29 +1,29 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:f0ckapp/providers/media_provider.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:f0ckapp/services/api_service.dart';
|
||||
|
||||
class FilterBar extends StatelessWidget {
|
||||
final MediaState mediaState;
|
||||
final MediaNotifier mediaNotifier;
|
||||
final ScrollController scrollController;
|
||||
|
||||
const FilterBar({
|
||||
super.key,
|
||||
required this.mediaState,
|
||||
required this.mediaNotifier,
|
||||
required this.scrollController,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final ApiService c = Get.find<ApiService>();
|
||||
|
||||
return BottomAppBar(
|
||||
height: 50,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
const Text('type: '),
|
||||
DropdownButton<String>(
|
||||
value: mediaTypes[mediaState.typeIndex],
|
||||
Obx(() => DropdownButton<String>(
|
||||
value: mediaTypes[c.type.value],
|
||||
isDense: true,
|
||||
items: mediaTypes.map((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
@ -33,14 +33,14 @@ class FilterBar extends StatelessWidget {
|
||||
}).toList(),
|
||||
onChanged: (String? newValue) {
|
||||
if (newValue != null) {
|
||||
mediaNotifier.setType(newValue);
|
||||
c.setType(mediaTypes.indexOf(newValue));
|
||||
scrollController.jumpTo(0);
|
||||
}
|
||||
},
|
||||
),
|
||||
)),
|
||||
const Text('mode: '),
|
||||
DropdownButton<String>(
|
||||
value: mediaModes[mediaState.modeIndex],
|
||||
Obx(() => DropdownButton<String>(
|
||||
value: mediaModes[c.mode.value],
|
||||
isDense: true,
|
||||
items: mediaModes.map((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
@ -50,11 +50,11 @@ class FilterBar extends StatelessWidget {
|
||||
}).toList(),
|
||||
onChanged: (String? newValue) {
|
||||
if (newValue != null) {
|
||||
mediaNotifier.setMode(mediaModes.indexOf(newValue));
|
||||
c.setMode(mediaModes.indexOf(newValue));
|
||||
scrollController.jumpTo(0);
|
||||
}
|
||||
},
|
||||
),
|
||||
)),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:f0ckapp/models/mediaitem_model.dart';
|
||||
|
||||
@ -13,7 +14,8 @@ class MediaTile extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Navigator.pushNamed(context, '/${item.id}');
|
||||
//Navigator.pushNamed(context, '/${item.id}');
|
||||
Get.toNamed('/${item.id}');
|
||||
},
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
|
@ -4,13 +4,11 @@ import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:cached_video_player_plus/cached_video_player_plus.dart';
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:f0ckapp/models/mediaitem_model.dart';
|
||||
import 'package:f0ckapp/widgets/videooverlay_widget.dart';
|
||||
import 'package:f0ckapp/providers/media_provider.dart';
|
||||
|
||||
class VideoWidget extends ConsumerStatefulWidget {
|
||||
class VideoWidget extends StatefulWidget {
|
||||
final MediaItem details;
|
||||
final bool isActive;
|
||||
final bool fullScreen;
|
||||
@ -23,10 +21,10 @@ class VideoWidget extends ConsumerStatefulWidget {
|
||||
});
|
||||
|
||||
@override
|
||||
ConsumerState<VideoWidget> createState() => _VideoWidgetState();
|
||||
State<VideoWidget> createState() => _VideoWidgetState();
|
||||
}
|
||||
|
||||
class _VideoWidgetState extends ConsumerState<VideoWidget> {
|
||||
class _VideoWidgetState extends State<VideoWidget> {
|
||||
late CachedVideoPlayerPlusController _controller;
|
||||
bool _showControls = false;
|
||||
Timer? _hideControlsTimer;
|
||||
@ -51,8 +49,8 @@ class _VideoWidgetState extends ConsumerState<VideoWidget> {
|
||||
}
|
||||
_controller.setLooping(true);
|
||||
|
||||
final bool muted = ref.read(mediaProvider).muted;
|
||||
_controller.setVolume(muted ? 0.0 : 1.0);
|
||||
//final bool muted = ref.read(mediaProvider).muted;
|
||||
//_controller.setVolume(muted ? 0.0 : 1.0);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -88,11 +86,11 @@ class _VideoWidgetState extends ConsumerState<VideoWidget> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final bool muted = ref.watch(mediaProvider).muted;
|
||||
if (_controller.value.isInitialized &&
|
||||
_controller.value.volume != (muted ? 0.0 : 1.0)) {
|
||||
_controller.setVolume(muted ? 0.0 : 1.0);
|
||||
}
|
||||
//final bool muted = ref.watch(mediaProvider).muted;
|
||||
//if (_controller.value.isInitialized &&
|
||||
// _controller.value.volume != (muted ? 0.0 : 1.0)) {
|
||||
// _controller.setVolume(muted ? 0.0 : 1.0);
|
||||
//}
|
||||
|
||||
bool isAudio = widget.details.mime.startsWith('audio');
|
||||
|
||||
|
@ -1,11 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:cached_video_player_plus/cached_video_player_plus.dart';
|
||||
|
||||
import 'package:f0ckapp/providers/media_provider.dart';
|
||||
|
||||
class VideoControlsOverlay extends ConsumerWidget {
|
||||
class VideoControlsOverlay extends StatelessWidget {
|
||||
final CachedVideoPlayerPlusController controller;
|
||||
final VoidCallback button;
|
||||
|
||||
@ -16,25 +13,11 @@ class VideoControlsOverlay extends ConsumerWidget {
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, ref) {
|
||||
final MediaState mediaState = ref.watch(mediaProvider);
|
||||
final MediaNotifier mediaNotifier = ref.read(mediaProvider.notifier);
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Positioned(
|
||||
right: 12,
|
||||
bottom: 12,
|
||||
child: _ControlButton(
|
||||
mediaState.muted ? Icons.volume_off : Icons.volume_up,
|
||||
() {
|
||||
button();
|
||||
mediaNotifier.toggleMute();
|
||||
},
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
Center(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
Reference in New Issue
Block a user