This commit is contained in:
		@@ -22,25 +22,26 @@ class MediaProvider extends ChangeNotifier {
 | 
			
		||||
  int get crossAxisCount => _crossAxisCount;
 | 
			
		||||
  List<MediaItem> get mediaItems => _mediaItems;
 | 
			
		||||
  bool get isLoading => _isLoading;
 | 
			
		||||
  Function get resetMedia => _resetMedia;
 | 
			
		||||
 | 
			
		||||
  void setType(String type) {
 | 
			
		||||
    _typeid = types.indexOf(type);
 | 
			
		||||
    loadMedia(reload: true);
 | 
			
		||||
    _resetMedia();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setMode(int mode) {
 | 
			
		||||
    _mode = mode;
 | 
			
		||||
    loadMedia(reload: true);
 | 
			
		||||
    _resetMedia();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void toggleRandom() {
 | 
			
		||||
    _random = !_random;
 | 
			
		||||
    loadMedia(reload: true);
 | 
			
		||||
    _resetMedia();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setTag(String? tag) {
 | 
			
		||||
    _tag = tag;
 | 
			
		||||
    loadMedia(reload: true);
 | 
			
		||||
    _resetMedia();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setCrossAxisCount(int crossAxisCount) {
 | 
			
		||||
@@ -50,7 +51,8 @@ class MediaProvider extends ChangeNotifier {
 | 
			
		||||
 | 
			
		||||
  void setMediaItems(List<MediaItem> mediaItems) {
 | 
			
		||||
    if (_mediaItems != mediaItems) {
 | 
			
		||||
      _mediaItems = mediaItems;
 | 
			
		||||
      _mediaItems.clear();
 | 
			
		||||
      _mediaItems.addAll(mediaItems);
 | 
			
		||||
      notifyListeners();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -60,25 +62,27 @@ class MediaProvider extends ChangeNotifier {
 | 
			
		||||
    notifyListeners();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> loadMedia({bool reload = false, bool notify = true}) async {
 | 
			
		||||
  void _resetMedia() {
 | 
			
		||||
    _mediaItems.clear();
 | 
			
		||||
    notifyListeners();
 | 
			
		||||
    loadMedia();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> loadMedia({bool notify = true}) async {
 | 
			
		||||
    if (_isLoading) return;
 | 
			
		||||
    _isLoading = true;
 | 
			
		||||
    if (notify) notifyListeners();
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      final newMedia = await fetchMedia(
 | 
			
		||||
        older: reload
 | 
			
		||||
            ? null
 | 
			
		||||
            : _mediaItems.isNotEmpty
 | 
			
		||||
            ? _mediaItems.last.id
 | 
			
		||||
            : null,
 | 
			
		||||
        older: _mediaItems.isNotEmpty ? _mediaItems.last.id : null,
 | 
			
		||||
        type: type,
 | 
			
		||||
        mode: mode,
 | 
			
		||||
        random: random,
 | 
			
		||||
        tag: tag,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      reload ? setMediaItems(newMedia) : addMediaItems(newMedia);
 | 
			
		||||
      addMediaItems(newMedia);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      debugPrint('Fehler beim Laden der Medien: $e');
 | 
			
		||||
    } finally {
 | 
			
		||||
 
 | 
			
		||||
@@ -36,9 +36,7 @@ class _DetailViewState extends State<DetailView> {
 | 
			
		||||
 | 
			
		||||
    _currentIndex = initialIndex;
 | 
			
		||||
    _pageController.addListener(() {
 | 
			
		||||
      setState(() {
 | 
			
		||||
        _currentIndex = _pageController.page?.round() ?? 0;
 | 
			
		||||
      });
 | 
			
		||||
      setState(() => _currentIndex = _pageController.page?.round() ?? 0);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    _preloadAdjacentMedia(initialIndex);
 | 
			
		||||
@@ -97,10 +95,7 @@ class _DetailViewState extends State<DetailView> {
 | 
			
		||||
    final provider = Provider.of<MediaProvider>(context);
 | 
			
		||||
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        centerTitle: true,
 | 
			
		||||
        title: Text('f0ck #${provider.mediaItems.elementAt(_currentIndex).id.toString()} (${provider.type})'),
 | 
			
		||||
      ),
 | 
			
		||||
      appBar: AppBar(centerTitle: true, title: const Text('f0ck')),
 | 
			
		||||
      body: Stack(
 | 
			
		||||
        children: [
 | 
			
		||||
          PageTransformer(
 | 
			
		||||
@@ -157,7 +152,7 @@ class _DetailViewState extends State<DetailView> {
 | 
			
		||||
            VideoWidget(details: item, isActive: isActive),
 | 
			
		||||
          const SizedBox(height: 20),
 | 
			
		||||
          Text(
 | 
			
		||||
            item.mime,
 | 
			
		||||
            'f0ck #${item.id.toString()}',
 | 
			
		||||
            style: const TextStyle(color: Colors.white, fontSize: 18),
 | 
			
		||||
          ),
 | 
			
		||||
          const SizedBox(height: 10, width: double.infinity),
 | 
			
		||||
@@ -170,7 +165,7 @@ class _DetailViewState extends State<DetailView> {
 | 
			
		||||
                  if (tag.tag == 'sfw' || tag.tag == 'nsfw') return;
 | 
			
		||||
                  setState(() {
 | 
			
		||||
                    provider.setTag(tag.tag);
 | 
			
		||||
                    Navigator.pop(context);
 | 
			
		||||
                    Navigator.pop(context, true);
 | 
			
		||||
                  });
 | 
			
		||||
                },
 | 
			
		||||
                label: Text(tag.tag),
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,10 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void scrollToTop() {
 | 
			
		||||
    _scrollController.jumpTo(0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    final provider = Provider.of<MediaProvider>(context);
 | 
			
		||||
@@ -48,7 +52,10 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
            icon: Icon(
 | 
			
		||||
              provider.random ? Icons.shuffle_on_outlined : Icons.shuffle,
 | 
			
		||||
            ),
 | 
			
		||||
            onPressed: () => provider.toggleRandom(),
 | 
			
		||||
            onPressed: () {
 | 
			
		||||
              provider.toggleRandom();
 | 
			
		||||
              _scrollController.jumpTo(0);
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
          IconButton(
 | 
			
		||||
            icon: const Icon(Icons.menu),
 | 
			
		||||
@@ -78,6 +85,7 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
              onChanged: (String? newValue) {
 | 
			
		||||
                if (newValue != null) {
 | 
			
		||||
                  provider.setType(newValue);
 | 
			
		||||
                  _scrollController.jumpTo(0);
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
@@ -96,6 +104,7 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
              onChanged: (String? newValue) {
 | 
			
		||||
                if (newValue != null) {
 | 
			
		||||
                  provider.setMode(provider.modes.indexOf(newValue));
 | 
			
		||||
                  _scrollController.jumpTo(0);
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
@@ -125,6 +134,7 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
                    labelStyle: const TextStyle(color: Colors.white),
 | 
			
		||||
                    onDeleted: () {
 | 
			
		||||
                      provider.setTag(null);
 | 
			
		||||
                      _scrollController.jumpTo(0);
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                ],
 | 
			
		||||
@@ -133,7 +143,8 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
          : null,
 | 
			
		||||
      body: RefreshIndicator(
 | 
			
		||||
        onRefresh: () async {
 | 
			
		||||
          await provider.loadMedia(reload: true);
 | 
			
		||||
          await provider.resetMedia();
 | 
			
		||||
          _scrollController.jumpTo(0);
 | 
			
		||||
        },
 | 
			
		||||
        child: Consumer<MediaProvider>(
 | 
			
		||||
          builder: (context, mediaProvider, child) {
 | 
			
		||||
@@ -158,12 +169,17 @@ class _MediaGridState extends State<MediaGrid> {
 | 
			
		||||
                final item = provider.mediaItems[index];
 | 
			
		||||
 | 
			
		||||
                return InkWell(
 | 
			
		||||
                  onTap: () => Navigator.push(
 | 
			
		||||
                  onTap: () async {
 | 
			
		||||
                    bool test = await Navigator.push(
 | 
			
		||||
                      context,
 | 
			
		||||
                      MaterialPageRoute(
 | 
			
		||||
                        builder: (context) => DetailView(initialItemId: item.id),
 | 
			
		||||
                      ),
 | 
			
		||||
                  ),
 | 
			
		||||
                    );
 | 
			
		||||
                    if (test) {
 | 
			
		||||
                      scrollToTop();
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  child: Stack(
 | 
			
		||||
                    fit: StackFit.expand,
 | 
			
		||||
                    children: <Widget>[
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 | 
			
		||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
 | 
			
		||||
# In Windows, build-name is used as the major, minor, and patch parts
 | 
			
		||||
# of the product and file versions while build-number is used as the build suffix.
 | 
			
		||||
version: 1.0.28+28
 | 
			
		||||
version: 1.0.29+29
 | 
			
		||||
 | 
			
		||||
environment:
 | 
			
		||||
  sdk: ^3.9.0-100.2.beta
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user