Change routing assets order
This commit is contained in:
@@ -242,6 +242,8 @@
|
|||||||
},
|
},
|
||||||
"geoAssets": {
|
"geoAssets": {
|
||||||
"pageTitle": "Routing Assets",
|
"pageTitle": "Routing Assets",
|
||||||
|
"geoip": "Geoip",
|
||||||
|
"geosite": "Geosite",
|
||||||
"version": "Version ${version}",
|
"version": "Version ${version}",
|
||||||
"fileMissing": "File Missing",
|
"fileMissing": "File Missing",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
|
|||||||
@@ -243,7 +243,9 @@
|
|||||||
"update": "Actualizar",
|
"update": "Actualizar",
|
||||||
"download": "Descargar",
|
"download": "Descargar",
|
||||||
"failureMsg": "No se pudo actualizar el activo",
|
"failureMsg": "No se pudo actualizar el activo",
|
||||||
"addRecommended": "Agregar activos recomendados"
|
"addRecommended": "Agregar activos recomendados",
|
||||||
|
"geoip": "Geoip",
|
||||||
|
"geosite": "Geosite"
|
||||||
},
|
},
|
||||||
"pageTitle": "Ajustes",
|
"pageTitle": "Ajustes",
|
||||||
"experimental": "Experimental"
|
"experimental": "Experimental"
|
||||||
|
|||||||
@@ -242,6 +242,8 @@
|
|||||||
},
|
},
|
||||||
"geoAssets": {
|
"geoAssets": {
|
||||||
"pageTitle": "فایلهای مسیریابی",
|
"pageTitle": "فایلهای مسیریابی",
|
||||||
|
"geoip": "Geoip",
|
||||||
|
"geosite": "Geosite",
|
||||||
"version": "نسخه ${version}",
|
"version": "نسخه ${version}",
|
||||||
"fileMissing": "فایل موجود نیست",
|
"fileMissing": "فایل موجود نیست",
|
||||||
"update": "به روز رسانی",
|
"update": "به روز رسانی",
|
||||||
|
|||||||
@@ -242,6 +242,8 @@
|
|||||||
},
|
},
|
||||||
"geoAssets": {
|
"geoAssets": {
|
||||||
"pageTitle": "Активы маршрутизации",
|
"pageTitle": "Активы маршрутизации",
|
||||||
|
"geoip": "Geoip",
|
||||||
|
"geosite": "Geosite",
|
||||||
"version": "Версия ${version}",
|
"version": "Версия ${version}",
|
||||||
"fileMissing": "Файл отсутствует",
|
"fileMissing": "Файл отсутствует",
|
||||||
"update": "Обновить",
|
"update": "Обновить",
|
||||||
|
|||||||
@@ -242,6 +242,8 @@
|
|||||||
},
|
},
|
||||||
"geoAssets": {
|
"geoAssets": {
|
||||||
"pageTitle": "Varlıkları Yönlendirme",
|
"pageTitle": "Varlıkları Yönlendirme",
|
||||||
|
"geoip": "Geoip",
|
||||||
|
"geosite": "Geosite",
|
||||||
"version": "Sürüm ${version}",
|
"version": "Sürüm ${version}",
|
||||||
"fileMissing": "Eksik dosya",
|
"fileMissing": "Eksik dosya",
|
||||||
"update": "Güncelleme",
|
"update": "Güncelleme",
|
||||||
|
|||||||
@@ -242,6 +242,8 @@
|
|||||||
},
|
},
|
||||||
"geoAssets": {
|
"geoAssets": {
|
||||||
"pageTitle": "路由资源文件",
|
"pageTitle": "路由资源文件",
|
||||||
|
"geoip": "Geoip",
|
||||||
|
"geosite": "Geosite",
|
||||||
"version": "版本 ${version}",
|
"version": "版本 ${version}",
|
||||||
"fileMissing": "文件丢失",
|
"fileMissing": "文件丢失",
|
||||||
"update": "更新",
|
"update": "更新",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:dartx/dartx.dart';
|
||||||
import 'package:hiddify/features/geo_asset/data/geo_asset_data_providers.dart';
|
import 'package:hiddify/features/geo_asset/data/geo_asset_data_providers.dart';
|
||||||
import 'package:hiddify/features/geo_asset/data/geo_asset_repository.dart';
|
import 'package:hiddify/features/geo_asset/data/geo_asset_repository.dart';
|
||||||
import 'package:hiddify/features/geo_asset/model/geo_asset_entity.dart';
|
import 'package:hiddify/features/geo_asset/model/geo_asset_entity.dart';
|
||||||
@@ -7,17 +8,28 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|||||||
|
|
||||||
part 'geo_assets_overview_notifier.g.dart';
|
part 'geo_assets_overview_notifier.g.dart';
|
||||||
|
|
||||||
|
typedef GroupedRoutingAssets = ({
|
||||||
|
List<GeoAssetWithFileSize> geoip,
|
||||||
|
List<GeoAssetWithFileSize> geosite,
|
||||||
|
});
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
class GeoAssetsOverviewNotifier extends _$GeoAssetsOverviewNotifier
|
class GeoAssetsOverviewNotifier extends _$GeoAssetsOverviewNotifier
|
||||||
with AppLogger {
|
with AppLogger {
|
||||||
@override
|
@override
|
||||||
Stream<List<GeoAssetWithFileSize>> build() {
|
Stream<GroupedRoutingAssets> build() {
|
||||||
ref.disposeDelay(const Duration(seconds: 5));
|
ref.disposeDelay(const Duration(seconds: 5));
|
||||||
return ref
|
return ref.watch(geoAssetRepositoryProvider).requireValue.watchAll().map(
|
||||||
.watch(geoAssetRepositoryProvider)
|
(event) {
|
||||||
.requireValue
|
final grouped = event
|
||||||
.watchAll()
|
.getOrElse((l) => throw l)
|
||||||
.map((event) => event.getOrElse((l) => throw l));
|
.groupBy((element) => element.$1.type);
|
||||||
|
return (
|
||||||
|
geoip: grouped.getOrElse(GeoAssetType.geoip, () => []),
|
||||||
|
geosite: grouped.getOrElse(GeoAssetType.geosite, () => []),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
GeoAssetRepository get _geoAssetRepo =>
|
GeoAssetRepository get _geoAssetRepo =>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
import 'package:hiddify/core/localization/translations.dart';
|
import 'package:hiddify/core/localization/translations.dart';
|
||||||
import 'package:hiddify/features/geo_asset/overview/geo_assets_overview_notifier.dart';
|
import 'package:hiddify/features/geo_asset/overview/geo_assets_overview_notifier.dart';
|
||||||
import 'package:hiddify/features/geo_asset/widget/geo_asset_tile.dart';
|
import 'package:hiddify/features/geo_asset/widget/geo_asset_tile.dart';
|
||||||
@@ -36,11 +37,11 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (state case AsyncData(value: final geoAssets))
|
if (state case AsyncData(value: (:final geoip, :final geosite)))
|
||||||
SliverPinnedHeader(
|
SliverPinnedHeader(
|
||||||
child: AnimatedSwitcher(
|
child: AnimatedSwitcher(
|
||||||
duration: const Duration(milliseconds: 200),
|
duration: const Duration(milliseconds: 200),
|
||||||
child: geoAssets
|
child: (geoip + geosite)
|
||||||
.where((e) => e.$1.active && e.$2 == null)
|
.where((e) => e.$1.active && e.$2 == null)
|
||||||
.isNotEmpty
|
.isNotEmpty
|
||||||
? const MissingRoutingAssetsCard()
|
? const MissingRoutingAssetsCard()
|
||||||
@@ -48,9 +49,16 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
switch (state) {
|
switch (state) {
|
||||||
AsyncData(value: final geoAssets) => SliverList.builder(
|
AsyncData(value: (:final geoip, :final geosite)) => MultiSliver(
|
||||||
|
children: [
|
||||||
|
ListTile(
|
||||||
|
title: Text("${t.settings.geoAssets.geoip} ›"),
|
||||||
|
titleTextStyle: Theme.of(context).textTheme.headlineSmall,
|
||||||
|
dense: true,
|
||||||
|
),
|
||||||
|
SliverList.builder(
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final geoAsset = geoAssets[index];
|
final geoAsset = geoip[index];
|
||||||
return GeoAssetTile(
|
return GeoAssetTile(
|
||||||
geoAsset,
|
geoAsset,
|
||||||
onMarkAsActive: () => ref
|
onMarkAsActive: () => ref
|
||||||
@@ -58,7 +66,28 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
|
|||||||
.markAsActive(geoAsset.$1),
|
.markAsActive(geoAsset.$1),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemCount: geoAssets.length,
|
itemCount: geoip.length,
|
||||||
|
),
|
||||||
|
const Divider(indent: 16, endIndent: 16),
|
||||||
|
ListTile(
|
||||||
|
title: Text("${t.settings.geoAssets.geosite} ›"),
|
||||||
|
titleTextStyle: Theme.of(context).textTheme.headlineSmall,
|
||||||
|
dense: true,
|
||||||
|
),
|
||||||
|
SliverList.builder(
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final geoAsset = geosite[index];
|
||||||
|
return GeoAssetTile(
|
||||||
|
geoAsset,
|
||||||
|
onMarkAsActive: () => ref
|
||||||
|
.read(geoAssetsOverviewNotifierProvider.notifier)
|
||||||
|
.markAsActive(geoAsset.$1),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
itemCount: geosite.length,
|
||||||
|
),
|
||||||
|
const Gap(16),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
_ => const SliverToBoxAdapter(),
|
_ => const SliverToBoxAdapter(),
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user