mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-04-28 17:48:10 +00:00
Merge branch 'beta'
This commit is contained in:
commit
b539ad702e
24 changed files with 1861 additions and 620 deletions
|
@ -1,5 +1,5 @@
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.6.10'
|
ext.kotlin_version = '1.8.20'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
13
lib/config/home_top_items_default_order.dart
Normal file
13
lib/config/home_top_items_default_order.dart
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
|
|
||||||
|
final List<HomeTopItems> homeTopItemsDefaultOrder = [
|
||||||
|
HomeTopItems.queriedDomains,
|
||||||
|
HomeTopItems.blockedDomains,
|
||||||
|
HomeTopItems.recurrentClients
|
||||||
|
];
|
||||||
|
|
||||||
|
final String homeTopItemsDefaultOrderString = jsonEncode(
|
||||||
|
List<String>.from(homeTopItemsDefaultOrder.map((e) => e.name))
|
||||||
|
);
|
|
@ -1 +1,2 @@
|
||||||
enum LoadStatus { loading, loaded, error }
|
enum LoadStatus { loading, loaded, error }
|
||||||
|
enum HomeTopItems { queriedDomains, blockedDomains, recurrentClients }
|
|
@ -653,5 +653,12 @@
|
||||||
"queries": "Queries",
|
"queries": "Queries",
|
||||||
"adultSites": "Adult sites",
|
"adultSites": "Adult sites",
|
||||||
"quickFilters": "Quick filters",
|
"quickFilters": "Quick filters",
|
||||||
"searchDomainInternet": "Search domain on the Internet"
|
"searchDomainInternet": "Search domain on the Internet",
|
||||||
|
"hideServerAddress": "Hide server address",
|
||||||
|
"hideServerAddressDescription": "Hides the server address on the home screen",
|
||||||
|
"topItemsOrder": "Top items order",
|
||||||
|
"topItemsOrderDescription": "Order the home screen top items lists",
|
||||||
|
"topItemsReorderInfo": "Hold and swipe an item to reorder it.",
|
||||||
|
"discardChanges": "Discard changes",
|
||||||
|
"discardChangesDescription": "Are you sure you want to discard the changes?"
|
||||||
}
|
}
|
|
@ -653,5 +653,12 @@
|
||||||
"queries": "Peticiones",
|
"queries": "Peticiones",
|
||||||
"adultSites": "Sitios de adultos",
|
"adultSites": "Sitios de adultos",
|
||||||
"quickFilters": "Filtros rápidos",
|
"quickFilters": "Filtros rápidos",
|
||||||
"searchDomainInternet": "Buscar dominio en internet"
|
"searchDomainInternet": "Buscar dominio en internet",
|
||||||
|
"hideServerAddress": "Ocultar dirección del servidor",
|
||||||
|
"hideServerAddressDescription": "Oculta la dirección del servidor en la pantalla de inicio",
|
||||||
|
"topItemsOrder": "Orden de los top",
|
||||||
|
"topItemsOrderDescription": "Ordena las listas de top de elementos en la pantalla de inicio",
|
||||||
|
"topItemsReorderInfo": "Mantén presionado y desliza un elemento para reordenarlo.",
|
||||||
|
"discardChanges": "Descartar cambios",
|
||||||
|
"discardChangesDescription": "¿Estás seguro de que deseas descartar los cambios realizados?"
|
||||||
}
|
}
|
657
lib/l10n/app_pl.arb
Normal file
657
lib/l10n/app_pl.arb
Normal file
|
@ -0,0 +1,657 @@
|
||||||
|
{
|
||||||
|
"home": "Dom",
|
||||||
|
"settings": "Ustawienia",
|
||||||
|
"connect": "Połączyć",
|
||||||
|
"servers": "Serwery",
|
||||||
|
"createConnection": "Utwórz połączenie",
|
||||||
|
"name": "Nazwa",
|
||||||
|
"ipDomain": "Adres IP lub domena",
|
||||||
|
"path": "Ścieżka",
|
||||||
|
"port": "Port",
|
||||||
|
"username": "Nazwa użytkownika",
|
||||||
|
"password": "Hasło",
|
||||||
|
"defaultServer": "Serwer domyślny",
|
||||||
|
"general": "Ogólne",
|
||||||
|
"connection": "Połączenie",
|
||||||
|
"authentication": "Uwierzytelnianie",
|
||||||
|
"other": "Inne",
|
||||||
|
"invalidPort": "Nieprawidłowy port",
|
||||||
|
"invalidPath": "Nieprawidłowa ścieżka",
|
||||||
|
"invalidIpDomain": "Nieprawidłowy adres IP lub domena",
|
||||||
|
"ipDomainNotEmpty": "Adres IP lub domena nie mogą być puste",
|
||||||
|
"nameNotEmpty": "Nazwa nie może być pusta",
|
||||||
|
"invalidUsernamePassword": "Nieprawidłowa nazwa użytkownika lub hasło",
|
||||||
|
"tooManyAttempts": "Zbyt wiele prób, spróbuj ponownie później",
|
||||||
|
"cantReachServer": "Nie można połączyć się z serwerem. Sprawdź dane połączenia.",
|
||||||
|
"sslError": "Błąd SSL. Przejdź do pozycji Ustawienia > Ustawienia zaawansowane i włącz opcję Zastąp sprawdzanie poprawności SSL.",
|
||||||
|
"unknownError": "Nieznany błąd",
|
||||||
|
"connectionNotCreated": "Nie można utworzyć połączenia",
|
||||||
|
"connecting": "Łączenie...",
|
||||||
|
"connected": "Połączony",
|
||||||
|
"selectedDisconnected": "Zaznaczone, ale rozłączone",
|
||||||
|
"connectionDefaultSuccessfully": "Połączenie ustawione jako domyślne pomyślnie.",
|
||||||
|
"connectionDefaultFailed": "Nie można ustawić połączenia jako domyślne.",
|
||||||
|
"noSavedConnections": "Brak zapisanych połączeń",
|
||||||
|
"cannotConnect": "Nie można połączyć się z serwerem",
|
||||||
|
"connectionRemoved": "Połączenie zostało pomyślnie usunięte.",
|
||||||
|
"connectionCannotBeRemoved": "Nie można usunąć połączenia.",
|
||||||
|
"remove": "Usuń",
|
||||||
|
"removeWarning": "Czy na pewno chcesz usunąć połączenie z tym serwerem AdGuard Home?",
|
||||||
|
"cancel": "Anuluj",
|
||||||
|
"defaultConnection": "Połączenie domyślne",
|
||||||
|
"setDefault": "Ustaw jako domyślne",
|
||||||
|
"edit": "Edytuj",
|
||||||
|
"delete": "Usuń",
|
||||||
|
"save": "Zapisz",
|
||||||
|
"serverStatus": "Stan serwera",
|
||||||
|
"connectionNotUpdated": "Połączenie nie zostało zaktualizowane",
|
||||||
|
"ruleFilteringWidget": "Widget Reguł filtrowania",
|
||||||
|
"safeBrowsingWidget": "Widget Bezpieczne przeglądanie",
|
||||||
|
"parentalFilteringWidget": "Widget Filtrowania rodzicielskiego",
|
||||||
|
"safeSearchWidget": "Widget Bezpiecznego wyszukiwania",
|
||||||
|
"ruleFiltering": "Reguły filtrowania",
|
||||||
|
"safeBrowsing": "Bezpieczne przeglądanie",
|
||||||
|
"parentalFiltering": "Filtrowanie rodzicielskie",
|
||||||
|
"safeSearch": "Bezpieczne wyszukiwanie",
|
||||||
|
"serverStatusNotRefreshed": "Nie można odświeżyć stanu serwera",
|
||||||
|
"loadingStatus": "Stan ładowania...",
|
||||||
|
"errorLoadServerStatus": "Nie można załadować stanu serwera",
|
||||||
|
"topQueriedDomains": "Najczęściej wyszukiwane domeny",
|
||||||
|
"viewMore": "Zobacz więcej",
|
||||||
|
"topClients": "Najlepsi klienci",
|
||||||
|
"topBlockedDomains": "Najczęściej blokowane domeny",
|
||||||
|
"appSettings": "Ustawienia aplikacji",
|
||||||
|
"theme": "Motyw",
|
||||||
|
"light": "Jasny",
|
||||||
|
"dark": "Ciemny",
|
||||||
|
"systemDefined": "Zdefiniowany przez system",
|
||||||
|
"close": "Zamknij",
|
||||||
|
"connectedTo": "Połączony z:",
|
||||||
|
"selectedServer": "Wybrany serwer:",
|
||||||
|
"noServerSelected": "Nie wybrano serwera",
|
||||||
|
"manageServer": "Zarządzanie serwerem",
|
||||||
|
"allProtections": "Wszystkie zabezpieczenia",
|
||||||
|
"userNotEmpty": "Nazwa użytkownika nie może być pusta",
|
||||||
|
"passwordNotEmpty": "Hasło nie może być puste",
|
||||||
|
"examplePath": "Przykład: /adguard",
|
||||||
|
"helperPath": "Jeśli używasz zwrotnego serwera proxy",
|
||||||
|
"aboutApp": "O aplikacji",
|
||||||
|
"appVersion": "Wersja aplikacji",
|
||||||
|
"createdBy": "Stworzone przez",
|
||||||
|
"clients": "Klienci",
|
||||||
|
"allowed": "Dozwolone",
|
||||||
|
"blocked": "Zablokowane",
|
||||||
|
"noClientsList": "Na tej liście nie ma klientów",
|
||||||
|
"activeClients": "Aktywny",
|
||||||
|
"removeClient": "Usuń klienta",
|
||||||
|
"removeClientMessage": "Czy na pewno chcesz usunąć tego klienta z listy?",
|
||||||
|
"confirm": "Potwierdź",
|
||||||
|
"removingClient": "Usuwanie klienta...",
|
||||||
|
"clientNotRemoved": "Nie można usunąć klienta z listy",
|
||||||
|
"addClient": "Dodaj klienta",
|
||||||
|
"list": "Lista",
|
||||||
|
"ipAddress": "Adres IP",
|
||||||
|
"ipNotValid": "Adres IP jest nieprawidłowy",
|
||||||
|
"clientAddedSuccessfully": "Klient został pomyślnie dodany do listy.",
|
||||||
|
"addingClient": "Dodawanie klienta...",
|
||||||
|
"clientNotAdded": "Nie można dodać klienta do listy.",
|
||||||
|
"clientAnotherList": "Ten klient jest już na innej liście.",
|
||||||
|
"noSavedLogs": "Brak zapisanych danych w dzienniku logów",
|
||||||
|
"logs": "Logi",
|
||||||
|
"copyLogsClipboard": "Kopiowanie dzienników logów do schowka",
|
||||||
|
"logsCopiedClipboard": "Dzienniki logów skopiowane do schowka",
|
||||||
|
"advancedSettings": "Ustawienia zaawansowane",
|
||||||
|
"dontCheckCertificate": "Nie sprawdzaj certyfikatu SSL",
|
||||||
|
"dontCheckCertificateDescription": "Zastępuje sprawdzanie poprawności certyfikatu SSL serwera",
|
||||||
|
"advancedSetupDescription": "Opcje zaawansowane",
|
||||||
|
"settingsUpdatedSuccessfully": "Ustawienia zostały pomyślnie zaktualizowane.",
|
||||||
|
"cannotUpdateSettings": "Nie można zaktualizować ustawień.",
|
||||||
|
"restartAppTakeEffect": "Uruchom ponownie aplikację",
|
||||||
|
"loadingLogs": "Ładowanie logów dzienników...",
|
||||||
|
"logsNotLoaded": "Nie można załadować listy dzienników",
|
||||||
|
"processed": "Przetworzone\nBrak listy",
|
||||||
|
"processedRow": "Przetworzone (brak listy)",
|
||||||
|
"blockedBlacklist": "Zablokowane\nCzarna lista",
|
||||||
|
"blockedBlacklistRow": "Zablokowane (czarna lista)",
|
||||||
|
"blockedSafeBrowsing": "Zablokowane\nBezpieczne przeglądanie",
|
||||||
|
"blockedSafeBrowsingRow": "Zablokowane (bezpieczne przeglądanie)",
|
||||||
|
"blockedParental": "Zablokowane\nFiltrowanie rodzicielskie",
|
||||||
|
"blockedParentalRow": "Zablokowane (filtrowanie rodzicielskie)",
|
||||||
|
"blockedInvalid": "Zablokowany\nNieprawidłowy",
|
||||||
|
"blockedInvalidRow": "Zablokowane (nieprawidłowe)",
|
||||||
|
"blockedSafeSearch": "Zablokowane\nBezpieczne wyszukiwanie",
|
||||||
|
"blockedSafeSearchRow": "Zablokowane (bezpieczne wyszukiwanie)",
|
||||||
|
"blockedService": "Zablokowana\nZablokowana usługa",
|
||||||
|
"blockedServiceRow": "Zablokowana (zablokowana usługa)",
|
||||||
|
"processedWhitelist": "Przetworzone\nBiała lista",
|
||||||
|
"processedWhitelistRow": "Przetworzone (biała lista)",
|
||||||
|
"processedError": "Przetworzone\nBłąd",
|
||||||
|
"processedErrorRow": "Przetworzone (błąd)",
|
||||||
|
"rewrite": "Nadpisać",
|
||||||
|
"status": "Status",
|
||||||
|
"result": "Wynik",
|
||||||
|
"time": "Czas",
|
||||||
|
"blocklist": "Lista zablokowanych",
|
||||||
|
"request": "Żądanie",
|
||||||
|
"domain": "Domena",
|
||||||
|
"type": "Type",
|
||||||
|
"clas": "Klasa",
|
||||||
|
"response": "Odpowiedź",
|
||||||
|
"dnsServer": "DNS server",
|
||||||
|
"elapsedTime": "Czas, który upłynął",
|
||||||
|
"responseCode": "Kod odpowiedzi",
|
||||||
|
"client": "Klient",
|
||||||
|
"deviceIp": "Adres IP urządzenia",
|
||||||
|
"deviceName": "Nazwa urządzenia",
|
||||||
|
"logDetails": "Szczegóły dziennika logów",
|
||||||
|
"blockingRule": "Reguła blokowania",
|
||||||
|
"blockDomain": "Blokowanie domeny",
|
||||||
|
"couldntGetFilteringStatus": "Nie można uzyskać stanu filtrowanias",
|
||||||
|
"unblockDomain": "Odblokuj domenę",
|
||||||
|
"userFilteringRulesNotUpdated": "Nie można zaktualizować reguł filtrowania użytkowników.",
|
||||||
|
"userFilteringRulesUpdated": "Reguły filtrowania użytkowników zostały pomyślnie zaktualizowane",
|
||||||
|
"savingUserFilters": "Zapisywanie filtrów użytkownika...",
|
||||||
|
"filters": "Filtry",
|
||||||
|
"logsOlderThan": "Dzienniki logów starsze niż",
|
||||||
|
"responseStatus": "Stan odpowiedzi",
|
||||||
|
"selectTime": "Wybierz czas",
|
||||||
|
"notSelected": "Nie wybrano",
|
||||||
|
"resetFilters": "Resetowanie filtrów",
|
||||||
|
"noLogsDisplay": "Brak dzienników logów do wyświetlenia",
|
||||||
|
"noLogsThatOld": "Możliwe, że dla wybranego czasu nie zapisano żadnych dzienników logów. Spróbuj wybrać nowszą godzinę.",
|
||||||
|
"apply": "Zastosować",
|
||||||
|
"selectAll": "Zaznacz wszystko",
|
||||||
|
"unselectAll": "Odznacz wszystko",
|
||||||
|
"all": "Wszystko",
|
||||||
|
"filtered": "Przefiltrowano",
|
||||||
|
"checkAppLogs": "Sprawdź dzienniki logów aplikacji",
|
||||||
|
"refresh": "Odśwież",
|
||||||
|
"search": "Szukaj",
|
||||||
|
"dnsQueries": "Zapytania DNS",
|
||||||
|
"average": "Średnia",
|
||||||
|
"blockedFilters": "Zablokowane przez filtry",
|
||||||
|
"malwarePhisingBlocked": "Zablokowane złośliwe oprogramowanie/phishing",
|
||||||
|
"blockedAdultWebsites": "Zablokowane witryny dla dorosłych",
|
||||||
|
"generalSettings": "Ustawienia główne",
|
||||||
|
"generalSettingsDescription": "Różne ustawienia",
|
||||||
|
"hideZeroValues": "Ukryj wartości zerowe",
|
||||||
|
"hideZeroValuesDescription": "Na ekranie głównym ukryj bloki o zerowej wartości",
|
||||||
|
"webAdminPanel": "Panel administracyjny WWW",
|
||||||
|
"visitGooglePlay": "Odwiedź stronę Google Play",
|
||||||
|
"gitHub": "Kod aplikacji dostępny na GitHub",
|
||||||
|
"blockClient": "Zablokuj klienta",
|
||||||
|
"selectTags": "Wybierz tagi",
|
||||||
|
"noTagsSelected": "Brak zaznaczonych tagów",
|
||||||
|
"tags": "Tagi",
|
||||||
|
"identifiers": "Identyfikatory",
|
||||||
|
"identifier": "Identyfikator",
|
||||||
|
"identifierHelper": "Adres IP , CIDR, Adres MAC, or ClientID",
|
||||||
|
"noIdentifiers": "Nie dodano identyfikatorów",
|
||||||
|
"useGlobalSettings": "Użyj ustawień globalnych",
|
||||||
|
"enableFiltering": "Włącz filtrowanie",
|
||||||
|
"enableSafeBrowsing": "Włącz bezpieczne przeglądanie",
|
||||||
|
"enableParentalControl": "Włącz kontrolę rodzicielską",
|
||||||
|
"enableSafeSearch": "Włącz bezpieczne wyszukiwanie",
|
||||||
|
"blockedServices": "Zablokowane usługi",
|
||||||
|
"selectBlockedServices": "Wybierz usługi do zablokowaniak",
|
||||||
|
"noBlockedServicesSelected": "Brak zablokowanych usług",
|
||||||
|
"services": "Usługi",
|
||||||
|
"servicesBlocked": "Usługi zablokowane",
|
||||||
|
"tagsSelected": "wybrane tagi",
|
||||||
|
"upstreamServers": "Serwery nadrzędne",
|
||||||
|
"serverAddress": " Adres servera",
|
||||||
|
"noUpstreamServers": "Brak serwerów nadrzędnych.",
|
||||||
|
"willBeUsedGeneralServers": "Wykorzystane zostaną ogólne serwery nadrzędne.",
|
||||||
|
"added": "Dodane",
|
||||||
|
"clientUpdatedSuccessfully": "Klient został pomyślnie zaktualizowany",
|
||||||
|
"clientNotUpdated": "Nie można zaktualizować klienta",
|
||||||
|
"clientDeletedSuccessfully": "Klient został pomyślnie usunięty",
|
||||||
|
"clientNotDeleted": "Nie można usunąć klienta",
|
||||||
|
"options": "Opcje",
|
||||||
|
"loadingFilters": "Ładowanie filtrów...",
|
||||||
|
"filtersNotLoaded": "Nie można załadować filtrów.",
|
||||||
|
"whitelists": "Biała lista",
|
||||||
|
"blacklists": "Czarna lista",
|
||||||
|
"rules": "Zasady",
|
||||||
|
"customRules": "Reguły niestandardowe",
|
||||||
|
"enabledRules": "Włączone reguły",
|
||||||
|
"enabled": "Włączone",
|
||||||
|
"disabled": "Wyłączone",
|
||||||
|
"rule": "Reguła",
|
||||||
|
"addCustomRule": "Dodaj niestandardową regułę",
|
||||||
|
"removeCustomRule": "Usuń regułę niestandardową",
|
||||||
|
"removeCustomRuleMessage": "Czy na pewno chcesz usunąć tę regułę niestandardową?",
|
||||||
|
"updatingRules": "Aktualizowanie reguł niestandardowych...",
|
||||||
|
"ruleRemovedSuccessfully": "Reguła została pomyślnie usunięta",
|
||||||
|
"ruleNotRemoved": "Nie można usunąć reguły",
|
||||||
|
"ruleAddedSuccessfully": "Reguła dodana pomyślnie",
|
||||||
|
"ruleNotAdded": "Nie można dodać reguły",
|
||||||
|
"noCustomFilters": "Brak filtrów niestandardowych",
|
||||||
|
"noBlockedClients": "Brak zablokowanych klientów",
|
||||||
|
"noBlackLists": "Brak czarnych list",
|
||||||
|
"noWhiteLists": "Brak białych list",
|
||||||
|
"addWhitelist": "Dodaj białą listę",
|
||||||
|
"addBlacklist": "Dodaj czarną listę",
|
||||||
|
"urlNotValid": "Adres URL jest nieprawidłowy",
|
||||||
|
"urlAbsolutePath": "Adres URL lub ścieżka bezwzględna",
|
||||||
|
"addingList": "Dodawanie listy...",
|
||||||
|
"listAdded": "Lista została dodana pomyślnie. Dodane elementy:",
|
||||||
|
"listAlreadyAdded": "Lista została już dodana",
|
||||||
|
"listUrlInvalid": "Adres URL listy jest nieprawidłowy",
|
||||||
|
"listNotAdded": "Nie można dodać listy",
|
||||||
|
"listDetails": "Szczegóły listy",
|
||||||
|
"listType": "Typ listy",
|
||||||
|
"whitelist": "Biała lista",
|
||||||
|
"blacklist": "Czarna list",
|
||||||
|
"latestUpdate": "Najnowsza aktualizacja",
|
||||||
|
"disable": "Wyłączyć",
|
||||||
|
"enable": "Włączać",
|
||||||
|
"currentStatus": "Aktualny stan",
|
||||||
|
"listDataUpdated": "Dane listy zostały pomyślnie zaktualizowane",
|
||||||
|
"listDataNotUpdated": "Nie można zaktualizować danych listy",
|
||||||
|
"updatingListData": "Aktualizowanie danych listy...",
|
||||||
|
"editWhitelist": "Edytuj białą listę",
|
||||||
|
"editBlacklist": "Edytuj czarną listę",
|
||||||
|
"deletingList": "Usuwanie listy...",
|
||||||
|
"listDeleted": "Lista usunięta pomyślnie",
|
||||||
|
"listNotDeleted": "Nie można usunąć listy",
|
||||||
|
"deleteList": "Usuń listę",
|
||||||
|
"deleteListMessage": "Czy na pewno chcesz usunąć tę listę? Tej akcji nie można cofnąć.",
|
||||||
|
"serverSettings": "Ustawienia serwera",
|
||||||
|
"serverInformation": "Informacje o serwerze",
|
||||||
|
"serverInformationDescription": "Informacje i status serwera",
|
||||||
|
"loadingServerInfo": "Ładowanie informacji o serwerze...",
|
||||||
|
"serverInfoNotLoaded": "Nie można załadować informacji o serwerze.",
|
||||||
|
"dnsAddresses": "Adresy DNS",
|
||||||
|
"seeDnsAddresses": "Zobacz adresy DNS",
|
||||||
|
"dnsPort": "Port DNS",
|
||||||
|
"httpPort": "Port HTTP",
|
||||||
|
"protectionEnabled": "Ochrona włączona",
|
||||||
|
"dhcpAvailable": "Dostępne DHCP",
|
||||||
|
"serverRunning": "Serwer działa",
|
||||||
|
"serverVersion": "Wersia Serwera",
|
||||||
|
"serverLanguage": "Język serwera",
|
||||||
|
"yes": "Tak",
|
||||||
|
"no": "Nie",
|
||||||
|
"allowedClients": "Dozwoleni klienci",
|
||||||
|
"disallowedClients": "Niedozwoloni klienci",
|
||||||
|
"disallowedDomains": "Niedozwolone domeny",
|
||||||
|
"accessSettings": "Ustawienia dostępu",
|
||||||
|
"accessSettingsDescription": "Konfigurowanie reguł dostępu dla serwera",
|
||||||
|
"loadingClients": "Ładowanie klientów...",
|
||||||
|
"clientsNotLoaded": "Nie można załadować klientów.",
|
||||||
|
"noAllowedClients": "Brak dozwolonych klientów.",
|
||||||
|
"allowedClientsDescription": "Jeśli ta lista zawiera wpisy, AdGuard Home będzie akceptować żądania tylko od tych klientów.",
|
||||||
|
"blockedClientsDescription": "Jeśli ta lista zawiera wpisy, AdGuard Home odrzuci żądania od tych klientów. To pole jest ignorowane, jeśli w obszarze Dozwolone klienty znajdują się wpisy",
|
||||||
|
"disallowedDomainsDescription": "AdGuard Home usuwa zapytania DNS pasujące do tych domen, a zapytania te nawet nie pojawiają się w dzienniku zapytań",
|
||||||
|
"addClientFieldDescription": "CIDRs, adres IP or ClientID",
|
||||||
|
"clientIdentifier": "Identyfikator klienta",
|
||||||
|
"allowClient": "Zezwól klientowi",
|
||||||
|
"disallowClient": "Nie zezwalaj klientowi",
|
||||||
|
"noDisallowedDomains": "Brak niedozwolonych domen",
|
||||||
|
"domainNotAdded": "Nie można dodać domeny",
|
||||||
|
"statusSelected": "Wybrany status",
|
||||||
|
"updateLists": "Aktualizuj listy",
|
||||||
|
"checkHostFiltered": "Sprawdź hosta",
|
||||||
|
"updatingLists": "Aktualizowanie list...",
|
||||||
|
"listsUpdated": "Zaktualizowano listy",
|
||||||
|
"listsNotUpdated": "Nie można zaktualizować list",
|
||||||
|
"listsNotLoaded": "Nie można załadować list",
|
||||||
|
"domainNotValid": "Nieprawidłowa domena",
|
||||||
|
"check": "Sprawdź",
|
||||||
|
"checkingHost": "Sprawdzanie hosta...",
|
||||||
|
"errorCheckingHost": "Nie można sprawdzić hosta",
|
||||||
|
"block": "Zablokować",
|
||||||
|
"unblock": "Odblokować",
|
||||||
|
"custom": "Niestandardowy",
|
||||||
|
"addImportant": "Dodawaj $important",
|
||||||
|
"howCreateRules": "Jak tworzyć reguły niestandardowe",
|
||||||
|
"examples": "Przykłady",
|
||||||
|
"example1": "Zablokuj dostęp do example.org i wszystkich jej subdomen.",
|
||||||
|
"example2": "Odblokowuje dostęp do example.org i wszystkich jego subdomen.",
|
||||||
|
"example3": "Dodaje komentarz.",
|
||||||
|
"example4": "Blokowanie dostępu do domen zgodnych z określonym wyrażeniem regularnym.",
|
||||||
|
"moreInformation": "Więcej informacji",
|
||||||
|
"addingRule": "Dodawanie reguły...",
|
||||||
|
"deletingRule": "Usuwanie reguły...",
|
||||||
|
"enablingList": "Włączanie listy...",
|
||||||
|
"disablingList": "Wyłączanie listy...",
|
||||||
|
"disableFiltering": "Wyłącz filtrowanie",
|
||||||
|
"enablingFiltering": "Włączanie filtrowania...",
|
||||||
|
"disablingFiltering": "Wyłączanie filtrowania...",
|
||||||
|
"filteringStatusUpdated": "Stan filtrowania został pomyślnie zaktualizowany",
|
||||||
|
"filteringStatusNotUpdated": "Nie można zaktualizować stanu filtrowania",
|
||||||
|
"updateFrequency": "Częstotliwość aktualizacji",
|
||||||
|
"never": "Nigdy",
|
||||||
|
"hour1": "Co 1 godzinę",
|
||||||
|
"hours12": "Co 12 godzin",
|
||||||
|
"hours24": "Co 24 godziny",
|
||||||
|
"days3": "Co 3 dni",
|
||||||
|
"days7": "Co 7 dni",
|
||||||
|
"changingUpdateFrequency": "Zmieniam...",
|
||||||
|
"updateFrequencyChanged": "Częstotliwość aktualizacji została pomyślnie zmieniona",
|
||||||
|
"updateFrequencyNotChanged": "Nie można zmienić częstotliwości aktualizacji",
|
||||||
|
"updating": "Aktualizowanie wartości...",
|
||||||
|
"blockedServicesUpdated": "Zablokowane usługi zostały pomyślnie zaktualizowane",
|
||||||
|
"blockedServicesNotUpdated": "Nie można zaktualizować zablokowanych usług",
|
||||||
|
"insertDomain": "Wstaw domenę, aby sprawdzić jej status.",
|
||||||
|
"dhcpSettings": "Ustawienia DHCP",
|
||||||
|
"dhcpSettingsDescription": "Konfigurowanie serwera DHCP",
|
||||||
|
"dhcpSettingsNotLoaded": "Nie można załadować ustawień DHCP",
|
||||||
|
"loadingDhcp": "Ładowanie ustawień DHCP...",
|
||||||
|
"enableDhcpServer": "Włącz serwer DHCP",
|
||||||
|
"selectInterface": "Wybierz interfejs",
|
||||||
|
"hardwareAddress": "Adres sprzętowy",
|
||||||
|
"gatewayIp": "Adres IP bramy",
|
||||||
|
"ipv4addresses": "Adres IPv4",
|
||||||
|
"ipv6addresses": "Adres IPv6",
|
||||||
|
"neededSelectInterface": "Aby skonfigurować serwer DHCP, należy wybrać interfejs.",
|
||||||
|
"ipv4settings": "Ustawienia IPv4",
|
||||||
|
"startOfRange": "Początek zakresu",
|
||||||
|
"endOfRange": "Koniec zakresu",
|
||||||
|
"ipv6settings": "Ustawienia IPv6",
|
||||||
|
"subnetMask": "Maska podsieci",
|
||||||
|
"subnetMaskNotValid": "Maska podsieci jest nieprawidłowa",
|
||||||
|
"gateway": "Brama",
|
||||||
|
"gatewayNotValid": "Brama jest nieprawidłowa",
|
||||||
|
"leaseTime": "Czas dzierżawy",
|
||||||
|
"seconds": "{time} sekund",
|
||||||
|
"leaseTimeNotValid": "Czas dzierżawy jest nieaktualny",
|
||||||
|
"restoreConfiguration": "Zresetuj konfigurację",
|
||||||
|
"restoreConfigurationMessage": "Czy na pewno chcesz kontynuować? Spowoduje to zresetowanie całej konfiguracji. Tej czynności nie można cofnąć.",
|
||||||
|
"changeInterface": "Zmień interfejs",
|
||||||
|
"savingSettings": "Zapisywanie ustawień...",
|
||||||
|
"settingsSaved": "Ustawienia zapisane pomyślnie",
|
||||||
|
"settingsNotSaved": "Nie można zapisać ustawień",
|
||||||
|
"restoringConfig": "Przywracanie konfiguracji...",
|
||||||
|
"configRestored": "Konfiguracja została zresetowana pomyślnie",
|
||||||
|
"configNotRestored": "Nie można zresetować konfiguracji",
|
||||||
|
"dhcpStatic": "Dzierżawy statyczne DHCP",
|
||||||
|
"noDhcpStaticLeases": "Nie znaleziono dzierżaw statycznych DHCP",
|
||||||
|
"deleting": "Usuwanie...",
|
||||||
|
"staticLeaseDeleted": "Dzierżawa statyczna DHCP została pomyślnie usunięta",
|
||||||
|
"staticLeaseNotDeleted": "Nie można usunąć dzierżawy statycznej DHCP",
|
||||||
|
"deleteStaticLease": "Usuwanie dzierżawy statycznej...",
|
||||||
|
"deleteStaticLeaseDescription": "Dzierżawa statyczna DHCP zostanie usunięta. Tej akcji nie można cofnąć.",
|
||||||
|
"addStaticLease": "Dodawanie dzierżawy statycznej",
|
||||||
|
"macAddress": "Adres MAC",
|
||||||
|
"macAddressNotValid": "Nieprawidłowy adres MAC",
|
||||||
|
"hostName": "Nazwa hosta",
|
||||||
|
"hostNameError": "Nazwa hosta nie może być pusta",
|
||||||
|
"creating": "Tworzenie...",
|
||||||
|
"staticLeaseCreated": "Dzierżawa statyczna DHCP utworzona pomyślnie",
|
||||||
|
"staticLeaseNotCreated": "Nie można utworzyć dzierżawy statycznej DHCP",
|
||||||
|
"staticLeaseExists": "Dzierżawa statyczna DHCP już istnieje",
|
||||||
|
"serverNotConfigured": "Serwer nie jest skonfigurowany",
|
||||||
|
"restoreLeases": "Resetowanie dzierżaw",
|
||||||
|
"restoreLeasesMessage": "Czy na pewno chcesz kontynuować? Spowoduje to zresetowanie wszystkich istniejących dzierżaw. Tej czynności nie można cofnąć.",
|
||||||
|
"restoringLeases": "Resetowanie dzierżaw...",
|
||||||
|
"leasesRestored": "Dzierżawy zostały pomyślnie zresetowane",
|
||||||
|
"leasesNotRestored": "Nie można zresetować dzierżaw",
|
||||||
|
"dhcpLeases": "Dzierżawy DHCP",
|
||||||
|
"noLeases": "Brak dostępnych dzierżaw DHCP",
|
||||||
|
"dnsRewrites": "Przepisywanie DNS",
|
||||||
|
"dnsRewritesDescription": "Konfigurowanie niestandardowych reguł DNS",
|
||||||
|
"loadingRewriteRules": "Wczytywanie reguł przepisywania...",
|
||||||
|
"rewriteRulesNotLoaded": "Nie można załadować reguł przepisywania DNS.",
|
||||||
|
"noRewriteRules": "Brak reguł przepisywania DNS.",
|
||||||
|
"answer": "Odpowiedź",
|
||||||
|
"deleteDnsRewrite": "Usuń przepisywanie DNS",
|
||||||
|
"deleteDnsRewriteMessage": "Czy na pewno chcesz usunąć to przepisanie DNS? Tej akcji nie można cofnąć.",
|
||||||
|
"dnsRewriteRuleDeleted": "Reguła przepisywania DNS została pomyślnie usunięta",
|
||||||
|
"dnsRewriteRuleNotDeleted": "Nie można usunąć reguły przepisywania DNS",
|
||||||
|
"addDnsRewrite": "Dodaj przepisywanie DNS",
|
||||||
|
"addingRewrite": "Dodawanie przepisywania...",
|
||||||
|
"dnsRewriteRuleAdded": "Pomyślnie dodano regułę przepisywania DNS",
|
||||||
|
"dnsRewriteRuleNotAdded": "Nie można dodać reguły przepisywania DNS",
|
||||||
|
"logsSettings": "Ustawienia dzienników logów",
|
||||||
|
"enableLog": "Włącz dziennik logów",
|
||||||
|
"clearLogs": "Czyszczenie dzienników logów",
|
||||||
|
"anonymizeClientIp": "Anonimizuj adres IP klienta",
|
||||||
|
"hours6": "co 6 godzin",
|
||||||
|
"days30": "co 30 dni",
|
||||||
|
"days90": "co 90 dni",
|
||||||
|
"retentionTime": "Czas retencji",
|
||||||
|
"selectOneItem": "Wybierz jeden element",
|
||||||
|
"logSettingsNotLoaded": "Nie można załadować ustawień dziennika logów.",
|
||||||
|
"updatingSettings": "Aktualizowanie ustawień...",
|
||||||
|
"logsConfigUpdated": "Ustawienia dzienników logów zostały pomyślnie zaktualizowane",
|
||||||
|
"logsConfigNotUpdated": "Nie można zaktualizować ustawień dzienników logów",
|
||||||
|
"deletingLogs": "Czyszczenie dzienników logów...",
|
||||||
|
"logsCleared": "Dzienniki logów wyczyszczone pomyślnie",
|
||||||
|
"logsNotCleared": "Nie można wyczyścić dzienników logów",
|
||||||
|
"runningHomeAssistant": "Działa na Home Assistant",
|
||||||
|
"serverError": "Błąd serwera",
|
||||||
|
"noItems": "Brak elementów do pokazania w tym miejscu",
|
||||||
|
"dnsSettings": "Ustawienia DNS",
|
||||||
|
"dnsSettingsDescription": "Konfigurowanie połączenia z serwerami DNS",
|
||||||
|
"upstreamDns": "Nadrzędne serwery DNS",
|
||||||
|
"bootstrapDns": "Serwery DNS Bootstrap",
|
||||||
|
"noUpstreamDns": "Nie dodano nadrzędnych serwerów DNS.",
|
||||||
|
"dnsMode": "Tryb DNS",
|
||||||
|
"noDnsMode": "Nie wybrano trybu DNS",
|
||||||
|
"loadBalancing": "Równoważenie obciążenia",
|
||||||
|
"parallelRequests": "Równoległe żądania",
|
||||||
|
"fastestIpAddress": "Najszybszy adres IP",
|
||||||
|
"loadBalancingDescription": "Wysyłaj zapytania do jednego serwera nadrzędnego naraz. AdGuard Home wykorzystuje ważony algorytm losowy, aby wybrać serwer, dzięki czemu najszybszy serwer jest używany częściej.",
|
||||||
|
"parallelRequestsDescription": "Użyj zapytań równoległych, aby przyspieszyć rozwiązywanie problemów, wysyłając jednocześnie zapytania do wszystkich serwerów nadrzędnych.",
|
||||||
|
"fastestIpAddressDescription": "Odpytuj wszystkie serwery DNS i zwracaj najszybszy adres IP spośród wszystkich odpowiedzi. Spowalnia to zapytania DNS, ponieważ AdGuard Home musi czekać na odpowiedzi ze wszystkich serwerów DNS, ale poprawia ogólną łączność.",
|
||||||
|
"noBootstrapDns": "Nie dodano żadnych serwerów Bootstrap DNS.",
|
||||||
|
"bootstrapDnsServersInfo": "Serwery DNS Bootstrap służą do rozpoznawania adresów IP programów rozpoznawania nazw DoH/DoT określonych jako nadrzędne.",
|
||||||
|
"privateReverseDnsServers": "Prywatne zwrotne serwery DNS",
|
||||||
|
"privateReverseDnsServersDescription": "Serwery DNS, których AdGuard Home używa do lokalnych zapytań PST. Serwery te są używane na przykład do rozwiązywania żądań PST dotyczących adresów w prywatnych zakresach adresów IP \"192.168.12.34\", przy użyciu odwrotnego DNS. Jeśli nie jest ustawiony, AdGuard Home używa adresów domyślnych programów rozpoznawania nazw DNS systemu operacyjnego, z wyjątkiem adresów samego AdGuard Home.",
|
||||||
|
"reverseDnsDefault": "Domyślnie AdGuard Home używa następujących programów do rozpoznawania odwrotnych nazw DNS",
|
||||||
|
"addItem": "Dodaj element",
|
||||||
|
"noServerAddressesAdded": "Nie dodano adresów serwerów.",
|
||||||
|
"usePrivateReverseDnsResolvers": "Użyj prywatnych programów do rozpoznawania nazw zwrotnych DNS",
|
||||||
|
"usePrivateReverseDnsResolversDescription": "Wykonaj odwrotne wyszukiwanie DNS dla adresów obsługiwanych lokalnie przy użyciu tych serwerów nadrzędnych. Jeśli jest wyłączona, AdGuard Home odpowiada NXDOMAIN na wszystkie takie żądania PST, z wyjątkiem klientów znanych z DHCP, /etc/hosts itd.",
|
||||||
|
"enableReverseResolving": "Włącz odwrotne rozpoznawanie adresów IP klientów",
|
||||||
|
"enableReverseResolvingDescription": "Odwrotne rozpoznawanie adresów IP klientów w ich nazwach hostów przez wysyłanie zapytań PTR do odpowiednich programów rozpoznawania nazw (prywatne serwery DNS dla klientów lokalnych, serwery nadrzędne dla klientów z publicznymi adresami IP).",
|
||||||
|
"dnsServerSettings": "Ustawienia serwera DNS AdGuard Home",
|
||||||
|
"limitRequestsSecond": "Limit szybkości na sekundę",
|
||||||
|
"valueNotNumber": "Wartość nie jest liczbą",
|
||||||
|
"enableEdns": "Włączanie podsieci klienta EDNS",
|
||||||
|
"enableEdnsDescription": "Dodaj opcję podsieci klienta EDNS (ECS) do żądań nadrzędnych i rejestruj wartości wysyłane przez klientów w dzienniku zapytań.",
|
||||||
|
"enableDnssec": "Włącz usługę DNSSEC",
|
||||||
|
"enableDnssecDescription": "Ustaw flagę DNSSEC w wychodzących zapytaniach DNS i sprawdź wynik (wymagany jest moduł rozpoznawania nazw obsługujący DNSSEC).",
|
||||||
|
"disableResolvingIpv6": "Wyłączanie rozpoznawania adresów IPv6",
|
||||||
|
"disableResolvingIpv6Description": "Usuń wszystkie zapytania DNS dotyczące adresów IPv6 (typ AAAA).",
|
||||||
|
"blockingMode": "Tryb blokowania",
|
||||||
|
"defaultMode": "Domyślny",
|
||||||
|
"defaultDescription": "Odpowiedz zerowym adresem IP (0.0.0.0 dla A; :: dla AAAA), gdy zostanie zablokowany przez regułę w stylu Adblock; odpowiedz adresem IP określonym w regule, jeśli zostanie zablokowany przez regułę w stylu /etc/hosts",
|
||||||
|
"refusedDescription": "Odpowiedz kodem REFUSED",
|
||||||
|
"nxdomainDescription": "Odpowiadanie za pomocą kodu NXDOMAIN",
|
||||||
|
"nullIp": "Null IP",
|
||||||
|
"nullIpDescription": "Odpowiedz, podając zerowy adres IP (0.0.0.0 dla A; :: dla AAAA)",
|
||||||
|
"customIp": "Niestandardowy adres IP",
|
||||||
|
"customIpDescription": "Odpowiadanie przy użyciu ręcznie ustawionego adresu IP",
|
||||||
|
"dnsCacheConfig": "Konfiguracja pamięci podręcznej DNS",
|
||||||
|
"cacheSize": "Rozmiar pamięci podręcznej",
|
||||||
|
"inBytes": "W bajtach",
|
||||||
|
"overrideMinimumTtl": "Zastąp minimalny czas TTL",
|
||||||
|
"overrideMinimumTtlDescription": "Wydłużanie wartości krótkiego czasu wygaśnięcia (sekund) odbieranych z serwera nadrzędnego podczas buforowania odpowiedzi DNS.",
|
||||||
|
"overrideMaximumTtl": "Zastąp maksymalne ustawienie TTL",
|
||||||
|
"overrideMaximumTtlDescription": "Ustaw maksymalną wartość czasu wygaśnięcia (sekundy) dla wpisów w pamięci podręcznej DNS.",
|
||||||
|
"optimisticCaching": "Optymistyczne buforowanie",
|
||||||
|
"optimisticCachingDescription": "Spraw, aby AdGuard Home odpowiadał z pamięci podręcznej, nawet gdy wpisy wygasły, a także spróbuj je odświeżyć.",
|
||||||
|
"loadingDnsConfig": "Ładowanie konfiguracji DNS...",
|
||||||
|
"dnsConfigNotLoaded": "Nie można załadować konfiguracji DNS.",
|
||||||
|
"blockingIpv4": "Blokowanie protokołu IPv4",
|
||||||
|
"blockingIpv4Description": "Adres IP do zwrócenia w przypadku zablokowanego żądania A",
|
||||||
|
"blockingIpv6": "Blokowanie protokołu IPv6",
|
||||||
|
"blockingIpv6Description": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania AAAA",
|
||||||
|
"invalidIp": "Nieprawidłowy adres IP",
|
||||||
|
"dnsConfigSaved": "Konfiguracja serwera DNS zapisana pomyślnie",
|
||||||
|
"dnsConfigNotSaved": "Nie można zapisać konfiguracji serwera DNS",
|
||||||
|
"savingConfig": "Zapisywanie konfiguracji...",
|
||||||
|
"someValueNotValid": "Niektóre wartości są nieprawidłowe",
|
||||||
|
"upstreamDnsDescription": "Konfigurowanie serwerów nadrzędnych i trybu DNS",
|
||||||
|
"bootstrapDnsDescription": "Konfigurowanie serwerów DNS ładowania początkowego",
|
||||||
|
"privateReverseDnsDescription": "Konfigurowanie niestandardowych programów rozpoznawania nazw DNS i włączanie prywatnego rozpoznawania zwrotnej domeny DNS",
|
||||||
|
"dnsServerSettingsDescription": "Konfigurowanie limitu szybkości, trybu blokowania i innych funkcji",
|
||||||
|
"dnsCacheConfigDescription": "Konfigurowanie sposobu zarządzania pamięcią podręczną DNS przez serwer",
|
||||||
|
"comment": "Komentarz",
|
||||||
|
"address": "Adres",
|
||||||
|
"commentsDescription": "Komentarze są zawsze poprzedzone znakiem #. Nie musisz go dodawać, zostanie dodany automatycznie.",
|
||||||
|
"encryptionSettings": "Ustawienia szyfrowania",
|
||||||
|
"encryptionSettingsDescription": "Obsługa szyfrowania (HTTPS/QUIC/TLS)",
|
||||||
|
"loadingEncryptionSettings": "Ładowanie ustawień szyfrowania...",
|
||||||
|
"encryptionSettingsNotLoaded": "Nie można załadować ustawień szyfrowania.",
|
||||||
|
"enableEncryption": "Włącz szyfrowanie",
|
||||||
|
"enableEncryptionTypes": "HTTPS, DNS przez HTTPS i DNS przez TLS",
|
||||||
|
"enableEncryptionDescription": "Jeśli szyfrowanie jest włączone, interfejs administratora AdGuard Home będzie działał przez HTTPS, a serwer DNS będzie nasłuchiwał żądań przez DNS przez HTTPS i DNS przez TLS.",
|
||||||
|
"serverConfiguration": "Konfiguracja serwera",
|
||||||
|
"domainName": "Nazwa domeny",
|
||||||
|
"domainNameDescription": "Jeśli jest ustawiony, AdGuard Home wykrywa identyfikatory klientów, odpowiada na zapytania DDR i wykonuje dodatkowe walidacje połączeń. Jeśli te funkcje nie są ustawione, są wyłączone. Musi być zgodna z jedną z nazw DNS w certyfikacie.",
|
||||||
|
"redirectHttps": "Automatyczne przekierowywanie do protokołu HTTPS",
|
||||||
|
"httpsPort": "Port HTTPS",
|
||||||
|
"tlsPort": "DNS przez port TLS",
|
||||||
|
"dnsOverQuicPort": "DNS przez port QUIC",
|
||||||
|
"certificates": "Certifikaty",
|
||||||
|
"certificatesDescription": "Aby korzystać z szyfrowania, musisz podać prawidłowy łańcuch certyfikatów SSL dla swojej domeny. Możesz uzyskać bezpłatny certyfikat na letsencrypt.org lub kupić go w jednym z zaufanych urzędów certyfikacji.",
|
||||||
|
"certificateFilePath": "Ustaw ścieżkę pliku certyfikatów",
|
||||||
|
"pasteCertificateContent": "Wklejanie zawartości certyfikatów",
|
||||||
|
"certificatePath": "Ścieżka certyfikatu",
|
||||||
|
"certificateContent": "Zawartość certyfikatu",
|
||||||
|
"privateKey": "Klucz prywatny",
|
||||||
|
"privateKeyFile": "Ustaw plik klucza prywatnego",
|
||||||
|
"pastePrivateKey": "Wklejanie zawartości klucza prywatnego",
|
||||||
|
"usePreviousKey": "Użyj wcześniej zapisanego klucza",
|
||||||
|
"privateKeyPath": "Ścieżka klucza prywatnego",
|
||||||
|
"invalidCertificate": "Nieprawidłowy certyfikat",
|
||||||
|
"invalidPrivateKey": "Nieprawidłowy klucz prywatny",
|
||||||
|
"validatingData": "Sprawdzanie poprawności danych",
|
||||||
|
"dataValid": "Dane prawidłowe",
|
||||||
|
"dataNotValid": "Dane nieprawidłowe",
|
||||||
|
"encryptionConfigSaved": "Konfiguracja szyfrowania zapisana pomyślnie",
|
||||||
|
"encryptionConfigNotSaved": "Nie można zapisać konfiguracji szyfrowania",
|
||||||
|
"configError": "Błąd konfiguracji",
|
||||||
|
"enterOnlyCertificate": "Wprowadź tylko certyfikat. Nie wpisuj linii ---BEGIN--- i ---END---.",
|
||||||
|
"enterOnlyPrivateKey": "Wprowadź tylko klucz. Nie wpisuj linii ---BEGIN--- i ---END---.",
|
||||||
|
"noItemsSearch": "Brak elementów dla tego wyszukiwania.",
|
||||||
|
"clearSearch": "Wyczyść wyszukiwanie",
|
||||||
|
"exitSearch": "Zakończ wyszukiwanie",
|
||||||
|
"searchClients": "Wyszukaj klientów",
|
||||||
|
"noClientsSearch": "Brak klientów dla tego wyszukiwania.",
|
||||||
|
"customization": "Personalizacja",
|
||||||
|
"customizationDescription": "Dostosuj tę aplikację",
|
||||||
|
"color": "Kolor",
|
||||||
|
"useDynamicTheme": "Użyj motywu dynamicznego",
|
||||||
|
"red": "Czerwony",
|
||||||
|
"green": "Zielony",
|
||||||
|
"blue": "Niebieski",
|
||||||
|
"yellow": "Żółty",
|
||||||
|
"orange": "Pomarańczowy",
|
||||||
|
"brown": "Brązowy",
|
||||||
|
"cyan": "Błękitny",
|
||||||
|
"purple": "Fioletowy",
|
||||||
|
"pink": "Różowy",
|
||||||
|
"deepOrange": "Głęboki pomarańczowy",
|
||||||
|
"indigo": "Indygo",
|
||||||
|
"useThemeColorStatus": "Użyj koloru motywu dla statusu",
|
||||||
|
"useThemeColorStatusDescription": "Zastępuje zielone i czerwone kolory statusu kolorami motywu i szarością",
|
||||||
|
"invalidCertificateChain": "Nieprawidłowy łańcuch certyfikatów",
|
||||||
|
"validCertificateChain": "Prawidłowy łańcuch certyfikatów",
|
||||||
|
"subject": "Temat",
|
||||||
|
"issuer": "Wydawca",
|
||||||
|
"expires": "Wygasa",
|
||||||
|
"validPrivateKey": "Prawidłowy klucz prywatny",
|
||||||
|
"expirationDate": "Data ważności",
|
||||||
|
"keysNotMatch": "Nieprawidłowy certyfikat lub klucz: TLS: klucz prywatny nie jest zgodny z kluczem publicznym",
|
||||||
|
"timeLogs": "Czas w dziennikach logów",
|
||||||
|
"timeLogsDescription": "Pokaż czas przetwarzania na liście dzienników logów",
|
||||||
|
"hostNames": "Nazwy hostów",
|
||||||
|
"keyType": "Typ klucza",
|
||||||
|
"updateAvailable": "Dostępna aktualizacja",
|
||||||
|
"installedVersion": "Zainstalowana wersja",
|
||||||
|
"newVersion": "Nowa wersja",
|
||||||
|
"source": "Źródło",
|
||||||
|
"downloadUpdate": "Pobierz aktualizację",
|
||||||
|
"download": "Pobierz",
|
||||||
|
"doNotRememberAgainUpdate": "Nie pamiętam ponownie dla tej wersji",
|
||||||
|
"downloadingUpdate": "Pobieranie aktualizacji",
|
||||||
|
"completed": "ukończone",
|
||||||
|
"permissionNotGranted": "Pozwolenie nie zostało udzielone",
|
||||||
|
"inputSearchTerm": "Wprowadź wyszukiwany termin.",
|
||||||
|
"answers": "Odpowiedzi",
|
||||||
|
"copyClipboard": "Kopiuj do schowka",
|
||||||
|
"domainCopiedClipboard": "Domena skopiowana do schowka",
|
||||||
|
"clearDnsCache": "Wyczyść pamięć podręczną DNS",
|
||||||
|
"clearDnsCacheMessage": "Czy na pewno chcesz wyczyścić pamięć podręczną DNS?",
|
||||||
|
"dnsCacheCleared": "Pamięć podręczna DNS została pomyślnie wyczyszczona",
|
||||||
|
"clearingDnsCache": "Czyszczenie pamięci podręcznej...",
|
||||||
|
"dnsCacheNotCleared": "Nie można wyczyścić pamięci podręcznej DNS",
|
||||||
|
"clientsSelected": "Wybrani klienci",
|
||||||
|
"invalidDomain": "Nieprawidłowa domena",
|
||||||
|
"loadingBlockedServicesList": "Ładowanie listy zablokowanych usług...",
|
||||||
|
"blockedServicesListNotLoaded": "Nie można załadować listy zablokowanych usług",
|
||||||
|
"error": "Błąd",
|
||||||
|
"updates": "Aktualizacje",
|
||||||
|
"updatesDescription": "Zaktualizuj serwer AdGuard Home",
|
||||||
|
"updateNow": "Aktualizuj teraz",
|
||||||
|
"currentVersion": "Aktualna wersja",
|
||||||
|
"requestStartUpdateFailed": "Żądanie rozpoczęcia aktualizacji nie powiodło się",
|
||||||
|
"requestStartUpdateSuccessful": "Żądanie rozpoczęcia aktualizacji powiodło się",
|
||||||
|
"serverUpdated": "Serwer jest aktualizowany",
|
||||||
|
"unknownStatus": "Status nieznany",
|
||||||
|
"checkingUpdates": "Sprawdzanie aktualizacji...",
|
||||||
|
"checkUpdates": "Sprawdź aktualizacje",
|
||||||
|
"requestingUpdate": "Żądanie aktualizacji...",
|
||||||
|
"autoupdateUnavailable": "Automatyczna aktualizacja jest niedostępna",
|
||||||
|
"autoupdateUnavailableDescription": "Usługa automatycznej aktualizacji nie jest dostępna dla tego serwera. Może to być spowodowane tym, że serwer działa w kontenerze Docker. Musisz zaktualizować serwer ręcznie.",
|
||||||
|
"minute": "{time} minut",
|
||||||
|
"minutes": "{time} minut",
|
||||||
|
"hour": "{time} godzina",
|
||||||
|
"hours": "{time} godzin",
|
||||||
|
"remainingTime": "Pozostały czas",
|
||||||
|
"safeSearchSettings": "Ustawienia bezpiecznego wyszukiwania",
|
||||||
|
"loadingSafeSearchSettings": "Ładowanie ustawień bezpiecznego wyszukiwania...",
|
||||||
|
"safeSearchSettingsNotLoaded": "Błąd podczas ładowania ustawień bezpiecznego wyszukiwania.",
|
||||||
|
"loadingLogsSettings": "Ładowanie ustawień dzienników logów...",
|
||||||
|
"selectOptionLeftColumn": "Wybierz opcję lewej kolumny",
|
||||||
|
"selectClientLeftColumn": "Wybierz klienta z lewej kolumny",
|
||||||
|
"disableList": "Wyłącz listę",
|
||||||
|
"enableList": "Włącz listę",
|
||||||
|
"screens": "Ekrany",
|
||||||
|
"copiedClipboard": "Skopiowane do schowka",
|
||||||
|
"seeDetails": "Zobacz szczegóły",
|
||||||
|
"listNotAvailable": "Lista niedostępna",
|
||||||
|
"copyListUrl": "Skopiuj adres URL listy",
|
||||||
|
"listUrlCopied": "Adres URL listy skopiowany do schowka",
|
||||||
|
"unsupportedVersion": "Nieobsługiwana wersja",
|
||||||
|
"unsupprtedVersionMessage": "Nie gwarantuje się wsparcia dla wersji serwera {version}. Ta aplikacja może mieć pewne problemy z działaniem na tej wersji serwera.\n\nAdGuard Home Manager został zaprojektowany do współpracy ze stabilnymi wersjami serwera AdGuard Home. Może działać z wersjami alfa i beta, ale kompatybilność nie jest gwarantowana, a aplikacja może mieć pewne problemy z działaniem w tych wersjach.",
|
||||||
|
"iUnderstand": "Rozumiem",
|
||||||
|
"appUpdates": "Aktualizacje aplikacji",
|
||||||
|
"usingLatestVersion": "Używasz najnowszej wersji",
|
||||||
|
"ipLogs": "IP w dziennikach logów",
|
||||||
|
"ipLogsDescription": "Pokaż zawsze adres IP w dziennikach logów zamiast nazwy klienta",
|
||||||
|
"application": "Aplikacja",
|
||||||
|
"combinedChart": "Wykres łączony",
|
||||||
|
"combinedChartDescription": "Połącz wszystkie wykresy w jeden",
|
||||||
|
"statistics": "Statystyka",
|
||||||
|
"errorLoadFilters": "Błąd podczas ładowania filtrów.",
|
||||||
|
"clientRemovedSuccessfully": "Klient został pomyślnie usunięty.",
|
||||||
|
"editRewriteRule": "Edytowanie reguły przepisywania",
|
||||||
|
"dnsRewriteRuleUpdated": "Reguła przepisywania DNS została pomyślnie zaktualizowana",
|
||||||
|
"dnsRewriteRuleNotUpdated": "Nie można zaktualizować reguły przepisywania DNS",
|
||||||
|
"updatingRule": "Aktualizuję regułę...",
|
||||||
|
"serverUpdateNeeded": "Wymagana aktualizacja serwera",
|
||||||
|
"updateYourServer": "Aby móc korzystać z tej funkcji, zaktualizuj serwer AdGuard Home do wersji {version} lub nowszej.",
|
||||||
|
"january": "Styczeń",
|
||||||
|
"february": "Luty",
|
||||||
|
"march": "Mrzec",
|
||||||
|
"april": "Kwiecień",
|
||||||
|
"may": "Maj",
|
||||||
|
"june": "Czerwiec",
|
||||||
|
"july": "Lipiec",
|
||||||
|
"august": "Sierpień",
|
||||||
|
"september": "Wrzesień",
|
||||||
|
"october": "Październik",
|
||||||
|
"november": "Listopad",
|
||||||
|
"december": "Grudzień",
|
||||||
|
"malwarePhising": "Złośliwe oprogramowanie / wyłudzanie informacji",
|
||||||
|
"queries": "Zapytania",
|
||||||
|
"adultSites": "Strony dla dorosłych",
|
||||||
|
"quickFilters": "Szybkie filtry",
|
||||||
|
"searchDomainInternet": "Wyszukaj domenę w Internecie"
|
||||||
|
}
|
|
@ -228,7 +228,8 @@ class _MainState extends State<Main> {
|
||||||
Locale('en', ''),
|
Locale('en', ''),
|
||||||
Locale('es', ''),
|
Locale('es', ''),
|
||||||
Locale('zh', ''),
|
Locale('zh', ''),
|
||||||
Locale('zh', 'CN')
|
Locale('zh', 'CN'),
|
||||||
|
Locale('pl', '')
|
||||||
],
|
],
|
||||||
scaffoldMessengerKey: scaffoldMessengerKey,
|
scaffoldMessengerKey: scaffoldMessengerKey,
|
||||||
builder: (context, child) {
|
builder: (context, child) {
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
import 'package:store_checker/store_checker.dart';
|
import 'package:store_checker/store_checker.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:sqflite/sqlite_api.dart';
|
import 'package:sqflite/sqlite_api.dart';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
|
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
|
||||||
import 'package:adguard_home_manager/models/github_release.dart';
|
import 'package:adguard_home_manager/models/github_release.dart';
|
||||||
import 'package:adguard_home_manager/services/db/queries.dart';
|
import 'package:adguard_home_manager/services/db/queries.dart';
|
||||||
import 'package:adguard_home_manager/functions/conversions.dart';
|
import 'package:adguard_home_manager/functions/conversions.dart';
|
||||||
|
@ -31,6 +36,10 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
int _selectedClientsTab = 0;
|
int _selectedClientsTab = 0;
|
||||||
int _selectedFiltersTab = 0;
|
int _selectedFiltersTab = 0;
|
||||||
|
|
||||||
|
List<HomeTopItems> _homeTopItemsOrder = homeTopItemsDefaultOrder;
|
||||||
|
|
||||||
|
int _hideServerAddress = 0;
|
||||||
|
|
||||||
final List<AppLog> _logs = [];
|
final List<AppLog> _logs = [];
|
||||||
|
|
||||||
int _overrideSslCheck = 0;
|
int _overrideSslCheck = 0;
|
||||||
|
@ -151,6 +160,14 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
return _installationSource;
|
return _installationSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<HomeTopItems> get homeTopItemsOrder {
|
||||||
|
return _homeTopItemsOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get hideServerAddress {
|
||||||
|
return _hideServerAddress == 1 ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
void setDbInstance(Database db) {
|
void setDbInstance(Database db) {
|
||||||
_dbInstance = db;
|
_dbInstance = db;
|
||||||
}
|
}
|
||||||
|
@ -353,6 +370,39 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> setHomeTopItemsOrder(List<HomeTopItems> order) async {
|
||||||
|
final updated = await updateConfigQuery(
|
||||||
|
db: _dbInstance!,
|
||||||
|
column: 'homeTopItemsOrder',
|
||||||
|
value: jsonEncode(List<String>.from(order.map((e) => e.name)))
|
||||||
|
);
|
||||||
|
if (updated == true) {
|
||||||
|
_homeTopItemsOrder = order;
|
||||||
|
notifyListeners();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> setHideServerAddress(bool value) async {
|
||||||
|
final updated = await updateConfigQuery(
|
||||||
|
db: _dbInstance!,
|
||||||
|
column: 'hideServerAddress',
|
||||||
|
value: value == true ? 1 : 0
|
||||||
|
);
|
||||||
|
if (updated == true) {
|
||||||
|
_hideServerAddress = value == true ? 1 : 0;
|
||||||
|
notifyListeners();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Future<bool> setDoNotRememberVersion(String value) async {
|
Future<bool> setDoNotRememberVersion(String value) async {
|
||||||
final updated = await updateConfigQuery(
|
final updated = await updateConfigQuery(
|
||||||
db: _dbInstance!,
|
db: _dbInstance!,
|
||||||
|
@ -373,6 +423,31 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
_doNotRememberVersion = dbData['doNotRememberVersion'];
|
_doNotRememberVersion = dbData['doNotRememberVersion'];
|
||||||
_showIpLogs = dbData['showIpLogs'] ?? 0;
|
_showIpLogs = dbData['showIpLogs'] ?? 0;
|
||||||
_combinedChartHome = dbData['combinedChart'] ?? 0;
|
_combinedChartHome = dbData['combinedChart'] ?? 0;
|
||||||
|
_hideServerAddress = dbData['hideServerAddress'];
|
||||||
|
if (dbData['homeTopItemsOrder'] != null) {
|
||||||
|
try {
|
||||||
|
_homeTopItemsOrder = List<HomeTopItems>.from(
|
||||||
|
List<String>.from(jsonDecode(dbData['homeTopItemsOrder'])).map((e) {
|
||||||
|
switch (e) {
|
||||||
|
case 'queriedDomains':
|
||||||
|
return HomeTopItems.queriedDomains;
|
||||||
|
|
||||||
|
case 'blockedDomains':
|
||||||
|
return HomeTopItems.blockedDomains;
|
||||||
|
|
||||||
|
case 'recurrentClients':
|
||||||
|
return HomeTopItems.recurrentClients;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).where((e) => e != null).toList()
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
Sentry.captureException(e);
|
||||||
|
_homeTopItemsOrder = homeTopItemsDefaultOrder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_dbInstance = dbInstance;
|
_dbInstance = dbInstance;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
|
@ -90,10 +90,11 @@ class HomeAppBar extends StatelessWidget {
|
||||||
if (serversProvider.selectedServer != null) ...[
|
if (serversProvider.selectedServer != null) ...[
|
||||||
Text(
|
Text(
|
||||||
server!.name,
|
server!.name,
|
||||||
style: const TextStyle(
|
style: !appConfigProvider.hideServerAddress ? const TextStyle(
|
||||||
fontSize: 20
|
fontSize: 20
|
||||||
|
) : null,
|
||||||
),
|
),
|
||||||
),
|
if (!appConfigProvider.hideServerAddress) ...[
|
||||||
const SizedBox(height: 5),
|
const SizedBox(height: 5),
|
||||||
Text(
|
Text(
|
||||||
"${server.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}",
|
"${server.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}",
|
||||||
|
@ -102,6 +103,7 @@ class HomeAppBar extends StatelessWidget {
|
||||||
color: Theme.of(context).listTileTheme.textColor
|
color: Theme.of(context).listTileTheme.textColor
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
]
|
||||||
],
|
],
|
||||||
if (serversProvider.selectedServer == null) Text(
|
if (serversProvider.selectedServer == null) Text(
|
||||||
AppLocalizations.of(context)!.noServerSelected,
|
AppLocalizations.of(context)!.noServerSelected,
|
||||||
|
|
|
@ -27,7 +27,7 @@ class HomeChart extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
final bool isEmpty = data.any((i) => i == 0);
|
final bool isEmpty = data.every((i) => i == 0);
|
||||||
|
|
||||||
if (!(appConfigProvider.hideZeroValues == true && isEmpty == true)) {
|
if (!(appConfigProvider.hideZeroValues == true && isEmpty == true)) {
|
||||||
List<DateTime> dateTimes = [];
|
List<DateTime> dateTimes = [];
|
||||||
|
|
|
@ -175,49 +175,60 @@ class _HomeState extends State<Home> {
|
||||||
child: CombinedHomeChart(),
|
child: CombinedHomeChart(),
|
||||||
),
|
),
|
||||||
|
|
||||||
if (width <= 700) ...[
|
if (width <= 700) ...appConfigProvider.homeTopItemsOrder.asMap().entries.map((item) {
|
||||||
TopItems(
|
Widget list() {
|
||||||
|
switch (item.value) {
|
||||||
|
case HomeTopItems.queriedDomains:
|
||||||
|
return TopItems(
|
||||||
label: AppLocalizations.of(context)!.topQueriedDomains,
|
label: AppLocalizations.of(context)!.topQueriedDomains,
|
||||||
data: statusProvider.serverStatus!.stats.topQueriedDomains,
|
data: statusProvider.serverStatus!.stats.topQueriedDomains,
|
||||||
type: 'topQueriedDomains',
|
type: 'topQueriedDomains',
|
||||||
),
|
);
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
||||||
child: Divider(
|
|
||||||
thickness: 1,
|
|
||||||
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
const SizedBox(height: 16),
|
case HomeTopItems.blockedDomains:
|
||||||
|
return TopItems(
|
||||||
TopItems(
|
|
||||||
label: AppLocalizations.of(context)!.topBlockedDomains,
|
label: AppLocalizations.of(context)!.topBlockedDomains,
|
||||||
data: statusProvider.serverStatus!.stats.topBlockedDomains,
|
data: statusProvider.serverStatus!.stats.topBlockedDomains,
|
||||||
type: 'topBlockedDomains',
|
type: 'topBlockedDomains',
|
||||||
),
|
);
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
||||||
child: Divider(
|
|
||||||
thickness: 1,
|
|
||||||
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 16),
|
|
||||||
|
|
||||||
TopItems(
|
case HomeTopItems.recurrentClients:
|
||||||
|
return TopItems(
|
||||||
label: AppLocalizations.of(context)!.topClients,
|
label: AppLocalizations.of(context)!.topClients,
|
||||||
data: statusProvider.serverStatus!.stats.topClients,
|
data: statusProvider.serverStatus!.stats.topClients,
|
||||||
type: 'topClients',
|
type: 'topClients',
|
||||||
clients: true,
|
clients: true,
|
||||||
|
);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
list(),
|
||||||
|
if (item.key < appConfigProvider.homeTopItemsOrder.length - 1) ...[
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
|
child: Divider(
|
||||||
|
thickness: 1,
|
||||||
|
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
]
|
||||||
],
|
],
|
||||||
|
);
|
||||||
|
}),
|
||||||
if (width > 700) Column(
|
if (width > 700) Column(
|
||||||
children: [
|
children: [
|
||||||
Wrap(
|
Wrap(
|
||||||
alignment: WrapAlignment.center,
|
alignment: WrapAlignment.center,
|
||||||
children: [
|
children: appConfigProvider.homeTopItemsOrder.map((item) {
|
||||||
Padding(
|
switch (item) {
|
||||||
|
case HomeTopItems.queriedDomains:
|
||||||
|
return Padding(
|
||||||
padding: const EdgeInsets.only(bottom: 16),
|
padding: const EdgeInsets.only(bottom: 16),
|
||||||
child: ConstrainedBox(
|
child: ConstrainedBox(
|
||||||
constraints: const BoxConstraints(
|
constraints: const BoxConstraints(
|
||||||
|
@ -229,8 +240,10 @@ class _HomeState extends State<Home> {
|
||||||
type: 'topQueriedDomains',
|
type: 'topQueriedDomains',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
Padding(
|
|
||||||
|
case HomeTopItems.blockedDomains:
|
||||||
|
return Padding(
|
||||||
padding: const EdgeInsets.only(bottom: 16),
|
padding: const EdgeInsets.only(bottom: 16),
|
||||||
child: ConstrainedBox(
|
child: ConstrainedBox(
|
||||||
constraints: const BoxConstraints(
|
constraints: const BoxConstraints(
|
||||||
|
@ -242,8 +255,10 @@ class _HomeState extends State<Home> {
|
||||||
type: 'topBlockedDomains',
|
type: 'topBlockedDomains',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
Padding(
|
|
||||||
|
case HomeTopItems.recurrentClients:
|
||||||
|
return Padding(
|
||||||
padding: const EdgeInsets.only(bottom: 16),
|
padding: const EdgeInsets.only(bottom: 16),
|
||||||
child: ConstrainedBox(
|
child: ConstrainedBox(
|
||||||
constraints: const BoxConstraints(
|
constraints: const BoxConstraints(
|
||||||
|
@ -255,8 +270,12 @@ class _HomeState extends State<Home> {
|
||||||
type: 'topClients',
|
type: 'topClients',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
],
|
|
||||||
|
default:
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
}).toList(),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -282,6 +301,7 @@ class _HomeState extends State<Home> {
|
||||||
child: Builder(
|
child: Builder(
|
||||||
builder: (context) => RefreshIndicator(
|
builder: (context) => RefreshIndicator(
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
|
displacement: 95,
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
final result = await statusProvider.getServerStatus();
|
final result = await statusProvider.getServerStatus();
|
||||||
if (result == false) {
|
if (result == false) {
|
||||||
|
|
|
@ -82,9 +82,8 @@ class LogDetailsScreen extends StatelessWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget content() {
|
List<Widget> content() {
|
||||||
return ListView(
|
return [
|
||||||
children: [
|
|
||||||
SectionLabel(label: AppLocalizations.of(context)!.status),
|
SectionLabel(label: AppLocalizations.of(context)!.status),
|
||||||
LogListTile(
|
LogListTile(
|
||||||
icon: Icons.shield_rounded,
|
icon: Icons.shield_rounded,
|
||||||
|
@ -206,8 +205,7 @@ class LogDetailsScreen extends StatelessWidget {
|
||||||
)
|
)
|
||||||
)).toList()
|
)).toList()
|
||||||
]
|
]
|
||||||
],
|
];
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dialog) {
|
if (dialog) {
|
||||||
|
@ -269,7 +267,9 @@ class LogDetailsScreen extends StatelessWidget {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||||
child: content(),
|
child: ListView(
|
||||||
|
children: content(),
|
||||||
|
)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
@ -279,8 +279,15 @@ class LogDetailsScreen extends StatelessWidget {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
body: NestedScrollView(
|
||||||
|
headerSliverBuilder: (context, innerBoxIsScrolled) => [
|
||||||
|
SliverOverlapAbsorber(
|
||||||
|
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||||
|
sliver: SliverAppBar.large(
|
||||||
|
pinned: true,
|
||||||
|
floating: true,
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
|
forceElevated: innerBoxIsScrolled,
|
||||||
title: Text(AppLocalizations.of(context)!.logDetails),
|
title: Text(AppLocalizations.of(context)!.logDetails),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
|
@ -307,7 +314,25 @@ class LogDetailsScreen extends StatelessWidget {
|
||||||
const SizedBox(width: 10)
|
const SizedBox(width: 10)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: content(),
|
)
|
||||||
|
],
|
||||||
|
body: SafeArea(
|
||||||
|
top: false,
|
||||||
|
bottom: false,
|
||||||
|
child: Builder(
|
||||||
|
builder: (context) => CustomScrollView(
|
||||||
|
slivers: [
|
||||||
|
SliverOverlapInjector(
|
||||||
|
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||||
|
),
|
||||||
|
SliverList.list(
|
||||||
|
children: content()
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,8 +31,6 @@ class Logs extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _LogsState extends State<Logs> {
|
class _LogsState extends State<Logs> {
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
bool showDivider = true;
|
bool showDivider = true;
|
||||||
|
|
||||||
Log? selectedLog;
|
Log? selectedLog;
|
||||||
|
@ -65,25 +63,26 @@ class _LogsState extends State<Logs> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void scrollListener() {
|
bool scrollListener(ScrollUpdateNotification scrollNotification) {
|
||||||
final logsProvider = Provider.of<LogsProvider>(context, listen: false);
|
final logsProvider = Provider.of<LogsProvider>(context, listen: false);
|
||||||
|
|
||||||
if (scrollController.position.extentAfter < 500 && logsProvider.isLoadingMore == false) {
|
if (scrollNotification.metrics.extentAfter < 500 && logsProvider.isLoadingMore == false) {
|
||||||
logsProvider.fetchLogs(loadingMore: true);
|
logsProvider.fetchLogs(loadingMore: true);
|
||||||
}
|
}
|
||||||
if (scrollController.position.pixels > 0) {
|
if (scrollNotification.metrics.pixels > 0) {
|
||||||
setState(() => showDivider = false);
|
setState(() => showDivider = false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
setState(() => showDivider = true);
|
setState(() => showDivider = true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
final logsProvider = Provider.of<LogsProvider>(context, listen: false);
|
final logsProvider = Provider.of<LogsProvider>(context, listen: false);
|
||||||
|
|
||||||
scrollController = ScrollController()..addListener(scrollListener);
|
|
||||||
logsProvider.fetchLogs(inOffset: 0);
|
logsProvider.fetchLogs(inOffset: 0);
|
||||||
fetchFilteringRules();
|
fetchFilteringRules();
|
||||||
fetchClients();
|
fetchClients();
|
||||||
|
@ -192,7 +191,17 @@ class _LogsState extends State<Logs> {
|
||||||
Widget generateBody() {
|
Widget generateBody() {
|
||||||
switch (logsProvider.loadStatus) {
|
switch (logsProvider.loadStatus) {
|
||||||
case LoadStatus.loading:
|
case LoadStatus.loading:
|
||||||
return SizedBox(
|
return SafeArea(
|
||||||
|
top: false,
|
||||||
|
bottom: false,
|
||||||
|
child: Builder(
|
||||||
|
builder: (context) => CustomScrollView(
|
||||||
|
slivers: [
|
||||||
|
SliverOverlapInjector(
|
||||||
|
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||||
|
),
|
||||||
|
SliverFillRemaining(
|
||||||
|
child: SizedBox(
|
||||||
width: double.maxFinite,
|
width: double.maxFinite,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
@ -209,18 +218,32 @@ class _LogsState extends State<Logs> {
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
case LoadStatus.loaded:
|
case LoadStatus.loaded:
|
||||||
return RefreshIndicator(
|
return SafeArea(
|
||||||
|
top: false,
|
||||||
|
bottom: false,
|
||||||
|
child: Builder(
|
||||||
|
builder: (context) => RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
await logsProvider.fetchLogs(inOffset: 0);
|
await logsProvider.fetchLogs(inOffset: 0);
|
||||||
},
|
},
|
||||||
child: logsProvider.logsData!.data.isNotEmpty
|
displacement: 95,
|
||||||
? ListView.builder(
|
child: NotificationListener(
|
||||||
controller: scrollController,
|
onNotification: scrollListener,
|
||||||
padding: const EdgeInsets.only(top: 0),
|
child: CustomScrollView(
|
||||||
itemCount: logsProvider.isLoadingMore == true
|
slivers: [
|
||||||
|
SliverOverlapInjector(
|
||||||
|
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||||
|
),
|
||||||
|
if (logsProvider.logsData!.data.isNotEmpty) SliverList.builder(
|
||||||
|
itemCount: logsProvider.isLoadingMore
|
||||||
? logsProvider.logsData!.data.length + 1
|
? logsProvider.logsData!.data.length + 1
|
||||||
: logsProvider.logsData!.data.length,
|
: logsProvider.logsData!.data.length,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
|
@ -255,8 +278,9 @@ class _LogsState extends State<Logs> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
),
|
||||||
: Center(
|
if (logsProvider.logsData!.data.isEmpty) SliverFillRemaining(
|
||||||
|
child: Center(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
@ -284,11 +308,27 @@ class _LogsState extends State<Logs> {
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
case LoadStatus.error:
|
case LoadStatus.error:
|
||||||
return SizedBox(
|
return SafeArea(
|
||||||
|
top: false,
|
||||||
|
bottom: false,
|
||||||
|
child: Builder(
|
||||||
|
builder: (context) => CustomScrollView(
|
||||||
|
slivers: [
|
||||||
|
SliverOverlapInjector(
|
||||||
|
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||||
|
),
|
||||||
|
SliverFillRemaining(
|
||||||
|
child: SizedBox(
|
||||||
width: double.maxFinite,
|
width: double.maxFinite,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
@ -309,6 +349,11 @@ class _LogsState extends State<Logs> {
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -318,9 +363,18 @@ class _LogsState extends State<Logs> {
|
||||||
|
|
||||||
Widget logsScreen() {
|
Widget logsScreen() {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
body: NestedScrollView(
|
||||||
title: Text(AppLocalizations.of(context)!.logs),
|
headerSliverBuilder: (context, innerBoxIsScrolled) => [
|
||||||
|
SliverOverlapAbsorber(
|
||||||
|
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||||
|
sliver: SliverAppBar.large(
|
||||||
|
pinned: true,
|
||||||
|
floating: true,
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
|
forceElevated: innerBoxIsScrolled,
|
||||||
|
title: Text(AppLocalizations.of(context)!.logs),
|
||||||
|
expandedHeight: logsProvider.appliedFilters.searchText != null || logsProvider.appliedFilters.selectedResultStatus != 'all' || logsProvider.appliedFilters.clients != null
|
||||||
|
? 170 : null,
|
||||||
actions: [
|
actions: [
|
||||||
if (!(Platform.isAndroid || Platform.isIOS)) IconButton(
|
if (!(Platform.isAndroid || Platform.isIOS)) IconButton(
|
||||||
onPressed: () => logsProvider.fetchLogs(inOffset: 0),
|
onPressed: () => logsProvider.fetchLogs(inOffset: 0),
|
||||||
|
@ -369,7 +423,7 @@ class _LogsState extends State<Logs> {
|
||||||
],
|
],
|
||||||
bottom: logsProvider.appliedFilters.searchText != null || logsProvider.appliedFilters.selectedResultStatus != 'all' || logsProvider.appliedFilters.clients != null
|
bottom: logsProvider.appliedFilters.searchText != null || logsProvider.appliedFilters.selectedResultStatus != 'all' || logsProvider.appliedFilters.clients != null
|
||||||
? PreferredSize(
|
? PreferredSize(
|
||||||
preferredSize: const Size(double.maxFinite, 50),
|
preferredSize: const Size(double.maxFinite, 70),
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 50,
|
height: 50,
|
||||||
width: double.maxFinite,
|
width: double.maxFinite,
|
||||||
|
@ -494,7 +548,10 @@ class _LogsState extends State<Logs> {
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
body: generateBody()
|
body: generateBody()
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ import 'package:provider/provider.dart';
|
||||||
import 'package:store_checker/store_checker.dart';
|
import 'package:store_checker/store_checker.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/screens/settings/general_settings/reorderable_top_items_home.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
||||||
import 'package:adguard_home_manager/widgets/section_label.dart';
|
import 'package:adguard_home_manager/widgets/section_label.dart';
|
||||||
|
|
||||||
|
@ -159,6 +161,36 @@ class _GeneralSettingsState extends State<GeneralSettings> {
|
||||||
right: 10
|
right: 10
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
CustomListTile(
|
||||||
|
icon: Icons.remove_red_eye_rounded,
|
||||||
|
title: AppLocalizations.of(context)!.hideServerAddress,
|
||||||
|
subtitle: AppLocalizations.of(context)!.hideServerAddressDescription,
|
||||||
|
trailing: Switch(
|
||||||
|
value: appConfigProvider.hideServerAddress,
|
||||||
|
onChanged: (value) => updateSettings(
|
||||||
|
newStatus: value,
|
||||||
|
function: appConfigProvider.setHideServerAddress
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onTap: () => updateSettings(
|
||||||
|
newStatus: !appConfigProvider.hideServerAddress,
|
||||||
|
function: appConfigProvider.setHideServerAddress
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
top: 10,
|
||||||
|
bottom: 10,
|
||||||
|
left: 16,
|
||||||
|
right: 10
|
||||||
|
)
|
||||||
|
),
|
||||||
|
CustomListTile(
|
||||||
|
icon: Icons.reorder_rounded,
|
||||||
|
title: AppLocalizations.of(context)!.topItemsOrder,
|
||||||
|
subtitle: AppLocalizations.of(context)!.topItemsOrderDescription,
|
||||||
|
onTap: () => Navigator.push(context, MaterialPageRoute(
|
||||||
|
builder: (context) => const ReorderableTopItemsHome()
|
||||||
|
)),
|
||||||
|
),
|
||||||
SectionLabel(label: AppLocalizations.of(context)!.logs),
|
SectionLabel(label: AppLocalizations.of(context)!.logs),
|
||||||
CustomListTile(
|
CustomListTile(
|
||||||
icon: Icons.timer_rounded,
|
icon: Icons.timer_rounded,
|
|
@ -0,0 +1,301 @@
|
||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:flutter_reorderable_list/flutter_reorderable_list.dart' as reorderable_list_library;
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||||
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||||
|
|
||||||
|
class ItemData {
|
||||||
|
final HomeTopItems title;
|
||||||
|
final Key key;
|
||||||
|
|
||||||
|
const ItemData({
|
||||||
|
required this.title,
|
||||||
|
required this.key
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
enum DraggingMode {
|
||||||
|
iOS,
|
||||||
|
android,
|
||||||
|
}
|
||||||
|
|
||||||
|
class ReorderableTopItemsHome extends StatefulWidget {
|
||||||
|
const ReorderableTopItemsHome({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ReorderableTopItemsHome> createState() => _ReorderableTopItemsHomeState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ReorderableTopItemsHomeState extends State<ReorderableTopItemsHome> {
|
||||||
|
List<HomeTopItems> homeTopItemsList = [];
|
||||||
|
List<HomeTopItems> persistHomeTopItemsList = [];
|
||||||
|
List<ItemData> renderItems = [];
|
||||||
|
|
||||||
|
int _indexOfKey(Key key) {
|
||||||
|
return renderItems.indexWhere((ItemData d) => d.key == key);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _reorderCallback(Key item, Key newPosition) {
|
||||||
|
int draggingIndex = _indexOfKey(item);
|
||||||
|
int newPositionIndex = _indexOfKey(newPosition);
|
||||||
|
|
||||||
|
final draggedItem = renderItems[draggingIndex];
|
||||||
|
|
||||||
|
final List<HomeTopItems> reorderedItems = reorderEnumItems(draggingIndex, newPositionIndex);
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
renderItems.removeAt(draggingIndex);
|
||||||
|
renderItems.insert(newPositionIndex, draggedItem);
|
||||||
|
homeTopItemsList = reorderedItems;
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _reorderDone(Key item) {
|
||||||
|
renderItems[_indexOfKey(item)];
|
||||||
|
setState(() => persistHomeTopItemsList = homeTopItemsList);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<HomeTopItems> reorderEnumItems(int oldIndex, int newIndex) {
|
||||||
|
final List<HomeTopItems> list = [...homeTopItemsList];
|
||||||
|
final HomeTopItems item = list.removeAt(oldIndex);
|
||||||
|
list.insert(newIndex, item);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||||
|
homeTopItemsList = appConfigProvider.homeTopItemsOrder;
|
||||||
|
persistHomeTopItemsList = appConfigProvider.homeTopItemsOrder;
|
||||||
|
renderItems = appConfigProvider.homeTopItemsOrder.asMap().entries.map(
|
||||||
|
(e) => ItemData(
|
||||||
|
key: ValueKey(e.key),
|
||||||
|
title: e.value,
|
||||||
|
)
|
||||||
|
).toList();
|
||||||
|
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
|
Widget tile(HomeTopItems title) {
|
||||||
|
switch (title) {
|
||||||
|
case HomeTopItems.queriedDomains:
|
||||||
|
return CustomListTile(
|
||||||
|
title: AppLocalizations.of(context)!.topQueriedDomains,
|
||||||
|
icon: Icons.install_desktop_outlined,
|
||||||
|
padding: const EdgeInsets.all(16)
|
||||||
|
);
|
||||||
|
|
||||||
|
case HomeTopItems.blockedDomains:
|
||||||
|
return CustomListTile(
|
||||||
|
title: AppLocalizations.of(context)!.topBlockedDomains,
|
||||||
|
icon: Icons.block_rounded,
|
||||||
|
padding: const EdgeInsets.all(16)
|
||||||
|
);
|
||||||
|
|
||||||
|
case HomeTopItems.recurrentClients:
|
||||||
|
return CustomListTile(
|
||||||
|
title: AppLocalizations.of(context)!.topClients,
|
||||||
|
icon: Icons.smartphone_rounded,
|
||||||
|
padding: const EdgeInsets.all(16)
|
||||||
|
);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> onWillPopScope() async {
|
||||||
|
if (!listEquals(appConfigProvider.homeTopItemsOrder, persistHomeTopItemsList)) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (dialogContext) => AlertDialog(
|
||||||
|
title: Text(AppLocalizations.of(context)!.discardChanges),
|
||||||
|
content: Text(AppLocalizations.of(context)!.discardChangesDescription),
|
||||||
|
actions: [
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(dialogContext);
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: Text(AppLocalizations.of(context)!.confirm)
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(dialogContext),
|
||||||
|
child: Text(AppLocalizations.of(context)!.cancel)
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveSettings() async {
|
||||||
|
final result = await appConfigProvider.setHomeTopItemsOrder(homeTopItemsList);
|
||||||
|
if (result == true) {
|
||||||
|
showSnacbkar(
|
||||||
|
appConfigProvider: appConfigProvider,
|
||||||
|
label: AppLocalizations.of(context)!.settingsSaved,
|
||||||
|
color: Colors.green
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
showSnacbkar(
|
||||||
|
appConfigProvider: appConfigProvider,
|
||||||
|
label: AppLocalizations.of(context)!.settingsNotSaved,
|
||||||
|
color: Colors.red
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return WillPopScope(
|
||||||
|
onWillPop: onWillPopScope,
|
||||||
|
child: Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
title: Text(AppLocalizations.of(context)!.topItemsOrder),
|
||||||
|
actions: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: !listEquals(appConfigProvider.homeTopItemsOrder, persistHomeTopItemsList)
|
||||||
|
? () => saveSettings()
|
||||||
|
: null,
|
||||||
|
icon: const Icon(Icons.save_rounded),
|
||||||
|
tooltip: AppLocalizations.of(context)!.save,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
Card(
|
||||||
|
margin: const EdgeInsets.all(16),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.info_rounded,
|
||||||
|
color: Theme.of(context).colorScheme.onSurfaceVariant,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 16),
|
||||||
|
Flexible(
|
||||||
|
child: Text(AppLocalizations.of(context)!.topItemsReorderInfo)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: reorderable_list_library.ReorderableList(
|
||||||
|
onReorder: _reorderCallback,
|
||||||
|
onReorderDone: _reorderDone,
|
||||||
|
child: ListView.builder(
|
||||||
|
itemBuilder: (context, index) => reorderable_list_library.ReorderableItem(
|
||||||
|
key: renderItems[index].key,
|
||||||
|
childBuilder: (context, state) => Item(
|
||||||
|
tileWidget: tile(renderItems[index].title),
|
||||||
|
isFirst: index == 0,
|
||||||
|
isLast: index == renderItems.length - 1,
|
||||||
|
state: state
|
||||||
|
),
|
||||||
|
),
|
||||||
|
itemCount: renderItems.length,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Item extends StatelessWidget {
|
||||||
|
final Widget tileWidget;
|
||||||
|
final bool isFirst;
|
||||||
|
final bool isLast;
|
||||||
|
final reorderable_list_library.ReorderableItemState state;
|
||||||
|
|
||||||
|
const Item({
|
||||||
|
Key? key,
|
||||||
|
required this.tileWidget,
|
||||||
|
required this.isFirst,
|
||||||
|
required this.isLast,
|
||||||
|
required this.state,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
BoxDecoration decoration;
|
||||||
|
|
||||||
|
if (
|
||||||
|
state == reorderable_list_library.ReorderableItemState.dragProxy ||
|
||||||
|
state == reorderable_list_library.ReorderableItemState.dragProxyFinished
|
||||||
|
) {
|
||||||
|
decoration = BoxDecoration(
|
||||||
|
color: Theme.of(context).colorScheme.surface.withOpacity(0.7)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bool placeholder = state == reorderable_list_library.ReorderableItemState.placeholder;
|
||||||
|
decoration = BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
top: isFirst && !placeholder ? BorderSide(
|
||||||
|
width: 1,
|
||||||
|
color: Theme.of(context).colorScheme.primary.withOpacity(0.1)
|
||||||
|
) : BorderSide.none,
|
||||||
|
bottom: isLast && placeholder ? BorderSide.none : BorderSide(
|
||||||
|
width: 1,
|
||||||
|
color: Theme.of(context).colorScheme.primary.withOpacity(0.1)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reorderable_list_library.DelayedReorderableListener(
|
||||||
|
child: Container(
|
||||||
|
decoration: decoration,
|
||||||
|
child: SafeArea(
|
||||||
|
top: false,
|
||||||
|
bottom: false,
|
||||||
|
child: Opacity(
|
||||||
|
opacity: state == reorderable_list_library.ReorderableItemState.placeholder ? 0.0 : 1.0,
|
||||||
|
child: IntrinsicHeight(
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: tileWidget
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,7 +17,7 @@ import 'package:adguard_home_manager/screens/settings/dns/dns.dart';
|
||||||
import 'package:adguard_home_manager/screens/settings/dns_rewrites/dns_rewrites.dart';
|
import 'package:adguard_home_manager/screens/settings/dns_rewrites/dns_rewrites.dart';
|
||||||
import 'package:adguard_home_manager/screens/servers/servers.dart';
|
import 'package:adguard_home_manager/screens/servers/servers.dart';
|
||||||
import 'package:adguard_home_manager/screens/settings/advanced_setings.dart';
|
import 'package:adguard_home_manager/screens/settings/advanced_setings.dart';
|
||||||
import 'package:adguard_home_manager/screens/settings/general_settings.dart';
|
import 'package:adguard_home_manager/screens/settings/general_settings/general_settings.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/widgets/custom_settings_tile.dart';
|
import 'package:adguard_home_manager/widgets/custom_settings_tile.dart';
|
||||||
import 'package:adguard_home_manager/widgets/section_label.dart';
|
import 'package:adguard_home_manager/widgets/section_label.dart';
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import 'package:sqflite/sqflite.dart';
|
import 'package:sqflite/sqflite.dart';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
|
||||||
|
|
||||||
Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
List<Map<String, Object?>>? servers;
|
List<Map<String, Object?>>? servers;
|
||||||
List<Map<String, Object?>>? appConfig;
|
List<Map<String, Object?>>? appConfig;
|
||||||
|
@ -102,13 +104,25 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future upgradeDbToV9(Database db) async {
|
||||||
|
await db.execute("ALTER TABLE appConfig ADD COLUMN hideServerAddress NUMERIC");
|
||||||
|
await db.execute("ALTER TABLE appConfig ADD COLUMN homeTopItemsOrder TEXT");
|
||||||
|
await db.execute("UPDATE appConfig SET hideServerAddress = 0, homeTopItemsOrder = '$homeTopItemsDefaultOrderString'");
|
||||||
|
|
||||||
|
await db.transaction((txn) async{
|
||||||
|
await txn.rawQuery(
|
||||||
|
'SELECT * FROM appConfig',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Database db = await openDatabase(
|
Database db = await openDatabase(
|
||||||
'adguard_home_manager.db',
|
'adguard_home_manager.db',
|
||||||
version: 8,
|
version: 9,
|
||||||
onCreate: (Database db, int version) async {
|
onCreate: (Database db, int version) async {
|
||||||
await db.execute("CREATE TABLE servers (id TEXT PRIMARY KEY, name TEXT, connectionMethod TEXT, domain TEXT, path TEXT, port INTEGER, user TEXT, password TEXT, defaultServer INTEGER, authToken TEXT, runningOnHa INTEGER)");
|
await db.execute("CREATE TABLE servers (id TEXT PRIMARY KEY, name TEXT, connectionMethod TEXT, domain TEXT, path TEXT, port INTEGER, user TEXT, password TEXT, defaultServer INTEGER, authToken TEXT, runningOnHa INTEGER)");
|
||||||
await db.execute("CREATE TABLE appConfig (theme NUMERIC, overrideSslCheck NUMERIC, hideZeroValues NUMERIC, useDynamicColor NUMERIC, staticColor NUMERIC, useThemeColorForStatus NUMERIC, showTimeLogs NUMERIC, showIpLogs NUMERIC, combinedChart NUMERIC, doNotRememberVersion TEXT)");
|
await db.execute("CREATE TABLE appConfig (theme NUMERIC, overrideSslCheck NUMERIC, hideZeroValues NUMERIC, useDynamicColor NUMERIC, staticColor NUMERIC, useThemeColorForStatus NUMERIC, showTimeLogs NUMERIC, showIpLogs NUMERIC, combinedChart NUMERIC, doNotRememberVersion TEXT, hideServerAddress NUMERIC, homeTopItemsOrder TEXT)");
|
||||||
await db.execute("INSERT INTO appConfig (theme, overrideSslCheck, hideZeroValues, useDynamicColor, staticColor, useThemeColorForStatus, showTimeLogs, showIpLogs, combinedChart) VALUES (0, 0, 0, ${acceptsDynamicTheme == true ? 1 : 0}, 0, 0, 0, 0, 0)");
|
await db.execute("INSERT INTO appConfig (theme, overrideSslCheck, hideZeroValues, useDynamicColor, staticColor, useThemeColorForStatus, showTimeLogs, showIpLogs, combinedChart, hideServerAddress, homeTopItemsOrder) VALUES (0, 0, 0, ${acceptsDynamicTheme == true ? 1 : 0}, 0, 0, 0, 0, 0, 0, $homeTopItemsDefaultOrderString)");
|
||||||
},
|
},
|
||||||
onUpgrade: (Database db, int oldVersion, int newVersion) async {
|
onUpgrade: (Database db, int oldVersion, int newVersion) async {
|
||||||
if (oldVersion == 1) {
|
if (oldVersion == 1) {
|
||||||
|
@ -119,6 +133,7 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
await upgradeDbToV6(db);
|
await upgradeDbToV6(db);
|
||||||
await upgradeDbToV7(db);
|
await upgradeDbToV7(db);
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
if (oldVersion == 2) {
|
if (oldVersion == 2) {
|
||||||
await upgradeDbToV3(db);
|
await upgradeDbToV3(db);
|
||||||
|
@ -127,6 +142,7 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
await upgradeDbToV6(db);
|
await upgradeDbToV6(db);
|
||||||
await upgradeDbToV7(db);
|
await upgradeDbToV7(db);
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
if (oldVersion == 3) {
|
if (oldVersion == 3) {
|
||||||
await upgradeDbToV4(db);
|
await upgradeDbToV4(db);
|
||||||
|
@ -134,24 +150,32 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
await upgradeDbToV6(db);
|
await upgradeDbToV6(db);
|
||||||
await upgradeDbToV7(db);
|
await upgradeDbToV7(db);
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
if (oldVersion == 4) {
|
if (oldVersion == 4) {
|
||||||
await upgradeDbToV5(db);
|
await upgradeDbToV5(db);
|
||||||
await upgradeDbToV6(db);
|
await upgradeDbToV6(db);
|
||||||
await upgradeDbToV7(db);
|
await upgradeDbToV7(db);
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
if (oldVersion == 5) {
|
if (oldVersion == 5) {
|
||||||
await upgradeDbToV6(db);
|
await upgradeDbToV6(db);
|
||||||
await upgradeDbToV7(db);
|
await upgradeDbToV7(db);
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
if (oldVersion == 6) {
|
if (oldVersion == 6) {
|
||||||
await upgradeDbToV7(db);
|
await upgradeDbToV7(db);
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
if (oldVersion == 7) {
|
if (oldVersion == 7) {
|
||||||
await upgradeDbToV8(db);
|
await upgradeDbToV8(db);
|
||||||
|
await upgradeDbToV9(db);
|
||||||
|
}
|
||||||
|
if (oldVersion == 8) {
|
||||||
|
await upgradeDbToV9(db);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onOpen: (Database db) async {
|
onOpen: (Database db) async {
|
||||||
|
|
|
@ -85,6 +85,7 @@ class CustomCombinedLineChart extends StatelessWidget {
|
||||||
lineTouchData: LineTouchData(
|
lineTouchData: LineTouchData(
|
||||||
enabled: true,
|
enabled: true,
|
||||||
touchTooltipData: LineTouchTooltipData(
|
touchTooltipData: LineTouchTooltipData(
|
||||||
|
fitInsideHorizontally: true,
|
||||||
tooltipBgColor: selectedTheme == ThemeMode.light
|
tooltipBgColor: selectedTheme == ThemeMode.light
|
||||||
? const Color.fromRGBO(220, 220, 220, 0.9)
|
? const Color.fromRGBO(220, 220, 220, 0.9)
|
||||||
: const Color.fromRGBO(35, 35, 35, 0.9),
|
: const Color.fromRGBO(35, 35, 35, 0.9),
|
||||||
|
|
|
@ -90,6 +90,7 @@ class CustomLineChart extends StatelessWidget {
|
||||||
lineTouchData: LineTouchData(
|
lineTouchData: LineTouchData(
|
||||||
enabled: true,
|
enabled: true,
|
||||||
touchTooltipData: LineTouchTooltipData(
|
touchTooltipData: LineTouchTooltipData(
|
||||||
|
fitInsideHorizontally: true,
|
||||||
tooltipBgColor: selectedTheme == ThemeMode.light
|
tooltipBgColor: selectedTheme == ThemeMode.light
|
||||||
? const Color.fromRGBO(220, 220, 220, 0.9)
|
? const Color.fromRGBO(220, 220, 220, 0.9)
|
||||||
: const Color.fromRGBO(35, 35, 35, 0.9),
|
: const Color.fromRGBO(35, 35, 35, 0.9),
|
||||||
|
|
|
@ -19,18 +19,18 @@ PODS:
|
||||||
- sqflite (0.0.2):
|
- sqflite (0.0.2):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- FMDB (>= 2.7.5)
|
- FMDB (>= 2.7.5)
|
||||||
- sqlite3 (3.41.2):
|
- sqlite3 (3.43.0):
|
||||||
- sqlite3/common (= 3.41.2)
|
- sqlite3/common (= 3.43.0)
|
||||||
- sqlite3/common (3.41.2)
|
- sqlite3/common (3.43.0)
|
||||||
- sqlite3/fts5 (3.41.2):
|
- sqlite3/fts5 (3.43.0):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/perf-threadsafe (3.41.2):
|
- sqlite3/perf-threadsafe (3.43.0):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/rtree (3.41.2):
|
- sqlite3/rtree (3.43.0):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3_flutter_libs (0.0.1):
|
- sqlite3_flutter_libs (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (~> 3.41.2)
|
- sqlite3 (~> 3.43.0)
|
||||||
- sqlite3/fts5
|
- sqlite3/fts5
|
||||||
- sqlite3/perf-threadsafe
|
- sqlite3/perf-threadsafe
|
||||||
- sqlite3/rtree
|
- sqlite3/rtree
|
||||||
|
@ -87,9 +87,9 @@ SPEC CHECKSUMS:
|
||||||
sentry_flutter: 8f0ffd53088e6a4d50c095852c5cad9e4405025c
|
sentry_flutter: 8f0ffd53088e6a4d50c095852c5cad9e4405025c
|
||||||
SentryPrivate: 5e3683390f66611fc7c6215e27645873adb55d13
|
SentryPrivate: 5e3683390f66611fc7c6215e27645873adb55d13
|
||||||
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
|
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
|
||||||
sqlite3: fd89671d969f3e73efe503ce203e28b016b58f68
|
sqlite3: 7afcf055d3700254769a4dcba56f27d26b5515c9
|
||||||
sqlite3_flutter_libs: 00a50503d69f7ab0fe85a5ff25b33082f4df4ce9
|
sqlite3_flutter_libs: 03613b0558ba0bb5544aa3ba3d0862c09c7a19b3
|
||||||
url_launcher_macos: 5335912b679c073563f29d89d33d10d459f95451
|
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
|
||||||
window_size: 339dafa0b27a95a62a843042038fa6c3c48de195
|
window_size: 339dafa0b27a95a62a843042038fa6c3c48de195
|
||||||
|
|
||||||
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
|
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
|
||||||
|
|
|
@ -202,7 +202,7 @@
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0920;
|
LastSwiftUpdateCheck = 0920;
|
||||||
LastUpgradeCheck = 1300;
|
LastUpgradeCheck = 1430;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
33CC10EC2044A3C60003C045 = {
|
33CC10EC2044A3C60003C045 = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1300"
|
LastUpgradeVersion = "1430"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|
188
pubspec.lock
188
pubspec.lock
|
@ -13,26 +13,26 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: animations
|
name: animations
|
||||||
sha256: fe8a6bdca435f718bb1dc8a11661b2c22504c6da40ef934cee8327ed77934164
|
sha256: ef57563eed3620bd5d75ad96189846aca1e033c0c45fc9a7d26e80ab02b88a70
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.7"
|
version: "2.0.8"
|
||||||
archive:
|
archive:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: archive
|
name: archive
|
||||||
sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a"
|
sha256: "49b1fad315e57ab0bbc15bcbb874e83116a1d78f77ebd500a4af6c9407d6b28e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.7"
|
version: "3.3.8"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: args
|
name: args
|
||||||
sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a
|
sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.1"
|
version: "2.4.2"
|
||||||
async:
|
async:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -85,10 +85,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
|
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.17.1"
|
version: "1.17.2"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -117,26 +117,26 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: csslib
|
name: csslib
|
||||||
sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745
|
sha256: "831883fb353c8bdc1d71979e5b342c7d88acfbc643113c14ae51e2442ea0f20f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.17.2"
|
version: "0.17.3"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
|
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.6"
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: device_info_plus
|
name: device_info_plus
|
||||||
sha256: "499c61743e13909c13374a8c209075385858c614b9c0f2487b5f9995eeaf7369"
|
sha256: "86add5ef97215562d2e090535b0a16f197902b10c369c558a100e74ea06e8659"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.0.1"
|
version: "9.0.3"
|
||||||
device_info_plus_platform_interface:
|
device_info_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -149,10 +149,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dynamic_color
|
name: dynamic_color
|
||||||
sha256: "74dff1435a695887ca64899b8990004f8d1232b0e84bfc4faa1fdda7c6f57cc1"
|
sha256: de4798a7069121aee12d5895315680258415de9b00e717723a1bd73d58f0126d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.5"
|
version: "1.6.6"
|
||||||
equatable:
|
equatable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -181,18 +181,18 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: ffi
|
name: ffi
|
||||||
sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99
|
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.2"
|
version: "2.1.0"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file
|
name: file
|
||||||
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
|
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.4"
|
version: "7.0.0"
|
||||||
fl_chart:
|
fl_chart:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -218,18 +218,18 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_dotenv
|
name: flutter_dotenv
|
||||||
sha256: d9283d92059a22e9834bc0a31336658ffba77089fb6f3cc36751f1fc7c6661a3
|
sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.2"
|
version: "5.1.0"
|
||||||
flutter_html:
|
flutter_html:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_html
|
name: flutter_html
|
||||||
sha256: "850c07bc6c1ed060d3eb3e88469a598260a13eb45d8978b197c1348e0a2b101f"
|
sha256: "02ad69e813ecfc0728a455e4bf892b9379983e050722b1dce00192ee2e41d1ee"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0-beta.1"
|
version: "3.0.0-beta.2"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
@ -242,10 +242,10 @@ packages:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_lints
|
name: flutter_lints
|
||||||
sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
|
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.3"
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -255,18 +255,26 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: "7b25c10de1fea883f3c4f9b8389506b54053cd00807beab69fd65c8653a2711f"
|
sha256: d4a1cb250c4e059586af0235f32e02882860a508e189b61f2b31b8810c1e1330
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.14"
|
version: "0.6.17+2"
|
||||||
flutter_native_splash:
|
flutter_native_splash:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_native_splash
|
name: flutter_native_splash
|
||||||
sha256: "02df24aec455c26428dadc637f20d4c548bda23ee2179479a8e8c39f1ecb75b3"
|
sha256: ecff62b3b893f2f665de7e4ad3de89f738941fcfcaaba8ee601e749efafa4698
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.0"
|
version: "2.3.2"
|
||||||
|
flutter_reorderable_list:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_reorderable_list
|
||||||
|
sha256: "0400ef34fa00b7cac69f71efc92d7e49727f425bc1080180ebe70bf47618afe0"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.1"
|
||||||
flutter_split_view:
|
flutter_split_view:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -306,18 +314,18 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: html
|
name: html
|
||||||
sha256: "58e3491f7bf0b6a4ea5110c0c688877460d1a6366731155c4a4580e7ded773e8"
|
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.15.3"
|
version: "0.15.4"
|
||||||
http:
|
http:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: http
|
name: http
|
||||||
sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2"
|
sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.13.6"
|
version: "1.1.0"
|
||||||
http_parser:
|
http_parser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -338,10 +346,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: intl
|
name: intl
|
||||||
sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6
|
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.18.0"
|
version: "0.18.1"
|
||||||
js:
|
js:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -362,10 +370,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
sha256: "6b0206b0bf4f04961fc5438198ccb3a885685cd67d4d4a32cc20ad7f8adbe015"
|
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.1"
|
||||||
list_counter:
|
list_counter:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -378,26 +386,26 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: markdown
|
name: markdown
|
||||||
sha256: "8e332924094383133cee218b676871f42db2514f1f6ac617b6cf6152a7faab8e"
|
sha256: acf35edccc0463a9d7384e437c015a3535772e09714cf60e07eeef3a15870dcd
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.1.0"
|
version: "7.1.1"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
|
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.15"
|
version: "0.12.16"
|
||||||
material_color_utilities:
|
material_color_utilities:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
|
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "0.5.0"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -418,10 +426,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: package_info_plus
|
name: package_info_plus
|
||||||
sha256: "28386bbe89ab5a7919a47cea99cdd1128e5a6e0bbd7eaafe20440ead84a15de3"
|
sha256: "6ff267fcd9d48cb61c8df74a82680e8b82e940231bb5f68356672fde0397334a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.1"
|
version: "4.1.0"
|
||||||
package_info_plus_platform_interface:
|
package_info_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -474,10 +482,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: plugin_platform_interface
|
name: plugin_platform_interface
|
||||||
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
|
sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.6"
|
||||||
pointycastle:
|
pointycastle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -519,50 +527,50 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
|
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.1"
|
version: "1.10.0"
|
||||||
sqflite:
|
sqflite:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqflite
|
name: sqflite
|
||||||
sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9
|
sha256: "591f1602816e9c31377d5f008c2d9ef7b8aca8941c3f89cc5fd9d84da0c38a9a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.8+4"
|
version: "2.3.0"
|
||||||
sqflite_common:
|
sqflite_common:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqflite_common
|
name: sqflite_common
|
||||||
sha256: e77abf6ff961d69dfef41daccbb66b51e9983cdd5cb35bf30733598057401555
|
sha256: "1b92f368f44b0dee2425bb861cfa17b6f6cf3961f762ff6f941d20b33355660a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.5"
|
version: "2.5.0"
|
||||||
sqflite_common_ffi:
|
sqflite_common_ffi:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqflite_common_ffi
|
name: sqflite_common_ffi
|
||||||
sha256: f86de82d37403af491b21920a696b19f01465b596f545d1acd4d29a0a72418ad
|
sha256: "0d5cc1be2eb18400ac6701c31211d44164393aa75886093002ecdd947be04f93"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.5"
|
version: "2.3.0+2"
|
||||||
sqlite3:
|
sqlite3:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqlite3
|
name: sqlite3
|
||||||
sha256: "2cef47b59d310e56f8275b13734ee80a9cf4a48a43172020cb55a620121fbf66"
|
sha256: db65233e6b99e99b2548932f55a987961bc06d82a31a0665451fa0b4fff4c3fb
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.1"
|
version: "2.1.0"
|
||||||
sqlite3_flutter_libs:
|
sqlite3_flutter_libs:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqlite3_flutter_libs
|
name: sqlite3_flutter_libs
|
||||||
sha256: "1e20a88d5c7ae8400e009f38ddbe8b001800a6dffa37832481a86a219bc904c7"
|
sha256: fb115050b0c2589afe2085a62d77f5deda4db65db20a5c65a6e0c92fda89b45e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.15"
|
version: "0.5.16"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -575,10 +583,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: store_checker
|
name: store_checker
|
||||||
sha256: "9a08c82715fc72b8ef3520b18be98715e95e623ca6dc9693451606c276062b63"
|
sha256: c9c1a93f11fa756fea23a2a08d7e54e84626a8d3c759cf49fc694a3a5afdc705
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.4.0"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -615,10 +623,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
|
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.1"
|
version: "0.6.0"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -631,74 +639,74 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: universal_io
|
name: universal_io
|
||||||
sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d"
|
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.2.2"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3
|
sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.11"
|
version: "6.1.14"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "1a5848f598acc5b7d8f7c18b8cb834ab667e59a13edc3c93e9d09cf38cc6bc87"
|
sha256: b04af59516ab45762b2ca6da40fa830d72d0f6045cd97744450b73493fa76330
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.34"
|
version: "6.1.0"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_ios
|
name: url_launcher_ios
|
||||||
sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2"
|
sha256: "7c65021d5dee51813d652357bc65b8dd4a6177082a9966bc8ba6ee477baa795f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.4"
|
version: "6.1.5"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_linux
|
name: url_launcher_linux
|
||||||
sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5"
|
sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.5"
|
version: "3.0.6"
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e"
|
sha256: b55486791f666e62e0e8ff825e58a023fd6b1f71c49926483f1128d3bbd8fe88
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.5"
|
version: "3.0.7"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_platform_interface
|
name: url_launcher_platform_interface
|
||||||
sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
|
sha256: "95465b39f83bfe95fcb9d174829d6476216f2d548b79c38ab2506e0458787618"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.5"
|
||||||
url_launcher_web:
|
url_launcher_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
|
sha256: "2942294a500b4fa0b918685aff406773ba0a4cd34b7f42198742a94083020ce5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.16"
|
version: "2.0.20"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_windows
|
name: url_launcher_windows
|
||||||
sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771"
|
sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.6"
|
version: "3.0.8"
|
||||||
uuid:
|
uuid:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -715,14 +723,22 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
|
web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web
|
||||||
|
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.4-beta"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "6ca3aaab1790eeb1f5cad232e33d9c53ba66e884dd3e7686c4e730bffc45f1a3"
|
sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.2"
|
version: "5.0.7"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -757,5 +773,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.0.0 <4.0.0"
|
dart: ">=3.1.0 <4.0.0"
|
||||||
flutter: ">=3.4.0-17.0.pre"
|
flutter: ">=3.13.0"
|
||||||
|
|
|
@ -40,7 +40,7 @@ dependencies:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
intl: any
|
intl: any
|
||||||
provider: ^6.0.3
|
provider: ^6.0.3
|
||||||
sqflite: ^2.2.5
|
sqflite: ^2.3.0
|
||||||
package_info_plus: ^4.0.1
|
package_info_plus: ^4.0.1
|
||||||
flutter_displaymode: ^0.6.0
|
flutter_displaymode: ^0.6.0
|
||||||
dynamic_color: ^1.6.5
|
dynamic_color: ^1.6.5
|
||||||
|
@ -57,8 +57,8 @@ dependencies:
|
||||||
markdown: ^7.0.2
|
markdown: ^7.0.2
|
||||||
html: ^0.15.2
|
html: ^0.15.2
|
||||||
flutter_html: ^3.0.0-alpha.6
|
flutter_html: ^3.0.0-alpha.6
|
||||||
sqlite3_flutter_libs: ^0.5.13
|
sqlite3_flutter_libs: ^0.5.16
|
||||||
sqflite_common_ffi: ^2.2.3
|
sqflite_common_ffi: ^2.3.0+2
|
||||||
window_size:
|
window_size:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/google/flutter-desktop-embedding
|
url: https://github.com/google/flutter-desktop-embedding
|
||||||
|
@ -72,6 +72,7 @@ dependencies:
|
||||||
async: ^2.10.0
|
async: ^2.10.0
|
||||||
sentry_flutter: ^7.9.0
|
sentry_flutter: ^7.9.0
|
||||||
flutter_dotenv: ^5.0.2
|
flutter_dotenv: ^5.0.2
|
||||||
|
flutter_reorderable_list: ^1.3.1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
Loading…
Add table
Reference in a new issue