detailview lol
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:f0ckapp/services/api.dart';
|
||||
import 'package:f0ckapp/models/mediaitem.dart';
|
||||
import 'package:f0ckapp/screens/detail.dart';
|
||||
import 'package:f0ckapp/screens/detailview.dart';
|
||||
import 'dart:async';
|
||||
|
||||
class MediaGrid extends StatefulWidget {
|
||||
@ -18,6 +18,7 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
Timer? _debounceTimer;
|
||||
Completer<void>? _navigationCompleter;
|
||||
int _crossAxisCount = 3;
|
||||
String _selectedMode = "alles";
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@ -43,6 +44,7 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
try {
|
||||
final newMedia = await fetchMedia(
|
||||
older: mediaItems.isNotEmpty ? mediaItems.last.id.toString() : null,
|
||||
mode: _selectedMode,
|
||||
);
|
||||
if (mounted) {
|
||||
setState(() => mediaItems.addAll(newMedia));
|
||||
@ -61,7 +63,7 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
Future<void> _refreshMedia() async {
|
||||
setState(() => isLoading = true);
|
||||
try {
|
||||
final freshMedia = await fetchMedia(older: null);
|
||||
final freshMedia = await fetchMedia(older: null, mode: _selectedMode);
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
mediaItems.clear();
|
||||
@ -80,17 +82,20 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
}
|
||||
|
||||
Future<void> _navigateToDetail(MediaItem item) async {
|
||||
print('Tapped item: ${item.id}');
|
||||
|
||||
if (_navigationCompleter?.isCompleted == false) return;
|
||||
|
||||
_navigationCompleter = Completer();
|
||||
try {
|
||||
final details = await fetchMediaDetail(item.id);
|
||||
if (mounted) {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => DetailView(details: details)),
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DetailView(
|
||||
initialItemId: item.id,
|
||||
mediaItems: mediaItems,
|
||||
mode: _selectedMode,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
@ -114,6 +119,25 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text('f0cks'),
|
||||
DropdownButton<String>(
|
||||
value: _selectedMode,
|
||||
dropdownColor: const Color.fromARGB(255, 43, 43, 43),
|
||||
iconEnabledColor: const Color.fromARGB(255, 255, 255, 255),
|
||||
items: ["alles", "image", "video", "audio"].map((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
value: value,
|
||||
child: Text(value, style: TextStyle(color: Colors.white)),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (String? newValue) {
|
||||
if (newValue != null) {
|
||||
setState(() {
|
||||
_selectedMode = newValue;
|
||||
_refreshMedia();
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
DropdownButton<int>(
|
||||
value: _crossAxisCount,
|
||||
dropdownColor: const Color.fromARGB(255, 43, 43, 43),
|
||||
@ -121,7 +145,10 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
items: [3, 4].map((int value) {
|
||||
return DropdownMenuItem<int>(
|
||||
value: value,
|
||||
child: Text('$value Spalten', style: TextStyle(color: Colors.white)),
|
||||
child: Text(
|
||||
'$value Spalten',
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (int? newValue) {
|
||||
@ -152,7 +179,7 @@ class _MediaGridState extends State<MediaGrid> {
|
||||
final item = mediaItems[index];
|
||||
|
||||
final mode =
|
||||
{1: Colors.green, 2: Colors.red}[item.tagid] ?? Colors.yellow;
|
||||
{1: Colors.green, 2: Colors.red}[item.mode] ?? Colors.yellow;
|
||||
|
||||
return InkWell(
|
||||
onTap: () => _navigateToDetail(item),
|
||||
|
Reference in New Issue
Block a user