From 27476fbc1dd91f2816f70aefed0940e2145e91d8 Mon Sep 17 00:00:00 2001 From: Flummi Date: Sat, 7 Jun 2025 12:28:24 +0200 Subject: [PATCH] mute schmute --- lib/providers/MediaProvider.dart | 32 ++++++++++++++++++++++++++++++-- lib/screens/DetailView.dart | 17 +++++++++++++++-- lib/screens/MediaGrid.dart | 1 - lib/services/Api.dart | 8 +++++--- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/lib/providers/MediaProvider.dart b/lib/providers/MediaProvider.dart index c55c5af..939eaab 100644 --- a/lib/providers/MediaProvider.dart +++ b/lib/providers/MediaProvider.dart @@ -1,6 +1,8 @@ -import 'package:f0ckapp/services/Api.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; + import 'package:f0ckapp/models/MediaItem.dart'; +import 'package:f0ckapp/services/Api.dart'; class MediaProvider extends ChangeNotifier { int _typeid = 0; @@ -10,6 +12,10 @@ class MediaProvider extends ChangeNotifier { int _crossAxisCount = 0; List _mediaItems = []; bool _isLoading = false; + bool _muted = false; + final storage = FlutterSecureStorage( + aOptions: const AndroidOptions(encryptedSharedPreferences: true), + ); List types = ["alles", "image", "video", "audio"]; List modes = ["sfw", "nsfw", "untagged", "all"]; @@ -22,8 +28,14 @@ class MediaProvider extends ChangeNotifier { int get crossAxisCount => _crossAxisCount; List get mediaItems => _mediaItems; bool get isLoading => _isLoading; + bool get muted => _muted; + Function get resetMedia => _resetMedia; + MediaProvider() { + _loadMutedState(); + } + void setType(String type) { _typeid = types.indexOf(type); _resetMedia(); @@ -68,6 +80,22 @@ class MediaProvider extends ChangeNotifier { loadMedia(); } + void toggleMute() { + _muted = !_muted; + _saveMutedState(); + notifyListeners(); + } + + Future _loadMutedState() async { + _muted = (await storage.read(key: 'muted') == 'true'); + notifyListeners(); + } + + Future _saveMutedState() async { + await storage.write(key: 'muted', value: _muted ? 'false' : 'true'); + notifyListeners(); + } + Future loadMedia({bool notify = true}) async { if (_isLoading) return; _isLoading = true; @@ -82,7 +110,7 @@ class MediaProvider extends ChangeNotifier { tag: tag, ); - if(_mediaItems != newMedia) { + if (_mediaItems != newMedia) { addMediaItems(newMedia); if (notify) notifyListeners(); } diff --git a/lib/screens/DetailView.dart b/lib/screens/DetailView.dart index d00d492..dbf6836 100644 --- a/lib/screens/DetailView.dart +++ b/lib/screens/DetailView.dart @@ -105,6 +105,15 @@ class _DetailViewState extends State { 'f0ck #${provider.mediaItems.elementAt(_currentIndex).id.toString()}', ), actions: [ + IconButton( + icon: Icon( + provider.muted ? Icons.volume_up : Icons.volume_off, + color: Colors.white, + ), + onPressed: () { + provider.toggleMute(); + }, + ), PopupMenuButton( onSelected: (value) async { final item = provider.mediaItems.elementAt(_currentIndex); @@ -121,10 +130,14 @@ class _DetailViewState extends State { await SharePlus.instance.share(params); break; case 'direct_link': - await SharePlus.instance.share(ShareParams(text: item.mediaUrl)); + await SharePlus.instance.share( + ShareParams(text: item.mediaUrl), + ); break; case 'post_link': - await SharePlus.instance.share(ShareParams(text: item.postUrl)); + await SharePlus.instance.share( + ShareParams(text: item.postUrl), + ); break; } }, diff --git a/lib/screens/MediaGrid.dart b/lib/screens/MediaGrid.dart index e4cf3ac..f1a78d0 100644 --- a/lib/screens/MediaGrid.dart +++ b/lib/screens/MediaGrid.dart @@ -1,4 +1,3 @@ -import 'package:f0ckapp/services/Api.dart'; import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:provider/provider.dart'; diff --git a/lib/services/Api.dart b/lib/services/Api.dart index 2ca0157..602680c 100644 --- a/lib/services/Api.dart +++ b/lib/services/Api.dart @@ -48,8 +48,10 @@ Future fetchMediaDetail(int itemId) async { } Future login(String username, String password) async { + final Uri url = Uri.parse('https://api.f0ck.me/login'); + final response = await http.post( - Uri.parse('https://api.f0ck.me/login'), + url, body: {'username': username, 'password': password}, ); @@ -58,9 +60,9 @@ Future login(String username, String password) async { final token = data['token']; await storage.write(key: "token", value: token); - + return true; } else { return false; } -} \ No newline at end of file +}