refactor
This commit is contained in:
parent
e8893f7f07
commit
ad3edf4458
35 changed files with 334 additions and 326 deletions
|
@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
60
lib/model/app/contributors.dart
Normal file
60
lib/model/app/contributors.dart
Normal 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);
|
||||||
|
}
|
16
lib/model/app/permissions.dart
Normal file
16
lib/model/app/permissions.dart
Normal 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,
|
||||||
|
];
|
||||||
|
}
|
|
@ -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}?';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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),
|
||||||
|
)
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -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';
|
|
||||||
}
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
30
lib/widgets/common/basic/color_indicator.dart
Normal file
30
lib/widgets/common/basic/color_indicator.dart
Normal 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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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({
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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)),
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -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,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
|
@ -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 {};
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue