fix language filter

This commit is contained in:
kodjodevf 2023-04-05 20:15:13 +01:00
parent fff5bf9e61
commit 1e034c2e5c
2 changed files with 87 additions and 35 deletions

View file

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:grouped_list/grouped_list.dart';
@ -17,16 +19,33 @@ class ExtensionScreen extends ConsumerStatefulWidget {
class _ExtensionScreenState extends ConsumerState<ExtensionScreen> {
_init() {
for (var element in sourcesList) {
if (!ref
.watch(hiveBoxMangaSourceProvider)
.containsKey("${element.sourceName}${element.lang}")) {
ref
.watch(hiveBoxMangaSourceProvider)
.put("${element.sourceName}${element.lang}", element);
if (_isLoading) {
final ss = ref
.watch(hiveBoxMangaFilterProvider)
.get("language_filter", defaultValue: []);
if (ss.isEmpty) {
for (var element in sourcesList) {
if (!ref
.watch(hiveBoxMangaSourceProvider)
.containsKey("${element.sourceName}${element.lang}")) {
ref
.watch(hiveBoxMangaSourceProvider)
.put("${element.sourceName}${element.lang}", element);
}
}
} else {
for (var element in sourcesList) {
for (var lang in ss) {
if (element.lang == lang) {
ref
.watch(hiveBoxMangaSourceProvider)
.delete("${element.sourceName}${element.lang}");
}
}
}
}
_isLoading = false;
}
_isLoading = false;
}
bool _isLoading = true;

View file

@ -2,6 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:mangayomi/providers/hive_provider.dart';
import 'package:mangayomi/source/source_list.dart';
import 'package:mangayomi/source/source_model.dart';
import 'package:mangayomi/utils/lang.dart';
import 'package:mangayomi/views/browse/extension/widgets/extension_lang_list_tile_widget.dart';
@ -11,34 +13,65 @@ class ExtensionsLang extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return Scaffold(
appBar: AppBar(
title: const Text("Extensions"),
),
body: ValueListenableBuilder<Box<dynamic>>(
valueListenable: ref.watch(hiveBoxMangaFilterProvider).listenable(),
builder: (context, value, child) {
List<dynamic> entries =
value.get("language_filter", defaultValue: []);
return ListView.builder(
itemCount: language.length,
itemBuilder: (context, index) {
return ExtensionLangListTileWidget(
lang: lang(language[index]),
onChanged: (val) {
if (val == true) {
entries.add("${lang(language[index])}_");
value.put("language_filter", entries);
} else {
entries.remove("${lang(language[index])}_");
value.put("language_filter", entries);
appBar: AppBar(
title: const Text("Extensions"),
),
body: ValueListenableBuilder<Box<SourceModel>>(
valueListenable: ref.watch(hiveBoxMangaSourceProvider).listenable(),
builder: (context, value, child) {
final entri = value.values.toList();
return ListView.builder(
itemCount: language.length,
itemBuilder: (context, index) {
return ExtensionLangListTileWidget(
lang: lang(language[index]),
onChanged: (val) {
if (val == true) {
for (var element in sourcesList) {
if (element.lang == lang(language[index])) {
if (!ref
.watch(hiveBoxMangaSourceProvider)
.containsKey(
"${element.sourceName}${element.lang}")) {
ref.watch(hiveBoxMangaSourceProvider).put(
"${element.sourceName}${element.lang}",
element);
}
}
}
},
value: entries.contains("${lang(language[index])}_"),
);
},
);
}));
List<dynamic> entries = ref
.watch(hiveBoxMangaFilterProvider)
.get("language_filter", defaultValue: []);
entries.remove("${lang(language[index])}");
ref
.watch(hiveBoxMangaFilterProvider)
.put("language_filter", entries);
} else {
for (var element in entri) {
if (element.lang == lang(language[index])) {
ref
.watch(hiveBoxMangaSourceProvider)
.delete("${element.sourceName}${element.lang}");
}
}
List<dynamic> entries = ref
.watch(hiveBoxMangaFilterProvider)
.get("language_filter", defaultValue: []);
entries.add("${lang(language[index])}");
ref
.watch(hiveBoxMangaFilterProvider)
.put("language_filter", entries);
}
},
value: entri
.where((element) =>
element.lang == "${lang(language[index])}")
.isNotEmpty,
);
},
);
}),
);
;
}
}