This commit is contained in:
Thibault Deckers 2023-03-24 18:26:05 +01:00
parent e8893f7f07
commit ad3edf4458
35 changed files with 334 additions and 326 deletions

View file

@ -1,4 +1,4 @@
import 'package:aves/utils/emoji_utils.dart'; import 'package:aves/ref/unicode.dart';
import 'package:country_code/country_code.dart'; import 'package:country_code/country_code.dart';
class GeoStates { class GeoStates {
@ -15,73 +15,73 @@ class GeoStates {
}; };
static const _australiaEnglish = { static const _australiaEnglish = {
'Australian Capital Territory': StateCodes.auAustralianCapitalTerritory, 'Australian Capital Territory': EmojiStateCodes.auAustralianCapitalTerritory,
'New South Wales': StateCodes.auNewSouthWales, 'New South Wales': EmojiStateCodes.auNewSouthWales,
'Northern Territory': StateCodes.auNorthernTerritory, 'Northern Territory': EmojiStateCodes.auNorthernTerritory,
'Queensland': StateCodes.auQueensland, 'Queensland': EmojiStateCodes.auQueensland,
'South Australia': StateCodes.auSouthAustralia, 'South Australia': EmojiStateCodes.auSouthAustralia,
'Tasmania': StateCodes.auTasmania, 'Tasmania': EmojiStateCodes.auTasmania,
'Victoria': StateCodes.auVictoria, 'Victoria': EmojiStateCodes.auVictoria,
'Western Australia': StateCodes.auWesternAustralia, 'Western Australia': EmojiStateCodes.auWesternAustralia,
}; };
static const _unitedKingdomEnglish = { static const _unitedKingdomEnglish = {
'England': StateCodes.gbEngland, 'England': EmojiStateCodes.gbEngland,
'Northern Ireland': StateCodes.gbNorthernIreland, 'Northern Ireland': EmojiStateCodes.gbNorthernIreland,
'Scotland': StateCodes.gbScotland, 'Scotland': EmojiStateCodes.gbScotland,
'Wales': StateCodes.gbWales, 'Wales': EmojiStateCodes.gbWales,
}; };
static const _unitedStatesEnglish = { static const _unitedStatesEnglish = {
'Alabama': StateCodes.usAlabama, 'Alabama': EmojiStateCodes.usAlabama,
'Alaska': StateCodes.usAlaska, 'Alaska': EmojiStateCodes.usAlaska,
'Arizona': StateCodes.usArizona, 'Arizona': EmojiStateCodes.usArizona,
'Arkansas': StateCodes.usArkansas, 'Arkansas': EmojiStateCodes.usArkansas,
'California': StateCodes.usCalifornia, 'California': EmojiStateCodes.usCalifornia,
'Colorado': StateCodes.usColorado, 'Colorado': EmojiStateCodes.usColorado,
'Connecticut': StateCodes.usConnecticut, 'Connecticut': EmojiStateCodes.usConnecticut,
'Delaware': StateCodes.usDelaware, 'Delaware': EmojiStateCodes.usDelaware,
'Florida': StateCodes.usFlorida, 'Florida': EmojiStateCodes.usFlorida,
'Georgia': StateCodes.usGeorgia, 'Georgia': EmojiStateCodes.usGeorgia,
'Hawaii': StateCodes.usHawaii, 'Hawaii': EmojiStateCodes.usHawaii,
'Idaho': StateCodes.usIdaho, 'Idaho': EmojiStateCodes.usIdaho,
'Illinois': StateCodes.usIllinois, 'Illinois': EmojiStateCodes.usIllinois,
'Indiana': StateCodes.usIndiana, 'Indiana': EmojiStateCodes.usIndiana,
'Iowa': StateCodes.usIowa, 'Iowa': EmojiStateCodes.usIowa,
'Kansas': StateCodes.usKansas, 'Kansas': EmojiStateCodes.usKansas,
'Kentucky': StateCodes.usKentucky, 'Kentucky': EmojiStateCodes.usKentucky,
'Louisiana': StateCodes.usLouisiana, 'Louisiana': EmojiStateCodes.usLouisiana,
'Maine': StateCodes.usMaine, 'Maine': EmojiStateCodes.usMaine,
'Maryland': StateCodes.usMaryland, 'Maryland': EmojiStateCodes.usMaryland,
'Massachusetts': StateCodes.usMassachusetts, 'Massachusetts': EmojiStateCodes.usMassachusetts,
'Michigan': StateCodes.usMichigan, 'Michigan': EmojiStateCodes.usMichigan,
'Minnesota': StateCodes.usMinnesota, 'Minnesota': EmojiStateCodes.usMinnesota,
'Mississippi': StateCodes.usMississippi, 'Mississippi': EmojiStateCodes.usMississippi,
'Missouri': StateCodes.usMissouri, 'Missouri': EmojiStateCodes.usMissouri,
'Montana': StateCodes.usMontana, 'Montana': EmojiStateCodes.usMontana,
'Nebraska': StateCodes.usNebraska, 'Nebraska': EmojiStateCodes.usNebraska,
'Nevada': StateCodes.usNevada, 'Nevada': EmojiStateCodes.usNevada,
'New Hampshire': StateCodes.usNewHampshire, 'New Hampshire': EmojiStateCodes.usNewHampshire,
'New Jersey': StateCodes.usNewJersey, 'New Jersey': EmojiStateCodes.usNewJersey,
'New Mexico': StateCodes.usNewMexico, 'New Mexico': EmojiStateCodes.usNewMexico,
'New York': StateCodes.usNewYork, 'New York': EmojiStateCodes.usNewYork,
'North Carolina': StateCodes.usNorthCarolina, 'North Carolina': EmojiStateCodes.usNorthCarolina,
'North Dakota': StateCodes.usNorthDakota, 'North Dakota': EmojiStateCodes.usNorthDakota,
'Ohio': StateCodes.usOhio, 'Ohio': EmojiStateCodes.usOhio,
'Oklahoma': StateCodes.usOklahoma, 'Oklahoma': EmojiStateCodes.usOklahoma,
'Oregon': StateCodes.usOregon, 'Oregon': EmojiStateCodes.usOregon,
'Pennsylvania': StateCodes.usPennsylvania, 'Pennsylvania': EmojiStateCodes.usPennsylvania,
'Rhode Island': StateCodes.usRhodeIsland, 'Rhode Island': EmojiStateCodes.usRhodeIsland,
'South Carolina': StateCodes.usSouthCarolina, 'South Carolina': EmojiStateCodes.usSouthCarolina,
'South Dakota': StateCodes.usSouthDakota, 'South Dakota': EmojiStateCodes.usSouthDakota,
'Tennessee': StateCodes.usTennessee, 'Tennessee': EmojiStateCodes.usTennessee,
'Utah': StateCodes.usUtah, 'Utah': EmojiStateCodes.usUtah,
'Vermont': StateCodes.usVermont, 'Vermont': EmojiStateCodes.usVermont,
'Virginia': StateCodes.usVirginia, 'Virginia': EmojiStateCodes.usVirginia,
'Washington': StateCodes.usWashington, 'Washington': EmojiStateCodes.usWashington,
'Washington DC': StateCodes.usWashingtonDC, 'Washington DC': EmojiStateCodes.usWashingtonDC,
'West Virginia': StateCodes.usWestVirginia, 'West Virginia': EmojiStateCodes.usWestVirginia,
'Wisconsin': StateCodes.usWisconsin, 'Wisconsin': EmojiStateCodes.usWisconsin,
'Wyoming': StateCodes.usWyoming, 'Wyoming': EmojiStateCodes.usWyoming,
}; };
} }

View file

@ -0,0 +1,60 @@
class Contributors {
static const translators = {
Contributor('D3ZOXY', 'its.ghost.message@gmail.com'),
Contributor('JanWaldhorn', 'weblate@jwh.anonaddy.com'),
Contributor('n-berenice', null),
Contributor('Jonatas de Almeida Barros', 'ajonatas56@gmail.com'),
Contributor('MeFinity', 'me.dot.finity@gmail.com'),
Contributor('Maki', null),
Contributor('HiSubway', 'shenyusoftware@gmail.com'),
Contributor('glemco', 'glemco@posteo.net'),
Contributor('Aerowolf', null),
Contributor('小默', 'duzhe163908@gmail.com'),
Contributor('metezd', 'itoldyouthat@protonmail.com'),
Contributor('Martijn Fabrie', null),
Contributor('Koen Koppens', 'koenkoppens@proton.me'),
Contributor('Emmanouil Papavergis', null),
Contributor('kha84', 'khalukhin@gmail.com'),
Contributor('gallegonovato', 'fran-carro@hotmail.es'),
Contributor('Havokdan', 'havokdan@yahoo.com.br'),
Contributor('Jean Mareilles', 'waged1266@tutanota.com'),
Contributor('이정희', 'daemul72@gmail.com'),
Contributor('Translator-3000', 'weblate.m1d0h@8shield.net'),
Contributor('Ralea Adrian Vicențiu', 'ralea.adrian@gmail.com'),
Contributor('Igor Sorocean', 'sorocean.igor@gmail.com'),
Contributor('JY3', 'GeeyunJY3@gmail.com'),
Contributor('Gediminas Murauskas', 'muziejusinfo@gmail.com'),
Contributor('Oğuz Ersen', 'oguz@ersen.moe'),
Contributor('Allan Nordhøy', 'epost@anotheragency.no'),
Contributor('pemibe', 'pemibe4634@dmonies.com'),
Contributor('Linerly', 'linerly@protonmail.com'),
Contributor('Skrripy', 'rozihrash.ya6w7@simplelogin.com'),
Contributor('vesp', 'vesp@post.cz'),
Contributor('Dan', 'denqwerta@gmail.com'),
Contributor('Tijolinho', 'pedrohenrique29.alfenas@gmail.com'),
Contributor('Piotr K', '1337.kelt@gmail.com'),
Contributor('rehork', 'cooky@e.email'),
Contributor('Eric', 'hamburger2048@users.noreply.hosted.weblate.org'),
Contributor('Aitor Salaberria', 'trslbrr@gmail.com'),
Contributor('Felipe Nogueira', 'contato.fnog@gmail.com'),
Contributor('kaajjo', 'claymanoff@gmail.com'),
Contributor('Eduardo Malaspina', 'vaio0@swismail.com'),
// Contributor('SAMIRAH AIL', 'samiratalzahrani@gmail.com'), // Arabic
// Contributor('Salih Ail', 'rrrfff444@gmail.com'), // Arabic
// Contributor('امیر جهانگرد', 'ijahangard.a@gmail.com'), // Persian
// Contributor('slasb37', 'p84haghi@gmail.com'), // Persian
// Contributor('tryvseu', 'tryvseu@tuta.io'), // Nynorsk
// Contributor('Nattapong K', 'mixer5056@gmail.com'), // Thai
// Contributor('Idj', 'joneltmp+goahn@gmail.com'), // Hebrew
// Contributor('Martin Frandel', 'martinko.fr@gmail.com'), // Slovak
// Contributor('GoRaN', 'gorangharib.909@gmail.com'), // Kurdish (Central)
// Contributor('Rohit Burman', 'rohitburman31p@rediffmail.com'), // Hindi
};
}
class Contributor {
final String name;
final String? weblateEmail;
const Contributor(this.name, this.weblateEmail);
}

View file

@ -0,0 +1,16 @@
import 'package:permission_handler/permission_handler.dart';
class Permissions {
static const storage = [
Permission.storage,
// for media access on Android >=13
Permission.photos,
Permission.videos,
];
static const mediaAccess = [
...storage,
// to access media with unredacted metadata with scoped storage (Android >=10)
Permission.accessMediaLocation,
];
}

View file

@ -96,9 +96,9 @@ extension ExtraAvesEntryProps on AvesEntry {
final gcd = width.gcd(height); final gcd = width.gcd(height);
final w = width ~/ gcd; final w = width ~/ gcd;
final h = height ~/ gcd; final h = height ~/ gcd;
return isRotated ? '$h${Unicode.ratio}$w' : '$w${Unicode.ratio}$h'; return isRotated ? '$h${UniChars.ratio}$w' : '$w${UniChars.ratio}$h';
} else { } else {
return '?${Unicode.ratio}?'; return '?${UniChars.ratio}?';
} }
} }

View file

@ -68,7 +68,7 @@ class RatingFilter extends CollectionFilter {
case 0: case 0:
return context.l10n.filterNoRatingLabel; return context.l10n.filterNoRatingLabel;
default: default:
return Unicode.whiteMediumStar * rating; return UniChars.whiteMediumStar * rating;
} }
} }
} }

View file

@ -1,5 +1,5 @@
// cf Flutter's `foundation/unicode.dart` for bidi related characters // cf Flutter's `foundation/unicode.dart` for bidi related characters
class Unicode { class UniChars {
static const noBreakSpace = '\u00A0'; static const noBreakSpace = '\u00A0';
static const multiplicationSign = '\u00D7'; // × static const multiplicationSign = '\u00D7'; // ×
static const emDash = '\u2014'; // static const emDash = '\u2014'; //
@ -7,3 +7,88 @@ class Unicode {
static const ratio = '\u2236'; // static const ratio = '\u2236'; //
static const whiteMediumStar = '\u2B50'; // static const whiteMediumStar = '\u2B50'; //
} }
class UniCodes {
// Block: Basic Latin
static const latinCapitalLetterA = 0x0041;
// Block: Enclosed Alphanumeric Supplement
static const regionalIndicatorSymbolLetterA = 0x1F1E6;
// Block: Miscellaneous Symbols and Pictographs
static const wavingBlackFlag = 0x1F3F4;
// Block: Tags
static const tagLatinSmallLetterA = 0xE0061;
static const cancelTag = 0xE007F;
}
class EmojiStateCodes {
// AU
static const auAustralianCapitalTerritory = 'auact';
static const auNewSouthWales = 'aunsw';
static const auNorthernTerritory = 'aunt';
static const auQueensland = 'auqld';
static const auSouthAustralia = 'ausa';
static const auTasmania = 'autas';
static const auVictoria = 'auvic';
static const auWesternAustralia = 'auwa';
// GB
static const gbEngland = 'gbeng';
static const gbNorthernIreland = 'gbnir';
static const gbScotland = 'gbsct';
static const gbWales = 'gbwls';
// US
static const usAlabama = 'usal';
static const usAlaska = 'usak';
static const usArizona = 'usaz';
static const usArkansas = 'usar';
static const usCalifornia = 'usca';
static const usColorado = 'usco';
static const usConnecticut = 'usct';
static const usDelaware = 'usde';
static const usFlorida = 'usfl';
static const usGeorgia = 'usga';
static const usHawaii = 'ushi';
static const usIdaho = 'usid';
static const usIllinois = 'usil';
static const usIndiana = 'usin';
static const usIowa = 'usia';
static const usKansas = 'usks';
static const usKentucky = 'usky';
static const usLouisiana = 'usla';
static const usMaine = 'usme';
static const usMaryland = 'usmd';
static const usMassachusetts = 'usma';
static const usMichigan = 'usmi';
static const usMinnesota = 'usmn';
static const usMississippi = 'usms';
static const usMissouri = 'usmo';
static const usMontana = 'usmt';
static const usNebraska = 'usne';
static const usNevada = 'usnv';
static const usNewHampshire = 'usnh';
static const usNewJersey = 'usnj';
static const usNewMexico = 'usnm';
static const usNewYork = 'usny';
static const usNorthCarolina = 'usnc';
static const usNorthDakota = 'usnd';
static const usOhio = 'usoh';
static const usOklahoma = 'usok';
static const usOregon = 'usor';
static const usPennsylvania = 'uspa';
static const usRhodeIsland = 'usri';
static const usSouthCarolina = 'ussc';
static const usSouthDakota = 'ussd';
static const usTennessee = 'ustn';
static const usUtah = 'usut';
static const usVermont = 'usvt';
static const usVirginia = 'usva';
static const usWashington = 'uswa';
static const usWashingtonDC = 'usdc';
static const usWestVirginia = 'uswv';
static const usWisconsin = 'uswi';
static const usWyoming = 'uswy';
}

View file

@ -7,6 +7,16 @@ import 'package:flutter/material.dart';
import 'package:palette_generator/palette_generator.dart'; import 'package:palette_generator/palette_generator.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class AColors {
static const starEnabled = Colors.amber;
static const starDisabled = Colors.grey;
static const boraBoraGradient = [
Color(0xff2bc0e4),
Color(0xffeaecc6),
];
}
class AvesColorsProvider extends StatelessWidget { class AvesColorsProvider extends StatelessWidget {
final Widget child; final Widget child;

View file

@ -1,6 +1,6 @@
import 'dart:ui'; import 'dart:ui';
import 'package:flutter/widgets.dart'; import 'package:flutter/material.dart';
class AStyles { class AStyles {
// as of Flutter v2.8.0, overflowing `Text` miscalculates height and some text (e.g. 'Å') is clipped // as of Flutter v2.8.0, overflowing `Text` miscalculates height and some text (e.g. 'Å') is clipped
@ -19,4 +19,11 @@ class AStyles {
final smcp = locale.languageCode != 'el'; final smcp = locale.languageCode != 'el';
unknownTitleText = smcp ? knownTitleText : knownTitleText.copyWith(fontFeatures: []); unknownTitleText = smcp ? knownTitleText : knownTitleText.copyWith(fontFeatures: []);
} }
static const embossShadows = [
Shadow(
color: Colors.black,
offset: Offset(0.5, 1.0),
)
];
} }

View file

@ -1,7 +1,7 @@
import 'package:aves/ref/unicode.dart'; import 'package:aves/ref/unicode.dart';
class AText { class AText {
static const separator = ' ${Unicode.bullet} '; static const separator = ' ${UniChars.bullet} ';
static const resolutionSeparator = ' ${Unicode.multiplicationSign} '; static const resolutionSeparator = ' ${UniChars.multiplicationSign} ';
static const valueNotAvailable = Unicode.emDash; static const valueNotAvailable = UniChars.emDash;
} }

View file

@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
class Constants {
static const storagePermissions = [
Permission.storage,
// for media access on Android >=13
Permission.photos,
Permission.videos,
];
static const double colorPickerRadius = 16;
static const embossShadows = [
Shadow(
color: Colors.black,
offset: Offset(0.5, 1.0),
)
];
static const boraBoraGradientColors = [
Color(0xff2bc0e4),
Color(0xffeaecc6),
];
static const int infoGroupMaxValueLength = 140;
}

View file

@ -1,15 +1,10 @@
import 'package:aves/ref/unicode.dart';
class EmojiUtils { class EmojiUtils {
// U+0041 Latin Capital letter A static const _countryCodeToFlagDiff = UniCodes.regionalIndicatorSymbolLetterA - UniCodes.latinCapitalLetterA;
static const _capitalLetterA = 0x0041; static const _stateCodeToFlagDiff = UniCodes.tagLatinSmallLetterA - UniCodes.latinCapitalLetterA;
static const _subFlagStart = UniCodes.wavingBlackFlag;
// U+1F1E6 Regional Indicator Symbol Letter A static const _subFlagEnd = UniCodes.cancelTag;
static const _countryCodeToFlagDiff = 0x1F1E6 - _capitalLetterA;
// U+E0061 Tag Latin Small Letter a
static const _stateCodeToFlagDiff = 0xE0061 - _capitalLetterA;
static const _blackFlag = 0x1F3F4;
static const _cancel = 0xE007F;
static String? countryCodeToFlag(String? code) { static String? countryCodeToFlag(String? code) {
if (code == null || code.length != 2) return null; if (code == null || code.length != 2) return null;
@ -18,76 +13,10 @@ class EmojiUtils {
static String? stateCodeToFlag(String? code) { static String? stateCodeToFlag(String? code) {
if (code == null) return null; if (code == null) return null;
return String.fromCharCodes([_blackFlag, ...code.toUpperCase().codeUnits.map((letter) => letter += _stateCodeToFlagDiff), _cancel]); return String.fromCharCodes([
_subFlagStart,
...code.toUpperCase().codeUnits.map((letter) => letter += _stateCodeToFlagDiff),
_subFlagEnd,
]);
} }
} }
class StateCodes {
// AU
static const auAustralianCapitalTerritory = 'auact';
static const auNewSouthWales = 'aunsw';
static const auNorthernTerritory = 'aunt';
static const auQueensland = 'auqld';
static const auSouthAustralia = 'ausa';
static const auTasmania = 'autas';
static const auVictoria = 'auvic';
static const auWesternAustralia = 'auwa';
// GB
static const gbEngland = 'gbeng';
static const gbNorthernIreland = 'gbnir';
static const gbScotland = 'gbsct';
static const gbWales = 'gbwls';
// US
static const usAlabama = 'usal';
static const usAlaska = 'usak';
static const usArizona = 'usaz';
static const usArkansas = 'usar';
static const usCalifornia = 'usca';
static const usColorado = 'usco';
static const usConnecticut = 'usct';
static const usDelaware = 'usde';
static const usFlorida = 'usfl';
static const usGeorgia = 'usga';
static const usHawaii = 'ushi';
static const usIdaho = 'usid';
static const usIllinois = 'usil';
static const usIndiana = 'usin';
static const usIowa = 'usia';
static const usKansas = 'usks';
static const usKentucky = 'usky';
static const usLouisiana = 'usla';
static const usMaine = 'usme';
static const usMaryland = 'usmd';
static const usMassachusetts = 'usma';
static const usMichigan = 'usmi';
static const usMinnesota = 'usmn';
static const usMississippi = 'usms';
static const usMissouri = 'usmo';
static const usMontana = 'usmt';
static const usNebraska = 'usne';
static const usNevada = 'usnv';
static const usNewHampshire = 'usnh';
static const usNewJersey = 'usnj';
static const usNewMexico = 'usnm';
static const usNewYork = 'usny';
static const usNorthCarolina = 'usnc';
static const usNorthDakota = 'usnd';
static const usOhio = 'usoh';
static const usOklahoma = 'usok';
static const usOregon = 'usor';
static const usPennsylvania = 'uspa';
static const usRhodeIsland = 'usri';
static const usSouthCarolina = 'ussc';
static const usSouthDakota = 'ussd';
static const usTennessee = 'ustn';
static const usUtah = 'usut';
static const usVermont = 'usvt';
static const usVirginia = 'usva';
static const usWashington = 'uswa';
static const usWashingtonDC = 'usdc';
static const usWestVirginia = 'uswv';
static const usWisconsin = 'uswi';
static const usWyoming = 'uswy';
}

View file

@ -2,7 +2,7 @@ import 'package:aves/app_flavor.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/ref/brand_colors.dart'; import 'package:aves/ref/brand_colors.dart';
import 'package:aves/theme/colors.dart'; import 'package:aves/theme/colors.dart';
import 'package:aves/model/dependencies.dart'; import 'package:aves/model/app/dependencies.dart';
import 'package:aves/widgets/about/title.dart'; import 'package:aves/widgets/about/title.dart';
import 'package:aves/widgets/about/tv_license_page.dart'; import 'package:aves/widgets/about/tv_license_page.dart';
import 'package:aves/widgets/common/basic/link_chip.dart'; import 'package:aves/widgets/common/basic/link_chip.dart';

View file

@ -1,5 +1,6 @@
import 'dart:math'; import 'dart:math';
import 'package:aves/model/app/contributors.dart';
import 'package:aves/theme/text.dart'; import 'package:aves/theme/text.dart';
import 'package:aves/widgets/about/title.dart'; import 'package:aves/widgets/about/title.dart';
import 'package:aves/widgets/common/basic/text/change_highlight.dart'; import 'package:aves/widgets/common/basic/text/change_highlight.dart';
@ -10,58 +11,6 @@ import 'package:flutter/material.dart';
class AboutTranslators extends StatelessWidget { class AboutTranslators extends StatelessWidget {
const AboutTranslators({super.key}); const AboutTranslators({super.key});
static const translators = {
Contributor('D3ZOXY', 'its.ghost.message@gmail.com'),
Contributor('JanWaldhorn', 'weblate@jwh.anonaddy.com'),
Contributor('n-berenice', null),
Contributor('Jonatas de Almeida Barros', 'ajonatas56@gmail.com'),
Contributor('MeFinity', 'me.dot.finity@gmail.com'),
Contributor('Maki', null),
Contributor('HiSubway', 'shenyusoftware@gmail.com'),
Contributor('glemco', 'glemco@posteo.net'),
Contributor('Aerowolf', null),
Contributor('小默', 'duzhe163908@gmail.com'),
Contributor('metezd', 'itoldyouthat@protonmail.com'),
Contributor('Martijn Fabrie', null),
Contributor('Koen Koppens', 'koenkoppens@proton.me'),
Contributor('Emmanouil Papavergis', null),
Contributor('kha84', 'khalukhin@gmail.com'),
Contributor('gallegonovato', 'fran-carro@hotmail.es'),
Contributor('Havokdan', 'havokdan@yahoo.com.br'),
Contributor('Jean Mareilles', 'waged1266@tutanota.com'),
Contributor('이정희', 'daemul72@gmail.com'),
Contributor('Translator-3000', 'weblate.m1d0h@8shield.net'),
Contributor('Ralea Adrian Vicențiu', 'ralea.adrian@gmail.com'),
Contributor('Igor Sorocean', 'sorocean.igor@gmail.com'),
Contributor('JY3', 'GeeyunJY3@gmail.com'),
Contributor('Gediminas Murauskas', 'muziejusinfo@gmail.com'),
Contributor('Oğuz Ersen', 'oguz@ersen.moe'),
Contributor('Allan Nordhøy', 'epost@anotheragency.no'),
Contributor('pemibe', 'pemibe4634@dmonies.com'),
Contributor('Linerly', 'linerly@protonmail.com'),
Contributor('Skrripy', 'rozihrash.ya6w7@simplelogin.com'),
Contributor('vesp', 'vesp@post.cz'),
Contributor('Dan', 'denqwerta@gmail.com'),
Contributor('Tijolinho', 'pedrohenrique29.alfenas@gmail.com'),
Contributor('Piotr K', '1337.kelt@gmail.com'),
Contributor('rehork', 'cooky@e.email'),
Contributor('Eric', 'hamburger2048@users.noreply.hosted.weblate.org'),
Contributor('Aitor Salaberria', 'trslbrr@gmail.com'),
Contributor('Felipe Nogueira', 'contato.fnog@gmail.com'),
Contributor('kaajjo', 'claymanoff@gmail.com'),
Contributor('Eduardo Malaspina', 'vaio0@swismail.com'),
// Contributor('SAMIRAH AIL', 'samiratalzahrani@gmail.com'), // Arabic
// Contributor('Salih Ail', 'rrrfff444@gmail.com'), // Arabic
// Contributor('امیر جهانگرد', 'ijahangard.a@gmail.com'), // Persian
// Contributor('slasb37', 'p84haghi@gmail.com'), // Persian
// Contributor('tryvseu', 'tryvseu@tuta.io'), // Nynorsk
// Contributor('Nattapong K', 'mixer5056@gmail.com'), // Thai
// Contributor('Idj', 'joneltmp+goahn@gmail.com'), // Hebrew
// Contributor('Martin Frandel', 'martinko.fr@gmail.com'), // Slovak
// Contributor('GoRaN', 'gorangharib.909@gmail.com'), // Kurdish (Central)
// Contributor('Rohit Burman', 'rohitburman31p@rediffmail.com'), // Hindi
};
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return Padding(
@ -72,7 +21,7 @@ class AboutTranslators extends StatelessWidget {
AboutSectionTitle(text: context.l10n.aboutTranslatorsSectionTitle), AboutSectionTitle(text: context.l10n.aboutTranslatorsSectionTitle),
const SizedBox(height: 8), const SizedBox(height: 8),
_RandomTextSpanHighlighter( _RandomTextSpanHighlighter(
spans: translators.map((v) => v.name).toList(), spans: Contributors.translators.map((v) => v.name).toList(),
color: Theme.of(context).colorScheme.onPrimary, color: Theme.of(context).colorScheme.onPrimary,
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
@ -163,10 +112,3 @@ class _RandomTextSpanHighlighterState extends State<_RandomTextSpanHighlighter>
); );
} }
} }
class Contributor {
final String name;
final String? weblateEmail;
const Contributor(this.name, this.weblateEmail);
}

View file

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:aves/app_mode.dart'; import 'package:aves/app_mode.dart';
import 'package:aves/model/app/permissions.dart';
import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/favourites.dart'; import 'package:aves/model/favourites.dart';
import 'package:aves/model/filters/favourite.dart'; import 'package:aves/model/filters/favourite.dart';
@ -14,7 +15,6 @@ import 'package:aves/model/source/section_keys.dart';
import 'package:aves/ref/mime_types.dart'; import 'package:aves/ref/mime_types.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/collection/app_bar.dart'; import 'package:aves/widgets/collection/app_bar.dart';
import 'package:aves/widgets/collection/draggable_thumb_label.dart'; import 'package:aves/widgets/collection/draggable_thumb_label.dart';
import 'package:aves/widgets/collection/grid/list_details_theme.dart'; import 'package:aves/widgets/collection/grid/list_details_theme.dart';
@ -716,5 +716,5 @@ class _CollectionScrollViewState extends State<_CollectionScrollView> with Widge
return crumbs; return crumbs;
} }
Future<bool> get _isStoragePermissionGranted => Future.wait(Constants.storagePermissions.map((v) => v.status)).then((v) => v.any((status) => status.isGranted)); Future<bool> get _isStoragePermissionGranted => Future.wait(Permissions.storage.map((v) => v.status)).then((v) => v.any((status) => status.isGranted));
} }

View file

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:aves/theme/colors.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/action_controls/quick_choosers/common/quick_chooser.dart'; import 'package:aves/widgets/common/action_controls/quick_choosers/common/quick_chooser.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -72,7 +73,7 @@ class _RateQuickChooserState extends State<RateQuickChooser> {
padding: const EdgeInsets.all(4), padding: const EdgeInsets.all(4),
child: Icon( child: Icon(
_rating < thisRating ? AIcons.rating : AIcons.ratingFull, _rating < thisRating ? AIcons.rating : AIcons.ratingFull,
color: _rating < thisRating ? Colors.grey : Colors.amber, color: _rating < thisRating ? AColors.starDisabled : AColors.starEnabled,
), ),
); );
}).toList(), }).toList(),

View file

@ -0,0 +1,30 @@
import 'package:aves/widgets/common/fx/borders.dart';
import 'package:flutter/widgets.dart';
class ColorIndicator extends StatelessWidget {
final Color? value;
final Widget? child;
static const double radius = 16;
const ColorIndicator({
super.key,
required this.value,
this.child,
});
@override
Widget build(BuildContext context) {
const dimension = radius * 2;
return Container(
height: dimension,
width: dimension,
decoration: BoxDecoration(
color: value,
border: AvesBorder.border(context),
shape: BoxShape.circle,
),
child: child,
);
}
}

View file

@ -1,9 +1,8 @@
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/common/basic/color_indicator.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/fx/borders.dart';
import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:aves/widgets/dialogs/aves_dialog.dart';
import 'package:flex_color_picker/flex_color_picker.dart'; import 'package:flex_color_picker/flex_color_picker.dart' show ColorPicker, ColorPickerType;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ColorListTile extends StatelessWidget { class ColorListTile extends StatelessWidget {
@ -11,8 +10,6 @@ class ColorListTile extends StatelessWidget {
final Color value; final Color value;
final ValueSetter<Color> onChanged; final ValueSetter<Color> onChanged;
static const radius = Constants.colorPickerRadius;
const ColorListTile({ const ColorListTile({
super.key, super.key,
required this.title, required this.title,
@ -24,16 +21,10 @@ class ColorListTile extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ListTile( return ListTile(
title: Text(title), title: Text(title),
trailing: Container( trailing: ColorIndicator(
height: radius * 2, value: value,
width: radius * 2,
decoration: BoxDecoration(
color: value,
border: AvesBorder.border(context),
shape: BoxShape.circle,
),
), ),
contentPadding: const EdgeInsetsDirectional.only(start: 16, end: 36 - radius), contentPadding: const EdgeInsetsDirectional.only(start: 16, end: 36 - ColorIndicator.radius),
onTap: () async { onTap: () async {
final color = await showDialog<Color>( final color = await showDialog<Color>(
context: context, context: context,

View file

@ -1,4 +1,5 @@
import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/entry.dart';
import 'package:aves/theme/colors.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
@ -73,7 +74,7 @@ class _EditEntryRatingDialogState extends State<EditEntryRatingDialog> {
padding: const EdgeInsets.all(4), padding: const EdgeInsets.all(4),
child: Icon( child: Icon(
_rating < thisRating ? AIcons.rating : AIcons.ratingFull, _rating < thisRating ? AIcons.rating : AIcons.ratingFull,
color: _rating < thisRating ? Colors.grey : Colors.amber, color: _rating < thisRating ? AColors.starDisabled : AColors.starEnabled,
), ),
), ),
); );

View file

@ -9,7 +9,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/collection_source.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/common/basic/color_indicator.dart';
import 'package:aves/widgets/common/basic/list_tiles/color.dart'; import 'package:aves/widgets/common/basic/list_tiles/color.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/fx/borders.dart'; import 'package:aves/widgets/common/fx/borders.dart';
@ -56,7 +56,6 @@ class _CoverSelectionDialogState extends State<CoverSelectionDialog> {
static const double itemPickerExtent = 46; static const double itemPickerExtent = 46;
static const double appPickerExtent = 32; static const double appPickerExtent = 32;
static const double colorPickerRadius = Constants.colorPickerRadius;
double tabBarHeight(BuildContext context) => 64 * max(1, MediaQuery.textScaleFactorOf(context)); double tabBarHeight(BuildContext context) => 64 * max(1, MediaQuery.textScaleFactorOf(context));
@ -323,14 +322,8 @@ class _CoverSelectionDialogState extends State<CoverSelectionDialog> {
if (_customColor != null) if (_customColor != null)
GestureDetector( GestureDetector(
onTap: _pickColor, onTap: _pickColor,
child: Container( child: ColorIndicator(
height: colorPickerRadius * 2, value: _customColor,
width: colorPickerRadius * 2,
decoration: BoxDecoration(
color: _customColor,
border: AvesBorder.border(context),
shape: BoxShape.circle,
),
), ),
), ),
], ],

View file

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:aves/app_mode.dart'; import 'package:aves/app_mode.dart';
import 'package:aves/model/app/permissions.dart';
import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/entry/extensions/catalog.dart'; import 'package:aves/model/entry/extensions/catalog.dart';
import 'package:aves/model/filters/album.dart'; import 'package:aves/model/filters/album.dart';
@ -17,7 +18,6 @@ import 'package:aves/services/global_search.dart';
import 'package:aves/services/intent_service.dart'; import 'package:aves/services/intent_service.dart';
import 'package:aves/services/widget_service.dart'; import 'package:aves/services/widget_service.dart';
import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/scaffold.dart'; import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/routes.dart'; import 'package:aves/widgets/common/behaviour/routes.dart';
@ -97,11 +97,7 @@ class _HomePageState extends State<HomePage> {
if (await windowService.isActivity()) { if (await windowService.isActivity()) {
// do not check whether permission was granted, because some app stores // do not check whether permission was granted, because some app stores
// hide in some countries apps that force quit on permission denial // hide in some countries apps that force quit on permission denial
await [ await Permissions.mediaAccess.request();
...Constants.storagePermissions,
// to access media with unredacted metadata with scoped storage (Android >=10)
Permission.accessMediaLocation,
].request();
} }
var appMode = AppMode.main; var appMode = AppMode.main;

View file

@ -6,7 +6,7 @@ import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/entry/extensions/images.dart'; import 'package:aves/model/entry/extensions/images.dart';
import 'package:aves/model/settings/enums/enums.dart'; import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/enums/widget_shape.dart'; import 'package:aves/model/settings/enums/widget_shape.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/theme/colors.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart'; import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -17,7 +17,7 @@ class HomeWidgetPainter {
static const backgroundGradient = LinearGradient( static const backgroundGradient = LinearGradient(
begin: Alignment.bottomLeft, begin: Alignment.bottomLeft,
end: Alignment.topRight, end: Alignment.topRight,
colors: Constants.boraBoraGradientColors, colors: AColors.boraBoraGradient,
); );
HomeWidgetPainter({ HomeWidgetPainter({

View file

@ -1,5 +1,5 @@
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/theme/styles.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart'; import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:decorated_icon/decorated_icon.dart'; import 'package:decorated_icon/decorated_icon.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -30,7 +30,7 @@ class SettingsTileLeading extends StatelessWidget {
icon, icon,
size: 18, size: 18,
color: DefaultTextStyle.of(context).style.color, color: DefaultTextStyle.of(context).style.color,
shadows: Theme.of(context).brightness == Brightness.dark ? Constants.embossShadows : null, shadows: Theme.of(context).brightness == Brightness.dark ? AStyles.embossShadows : null,
), ),
); );
} }

View file

@ -6,10 +6,9 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/services/widget_service.dart'; import 'package:aves/services/widget_service.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/common/basic/color_indicator.dart';
import 'package:aves/widgets/common/basic/scaffold.dart'; import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/fx/borders.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart'; import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
import 'package:aves/widgets/home_widget.dart'; import 'package:aves/widgets/home_widget.dart';
import 'package:aves/widgets/settings/common/collection_tile.dart'; import 'package:aves/widgets/settings/common/collection_tile.dart';
@ -218,7 +217,6 @@ class HomeWidgetOutlineSelector extends StatefulWidget {
} }
class _HomeWidgetOutlineSelectorState extends State<HomeWidgetOutlineSelector> { class _HomeWidgetOutlineSelectorState extends State<HomeWidgetOutlineSelector> {
static const radius = Constants.colorPickerRadius;
static const List<Color?> options = [ static const List<Color?> options = [
null, null,
Colors.black, Colors.black,
@ -243,14 +241,8 @@ class _HomeWidgetOutlineSelectorState extends State<HomeWidgetOutlineSelector> {
return options.map((selected) { return options.map((selected) {
return DropdownMenuItem<Color?>( return DropdownMenuItem<Color?>(
value: selected, value: selected,
child: Container( child: ColorIndicator(
height: radius * 2, value: selected,
width: radius * 2,
decoration: BoxDecoration(
color: selected,
border: AvesBorder.border(context),
shape: BoxShape.circle,
),
child: selected == null ? const Icon(AIcons.clear) : null, child: selected == null ? const Icon(AIcons.clear) : null,
), ),
); );

View file

@ -1,6 +1,6 @@
import 'package:aves/model/settings/enums/enums.dart'; import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/theme/colors.dart';
import 'package:aves/widgets/common/basic/text/background_painter.dart'; import 'package:aves/widgets/common/basic/text/background_painter.dart';
import 'package:aves/widgets/common/basic/text/outlined.dart'; import 'package:aves/widgets/common/basic/text/outlined.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
@ -35,7 +35,7 @@ class SubtitleSample extends StatelessWidget {
gradient: const LinearGradient( gradient: const LinearGradient(
begin: Alignment.bottomLeft, begin: Alignment.bottomLeft,
end: Alignment.topRight, end: Alignment.topRight,
colors: Constants.boraBoraGradientColors, colors: AColors.boraBoraGradient,
), ),
border: AvesBorder.border(context), border: AvesBorder.border(context),
borderRadius: const BorderRadius.all(Radius.circular(24)), borderRadius: const BorderRadius.all(Radius.circular(24)),

View file

@ -1,7 +1,6 @@
import 'package:aves/model/settings/enums/entry_background.dart'; import 'package:aves/model/settings/enums/entry_background.dart';
import 'package:aves/model/settings/enums/enums.dart'; import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/common/basic/color_indicator.dart';
import 'package:aves/widgets/common/fx/borders.dart';
import 'package:aves/widgets/common/fx/checkered_decoration.dart'; import 'package:aves/widgets/common/fx/checkered_decoration.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -20,8 +19,6 @@ class EntryBackgroundSelector extends StatefulWidget {
} }
class _EntryBackgroundSelectorState extends State<EntryBackgroundSelector> { class _EntryBackgroundSelectorState extends State<EntryBackgroundSelector> {
static const radius = Constants.colorPickerRadius;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DropdownButtonHideUnderline( return DropdownButtonHideUnderline(
@ -46,19 +43,13 @@ class _EntryBackgroundSelectorState extends State<EntryBackgroundSelector> {
].map((selected) { ].map((selected) {
return DropdownMenuItem<EntryBackground>( return DropdownMenuItem<EntryBackground>(
value: selected, value: selected,
child: Container( child: ColorIndicator(
height: radius * 2, value: selected.isColor ? selected.color : null,
width: radius * 2,
decoration: BoxDecoration(
color: selected.isColor ? selected.color : null,
border: AvesBorder.border(context),
shape: BoxShape.circle,
),
child: selected == EntryBackground.checkered child: selected == EntryBackground.checkered
? ClipOval( ? ClipOval(
child: CustomPaint( child: CustomPaint(
painter: CheckeredPainter( painter: CheckeredPainter(
checkSize: radius, checkSize: ColorIndicator.radius,
), ),
), ),
) )

View file

@ -1,4 +1,4 @@
import 'package:aves/utils/constants.dart'; import 'package:aves/theme/styles.dart';
import 'package:aves/widgets/common/basic/text/outlined.dart'; import 'package:aves/widgets/common/basic/text/outlined.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -20,7 +20,7 @@ class LinearPercentIndicatorText extends StatelessWidget {
TextSpan( TextSpan(
text: percentFormat.format(percent), text: percentFormat.format(percent),
style: TextStyle( style: TextStyle(
shadows: theme.brightness == Brightness.dark ? Constants.embossShadows : null, shadows: theme.brightness == Brightness.dark ? AStyles.embossShadows : null,
), ),
) )
], ],

View file

@ -7,7 +7,6 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/ref/mime_types.dart'; import 'package:aves/ref/mime_types.dart';
import 'package:aves/services/android_debug_service.dart'; import 'package:aves/services/android_debug_service.dart';
import 'package:aves/services/geocoding_service.dart'; import 'package:aves/services/geocoding_service.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart';
import 'package:aves/widgets/viewer/info/common.dart'; import 'package:aves/widgets/viewer/info/common.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -101,10 +100,7 @@ class _MetadataTabState extends State<MetadataTab> {
if (data.isNotEmpty) if (data.isNotEmpty)
Padding( Padding(
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8), padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8),
child: InfoRowGroup( child: InfoRowGroup(info: data),
info: data,
maxValueLength: Constants.infoGroupMaxValueLength,
),
) )
], ],
); );

View file

@ -45,8 +45,9 @@ class InfoRowGroup extends StatefulWidget {
final int maxValueLength; final int maxValueLength;
final Map<String, InfoValueSpanBuilder> spanBuilders; final Map<String, InfoValueSpanBuilder> spanBuilders;
static const keyValuePadding = 16; static const int defaultMaxValueLength = 140;
static const fontSize = 13.0; static const double keyValuePadding = 16;
static const double fontSize = 13;
static const valueStyle = TextStyle(fontSize: fontSize); static const valueStyle = TextStyle(fontSize: fontSize);
static final _keyStyle = valueStyle.copyWith(height: 2.0); static final _keyStyle = valueStyle.copyWith(height: 2.0);
@ -55,7 +56,7 @@ class InfoRowGroup extends StatefulWidget {
const InfoRowGroup({ const InfoRowGroup({
super.key, super.key,
required this.info, required this.info,
this.maxValueLength = 0, this.maxValueLength = defaultMaxValueLength,
Map<String, InfoValueSpanBuilder>? spanBuilders, Map<String, InfoValueSpanBuilder>? spanBuilders,
}) : spanBuilders = spanBuilders ?? const {}; }) : spanBuilders = spanBuilders ?? const {};

View file

@ -4,7 +4,6 @@ import 'package:aves/model/entry/entry.dart';
import 'package:aves/ref/brand_colors.dart'; import 'package:aves/ref/brand_colors.dart';
import 'package:aves/services/metadata/svg_metadata_service.dart'; import 'package:aves/services/metadata/svg_metadata_service.dart';
import 'package:aves/theme/colors.dart'; import 'package:aves/theme/colors.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart';
import 'package:aves/widgets/viewer/info/common.dart'; import 'package:aves/widgets/viewer/info/common.dart';
@ -117,7 +116,6 @@ class MetadataDirTileBody extends StatelessWidget {
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8), padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8),
child: InfoRowGroup( child: InfoRowGroup(
info: tags, info: tags,
maxValueLength: Constants.infoGroupMaxValueLength,
spanBuilders: linkHandlers, spanBuilders: linkHandlers,
), ),
), ),

View file

@ -2,7 +2,6 @@ import 'dart:math';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/basic/multi_cross_fader.dart'; import 'package:aves/widgets/common/basic/multi_cross_fader.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/highlight_title.dart'; import 'package:aves/widgets/common/identity/highlight_title.dart';
@ -127,7 +126,6 @@ class _XmpCardState extends State<XmpCard> {
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8), padding: const EdgeInsets.only(left: 8, right: 8, bottom: 8),
child: InfoRowGroup( child: InfoRowGroup(
info: Map.fromEntries(props.map((prop) => MapEntry(prop.displayKey, widget.formatValue(prop)))), info: Map.fromEntries(props.map((prop) => MapEntry(prop.displayKey, widget.formatValue(prop)))),
maxValueLength: Constants.infoGroupMaxValueLength,
spanBuilders: widget.spanBuilders?.call(_isIndexed ? index + 1 : null), spanBuilders: widget.spanBuilders?.call(_isIndexed ? index + 1 : null),
), ),
), ),

View file

@ -1,6 +1,5 @@
import 'package:aves/ref/brand_colors.dart'; import 'package:aves/ref/brand_colors.dart';
import 'package:aves/theme/colors.dart'; import 'package:aves/theme/colors.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/utils/string_utils.dart'; import 'package:aves/utils/string_utils.dart';
import 'package:aves/utils/xmp_utils.dart'; import 'package:aves/utils/xmp_utils.dart';
import 'package:aves/widgets/common/identity/highlight_title.dart'; import 'package:aves/widgets/common/identity/highlight_title.dart';
@ -103,7 +102,6 @@ class XmpNamespace extends Equatable {
if (props.isNotEmpty) if (props.isNotEmpty)
InfoRowGroup( InfoRowGroup(
info: Map.fromEntries(props.map((v) => MapEntry(v.displayKey, formatValue(v)))), info: Map.fromEntries(props.map((v) => MapEntry(v.displayKey, formatValue(v)))),
maxValueLength: Constants.infoGroupMaxValueLength,
spanBuilders: linkifyValues(props), spanBuilders: linkifyValues(props),
), ),
...cards.where((v) => !v.isEmpty).map((card) { ...cards.where((v) => !v.isEmpty).map((card) {

View file

@ -5,7 +5,7 @@ import 'package:aves/model/metadata/overlay.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/services/common/services.dart'; import 'package:aves/services/common/services.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/theme/styles.dart';
import 'package:aves/widgets/viewer/multipage/controller.dart'; import 'package:aves/widgets/viewer/multipage/controller.dart';
import 'package:aves/widgets/viewer/overlay/details/date.dart'; import 'package:aves/widgets/viewer/overlay/details/date.dart';
import 'package:aves/widgets/viewer/overlay/details/description.dart'; import 'package:aves/widgets/viewer/overlay/details/description.dart';
@ -135,7 +135,7 @@ class ViewerDetailOverlayContent extends StatelessWidget {
static const double iconPadding = 8.0; static const double iconPadding = 8.0;
static const double iconSize = 16.0; static const double iconSize = 16.0;
static List<Shadow>? shadows(BuildContext context) => Theme.of(context).brightness == Brightness.dark ? Constants.embossShadows : null; static List<Shadow>? shadows(BuildContext context) => Theme.of(context).brightness == Brightness.dark ? AStyles.embossShadows : null;
const ViewerDetailOverlayContent({ const ViewerDetailOverlayContent({
super.key, super.key,

View file

@ -3,8 +3,8 @@ import 'dart:async';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/format.dart'; import 'package:aves/theme/format.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/theme/styles.dart';
import 'package:aves/theme/themes.dart'; import 'package:aves/theme/themes.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:aves/widgets/common/fx/blurred.dart';
import 'package:aves/widgets/common/fx/borders.dart'; import 'package:aves/widgets/common/fx/borders.dart';
import 'package:aves_video/aves_video.dart'; import 'package:aves_video/aves_video.dart';
@ -42,7 +42,7 @@ class _VideoProgressBarState extends State<VideoProgressBar> {
final blurred = settings.enableBlurEffect; final blurred = settings.enableBlurEffect;
final brightness = Theme.of(context).brightness; final brightness = Theme.of(context).brightness;
final textStyle = TextStyle( final textStyle = TextStyle(
shadows: brightness == Brightness.dark ? Constants.embossShadows : null, shadows: brightness == Brightness.dark ? AStyles.embossShadows : null,
); );
return SizeTransition( return SizeTransition(
sizeFactor: widget.scale, sizeFactor: widget.scale,

View file

@ -388,7 +388,7 @@ class AssParser {
); );
} }
static String _replaceChars(String text) => text.replaceAll(r'\h', Unicode.noBreakSpace).replaceAll(r'\N', '\n').trim(); static String _replaceChars(String text) => text.replaceAll(r'\h', UniChars.noBreakSpace).replaceAll(r'\N', '\n').trim();
static int? _parseAlpha(String param) { static int? _parseAlpha(String param) {
final match = alphaPattern.firstMatch(param); final match = alphaPattern.firstMatch(param);