- 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