upgraded flutter to v2.5.0
This commit is contained in:
parent
487a2f2699
commit
79e92e6ad6
33 changed files with 125 additions and 95 deletions
2
.github/workflows/check.yml
vendored
2
.github/workflows/check.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
- uses: subosito/flutter-action@v1
|
||||
with:
|
||||
channel: stable
|
||||
flutter-version: '2.2.3'
|
||||
flutter-version: '2.5.0'
|
||||
|
||||
- name: Clone the repository.
|
||||
uses: actions/checkout@v2
|
||||
|
|
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
|
@ -17,7 +17,7 @@ jobs:
|
|||
- uses: subosito/flutter-action@v1
|
||||
with:
|
||||
channel: stable
|
||||
flutter-version: '2.2.3'
|
||||
flutter-version: '2.5.0'
|
||||
|
||||
# Workaround for this Android Gradle Plugin issue (supposedly fixed in AGP 4.1):
|
||||
# https://issuetracker.google.com/issues/144111441
|
||||
|
@ -50,8 +50,8 @@ jobs:
|
|||
echo "${{ secrets.KEY_JKS }}" > release.keystore.asc
|
||||
gpg -d --passphrase "${{ secrets.KEY_JKS_PASSPHRASE }}" --batch release.keystore.asc > $AVES_STORE_FILE
|
||||
rm release.keystore.asc
|
||||
flutter build apk --bundle-sksl-path shaders_2.2.3.sksl.json
|
||||
flutter build appbundle --bundle-sksl-path shaders_2.2.3.sksl.json
|
||||
flutter build apk --bundle-sksl-path shaders_2.5.0.sksl.json
|
||||
flutter build appbundle --bundle-sksl-path shaders_2.5.0.sksl.json
|
||||
rm $AVES_STORE_FILE
|
||||
env:
|
||||
AVES_STORE_FILE: ${{ github.workspace }}/key.jks
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [Unreleased]
|
||||
### Changed
|
||||
- upgraded Flutter to stable v2.5.0
|
||||
|
||||
## [v1.5.1] - 2021-09-08
|
||||
### Added
|
||||
|
@ -71,7 +73,7 @@ All notable changes to this project will be documented in this file.
|
|||
### Changed
|
||||
- improved SVG support with a different rendering engine
|
||||
- changed logo
|
||||
- upgraded flutter to stable v2.2.3
|
||||
- upgraded Flutter to stable v2.2.3
|
||||
- migrated to sound null safety
|
||||
- viewer: parallax effect when scrolling
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"@appName": {},
|
||||
"welcomeMessage": "Welcome to Aves",
|
||||
"@welcomeMessage": {},
|
||||
"welcomeCrashReportToggle": "Allow anonymous crash reporting (optional)",
|
||||
"welcomeCrashReportToggle": "Allow anonymous error reporting (optional)",
|
||||
"@welcomeCrashReportToggle": {},
|
||||
"welcomeTermsToggle": "I agree to the terms and conditions",
|
||||
"@welcomeTermsToggle": {},
|
||||
|
|
|
@ -17,25 +17,24 @@ class Themes {
|
|||
|
||||
static final darkTheme = ThemeData(
|
||||
brightness: Brightness.dark,
|
||||
accentColor: _accentColor,
|
||||
// canvas color is used as background for the drawer and popups
|
||||
// when using a popup menu on a dialog, lighten the background via `PopupMenuTheme`
|
||||
canvasColor: Colors.grey[850],
|
||||
scaffoldBackgroundColor: Colors.grey.shade900,
|
||||
dialogBackgroundColor: Colors.grey[850],
|
||||
indicatorColor: _accentColor,
|
||||
toggleableActiveColor: _accentColor,
|
||||
tooltipTheme: const TooltipThemeData(
|
||||
verticalOffset: 32,
|
||||
),
|
||||
appBarTheme: const AppBarTheme(
|
||||
textTheme: TextTheme(
|
||||
headline6: TextStyle(
|
||||
appBarTheme: AppBarTheme(
|
||||
backgroundColor: Colors.grey.shade900,
|
||||
titleTextStyle: const TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.normal,
|
||||
fontFeatures: [FontFeature.enable('smcp')],
|
||||
),
|
||||
),
|
||||
),
|
||||
colorScheme: const ColorScheme.dark(
|
||||
primary: _accentColor,
|
||||
secondary: _accentColor,
|
||||
|
|
|
@ -84,7 +84,7 @@ class _BugReportState extends State<BugReport> with FeedbackMixin {
|
|||
),
|
||||
isExpanded: _showInstructions,
|
||||
canTapOnHeader: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
@ -99,7 +99,7 @@ class _BugReportState extends State<BugReport> with FeedbackMixin {
|
|||
padding: const EdgeInsets.all(12),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.fromBorderSide(BorderSide(
|
||||
color: Theme.of(context).accentColor,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
width: AvesFilterChip.outlineWidth,
|
||||
)),
|
||||
shape: BoxShape.circle,
|
||||
|
@ -112,7 +112,7 @@ class _BugReportState extends State<BugReport> with FeedbackMixin {
|
|||
OutlinedButton(
|
||||
onPressed: onPressed,
|
||||
style: ButtonStyle(
|
||||
side: MaterialStateProperty.all<BorderSide>(BorderSide(color: Theme.of(context).accentColor)),
|
||||
side: MaterialStateProperty.all<BorderSide>(BorderSide(color: Theme.of(context).colorScheme.secondary)),
|
||||
foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
|
||||
),
|
||||
child: Text(buttonText),
|
||||
|
|
|
@ -10,15 +10,17 @@ mixin FeedbackMixin {
|
|||
void dismissFeedback(BuildContext context) => ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
||||
|
||||
void showFeedback(BuildContext context, String message, [SnackBarAction? action]) {
|
||||
showFeedbackWithMessenger(ScaffoldMessenger.of(context), message, action);
|
||||
showFeedbackWithMessenger(context, ScaffoldMessenger.of(context), message, action);
|
||||
}
|
||||
|
||||
// provide the messenger if feedback happens as the widget is disposed
|
||||
void showFeedbackWithMessenger(ScaffoldMessengerState messenger, String message, [SnackBarAction? action]) {
|
||||
void showFeedbackWithMessenger(BuildContext context, ScaffoldMessengerState messenger, String message, [SnackBarAction? action]) {
|
||||
final duration = action != null ? Durations.opToastActionDisplay : Durations.opToastDisplay;
|
||||
final progressColor = Theme.of(context).colorScheme.secondary;
|
||||
messenger.showSnackBar(SnackBar(
|
||||
content: _FeedbackMessage(
|
||||
message: message,
|
||||
progressColor: progressColor,
|
||||
duration: action != null ? duration : null,
|
||||
),
|
||||
action: action,
|
||||
|
@ -107,7 +109,7 @@ class _ReportOverlayState<T> extends State<ReportOverlay<T>> with SingleTickerPr
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final progressColor = Theme.of(context).accentColor;
|
||||
final progressColor = Theme.of(context).colorScheme.secondary;
|
||||
return AbsorbPointer(
|
||||
child: StreamBuilder<T>(
|
||||
stream: opStream,
|
||||
|
@ -163,10 +165,12 @@ class _ReportOverlayState<T> extends State<ReportOverlay<T>> with SingleTickerPr
|
|||
class _FeedbackMessage extends StatefulWidget {
|
||||
final String message;
|
||||
final Duration? duration;
|
||||
final Color progressColor;
|
||||
|
||||
const _FeedbackMessage({
|
||||
Key? key,
|
||||
required this.message,
|
||||
required this.progressColor,
|
||||
this.duration,
|
||||
}) : super(key: key);
|
||||
|
||||
|
@ -212,7 +216,9 @@ class _FeedbackMessageState extends State<_FeedbackMessage> {
|
|||
percent: _percent,
|
||||
lineWidth: 2,
|
||||
radius: 32,
|
||||
backgroundColor: Theme.of(context).accentColor,
|
||||
// progress color is provided by the caller,
|
||||
// because we cannot use the app context theme here
|
||||
backgroundColor: widget.progressColor,
|
||||
progressColor: Colors.grey,
|
||||
animation: true,
|
||||
animationDuration: duration.inMilliseconds,
|
||||
|
|
|
@ -63,7 +63,7 @@ class ReselectableRadioListTile<T> extends StatelessWidget {
|
|||
}
|
||||
return MergeSemantics(
|
||||
child: ListTileTheme.merge(
|
||||
selectedColor: activeColor ?? Theme.of(context).accentColor,
|
||||
selectedColor: activeColor ?? Theme.of(context).colorScheme.secondary,
|
||||
child: ListTile(
|
||||
leading: leading,
|
||||
title: title,
|
||||
|
|
|
@ -42,10 +42,13 @@ class AvesExpansionTile extends StatelessWidget {
|
|||
],
|
||||
);
|
||||
}
|
||||
final theme = Theme.of(context);
|
||||
return Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
data: theme.copyWith(
|
||||
colorScheme: theme.colorScheme.copyWith(
|
||||
// color used by the `ExpansionTileCard` for selected text and icons
|
||||
accentColor: Colors.white,
|
||||
secondary: theme.colorScheme.onBackground,
|
||||
),
|
||||
),
|
||||
child: ExpansionTileCard(
|
||||
// key is expected by test driver
|
||||
|
@ -58,7 +61,7 @@ class AvesExpansionTile extends StatelessWidget {
|
|||
finalPadding: const EdgeInsets.symmetric(vertical: 6.0),
|
||||
baseColor: Colors.grey.shade900,
|
||||
expandedColor: Colors.grey[850],
|
||||
shadowColor: Theme.of(context).shadowColor,
|
||||
shadowColor: theme.shadowColor,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
|
|
@ -264,7 +264,7 @@ class _AvesFilterChipState extends State<AvesFilterChip> {
|
|||
child: Banner(
|
||||
message: banner.toUpperCase(),
|
||||
location: BannerLocation.topStart,
|
||||
color: Theme.of(context).accentColor,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
child: const SizedBox(),
|
||||
),
|
||||
),
|
||||
|
|
|
@ -56,8 +56,8 @@ class _MagnifierGestureDetectorState extends State<MagnifierGestureDetector> {
|
|||
if (scope != null) {
|
||||
gestures[MagnifierGestureRecognizer] = GestureRecognizerFactoryWithHandlers<MagnifierGestureRecognizer>(
|
||||
() => MagnifierGestureRecognizer(
|
||||
hitDetector: widget.hitDetector,
|
||||
debugOwner: this,
|
||||
hitDetector: widget.hitDetector,
|
||||
validateAxis: scope.axis,
|
||||
touchSlopFactor: scope.touchSlopFactor,
|
||||
doubleTapDetails: doubleTapDetails,
|
||||
|
|
|
@ -12,12 +12,11 @@ class MagnifierGestureRecognizer extends ScaleGestureRecognizer {
|
|||
|
||||
MagnifierGestureRecognizer({
|
||||
Object? debugOwner,
|
||||
PointerDeviceKind? kind,
|
||||
required this.hitDetector,
|
||||
required this.validateAxis,
|
||||
this.touchSlopFactor = 2,
|
||||
required this.doubleTapDetails,
|
||||
}) : super(debugOwner: debugOwner, kind: kind);
|
||||
}) : super(debugOwner: debugOwner);
|
||||
|
||||
Map<int, Offset> _pointerLocations = <int, Offset>{};
|
||||
|
||||
|
@ -29,7 +28,7 @@ class MagnifierGestureRecognizer extends ScaleGestureRecognizer {
|
|||
bool ready = true;
|
||||
|
||||
@override
|
||||
void addAllowedPointer(PointerEvent event) {
|
||||
void addAllowedPointer(PointerDownEvent event) {
|
||||
if (ready) {
|
||||
ready = false;
|
||||
_initialSpan = 0.0;
|
||||
|
|
|
@ -33,7 +33,7 @@ class Attribution extends StatelessWidget {
|
|||
data: data,
|
||||
selectable: true,
|
||||
styleSheet: MarkdownStyleSheet(
|
||||
a: TextStyle(color: Theme.of(context).accentColor),
|
||||
a: TextStyle(color: Theme.of(context).colorScheme.secondary),
|
||||
p: const TextStyle(color: Colors.white70, fontSize: InfoRowGroup.fontSize),
|
||||
),
|
||||
onTapLink: (text, href, title) async {
|
||||
|
|
|
@ -51,7 +51,7 @@ class GeoMap extends StatefulWidget {
|
|||
_GeoMapState createState() => _GeoMapState();
|
||||
}
|
||||
|
||||
class _GeoMapState extends State<GeoMap> with TickerProviderStateMixin {
|
||||
class _GeoMapState extends State<GeoMap> {
|
||||
// as of google_maps_flutter v2.0.6, Google Maps initialization is blocking
|
||||
// cf https://github.com/flutter/flutter/issues/28493
|
||||
// it is especially severe the first time, but still significant afterwards
|
||||
|
@ -179,7 +179,6 @@ class _GeoMapState extends State<GeoMap> with TickerProviderStateMixin {
|
|||
alignment: Alignment.topCenter,
|
||||
curve: Curves.easeInOutCubic,
|
||||
duration: Durations.mapStyleSwitchAnimation,
|
||||
vsync: this,
|
||||
child: ValueListenableBuilder<bool>(
|
||||
valueListenable: widget.isAnimatingNotifier,
|
||||
builder: (context, animating, child) {
|
||||
|
|
|
@ -82,7 +82,7 @@ class ImageMarker extends StatelessWidget {
|
|||
Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 2),
|
||||
decoration: ShapeDecoration(
|
||||
color: Theme.of(context).accentColor,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
shape: const CustomRoundedRectangleBorder(
|
||||
leftSide: borderSide,
|
||||
rightSide: borderSide,
|
||||
|
|
|
@ -70,7 +70,7 @@ class _ThumbnailHighlightOverlayState extends State<ThumbnailHighlightOverlay> {
|
|||
builder: (context) => Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.fromBorderSide(BorderSide(
|
||||
color: Theme.of(context).accentColor,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
width: context.select<GridThemeData, double>((t) => t.highlightBorderWidth),
|
||||
)),
|
||||
),
|
||||
|
|
|
@ -14,6 +14,7 @@ class AvesDialog extends AlertDialog {
|
|||
String? title,
|
||||
ScrollController? scrollController,
|
||||
List<Widget>? scrollableContent,
|
||||
bool hasScrollBar = true,
|
||||
Widget? content,
|
||||
required List<Widget> actions,
|
||||
}) : assert((scrollableContent != null) ^ (content != null)),
|
||||
|
@ -31,7 +32,7 @@ class AvesDialog extends AlertDialog {
|
|||
// scroll both the title and the content together,
|
||||
// and overflow feedback ignores the dialog shape,
|
||||
// so we restrict scrolling to the content instead
|
||||
content: _buildContent(context, scrollController, scrollableContent, content),
|
||||
content: _buildContent(context, scrollController, scrollableContent, hasScrollBar, content),
|
||||
contentPadding: scrollableContent != null ? EdgeInsets.zero : const EdgeInsets.fromLTRB(24, 20, 24, 0),
|
||||
actions: actions,
|
||||
actionsPadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
|
@ -45,6 +46,7 @@ class AvesDialog extends AlertDialog {
|
|||
BuildContext context,
|
||||
ScrollController? scrollController,
|
||||
List<Widget>? scrollableContent,
|
||||
bool hasScrollBar,
|
||||
Widget? content,
|
||||
) {
|
||||
if (content != null) {
|
||||
|
@ -53,6 +55,31 @@ class AvesDialog extends AlertDialog {
|
|||
|
||||
if (scrollableContent != null) {
|
||||
scrollController ??= ScrollController();
|
||||
|
||||
Widget child = ListView(
|
||||
controller: scrollController,
|
||||
shrinkWrap: true,
|
||||
children: scrollableContent,
|
||||
);
|
||||
|
||||
if (hasScrollBar) {
|
||||
child = Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
scrollbarTheme: const ScrollbarThemeData(
|
||||
isAlwaysShown: true,
|
||||
radius: Radius.circular(16),
|
||||
crossAxisMargin: 4,
|
||||
mainAxisMargin: 4,
|
||||
interactive: true,
|
||||
),
|
||||
),
|
||||
child: Scrollbar(
|
||||
controller: scrollController,
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return Container(
|
||||
// padding to avoid transparent border overlapping
|
||||
padding: const EdgeInsets.symmetric(horizontal: borderWidth),
|
||||
|
@ -66,25 +93,7 @@ class AvesDialog extends AlertDialog {
|
|||
bottom: Divider.createBorderSide(context, width: borderWidth),
|
||||
),
|
||||
),
|
||||
child: Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
scrollbarTheme: const ScrollbarThemeData(
|
||||
isAlwaysShown: true,
|
||||
radius: Radius.circular(16),
|
||||
crossAxisMargin: 4,
|
||||
mainAxisMargin: 4,
|
||||
interactive: true,
|
||||
),
|
||||
),
|
||||
child: Scrollbar(
|
||||
controller: scrollController,
|
||||
child: ListView(
|
||||
controller: scrollController,
|
||||
shrinkWrap: true,
|
||||
children: scrollableContent,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -324,6 +324,7 @@ class _TimeShiftDialogState extends State<TimeShiftDialog> {
|
|||
),
|
||||
),
|
||||
],
|
||||
hasScrollBar: false,
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
|
|
|
@ -68,7 +68,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
|
||||
return Drawer(
|
||||
child: ListTileTheme.merge(
|
||||
selectedColor: Theme.of(context).accentColor,
|
||||
selectedColor: Theme.of(context).colorScheme.secondary,
|
||||
child: Selector<MediaQueryData, double>(
|
||||
selector: (c, mq) => mq.effectiveBottomPadding,
|
||||
builder: (c, mqPaddingBottom, child) {
|
||||
|
@ -104,7 +104,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
|
||||
return Container(
|
||||
padding: const EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8),
|
||||
color: Theme.of(context).accentColor,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
child: SafeArea(
|
||||
bottom: false,
|
||||
child: Column(
|
||||
|
@ -147,6 +147,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
onPressed: () => goTo(AboutPage.routeName, (_) => const AboutPage()),
|
||||
icon: const Icon(AIcons.info),
|
||||
label: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(context.l10n.aboutPageTitle),
|
||||
|
|
|
@ -177,7 +177,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumFilter> {
|
|||
final deletedCount = deletedUris.length;
|
||||
if (deletedCount < todoCount) {
|
||||
final count = todoCount - deletedCount;
|
||||
showFeedbackWithMessenger(messenger, l10n.collectionDeleteFailureFeedback(count));
|
||||
showFeedbackWithMessenger(context, messenger, l10n.collectionDeleteFailureFeedback(count));
|
||||
}
|
||||
|
||||
// cleanup
|
||||
|
@ -236,9 +236,9 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumFilter> {
|
|||
final movedCount = movedOps.length;
|
||||
if (movedCount < todoCount) {
|
||||
final count = todoCount - movedCount;
|
||||
showFeedbackWithMessenger(messenger, l10n.collectionMoveFailureFeedback(count));
|
||||
showFeedbackWithMessenger(context, messenger, l10n.collectionMoveFailureFeedback(count));
|
||||
} else {
|
||||
showFeedbackWithMessenger(messenger, l10n.genericSuccessFeedback);
|
||||
showFeedbackWithMessenger(context, messenger, l10n.genericSuccessFeedback);
|
||||
}
|
||||
|
||||
// cleanup
|
||||
|
|
|
@ -35,7 +35,7 @@ class _ChipHighlightOverlayState extends State<ChipHighlightOverlay> {
|
|||
builder: (context) => Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.fromBorderSide(BorderSide(
|
||||
color: Theme.of(context).accentColor,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
width: widget.extent * .1,
|
||||
)),
|
||||
borderRadius: widget.borderRadius,
|
||||
|
|
|
@ -109,10 +109,6 @@ class _SearchPageState extends State<SearchPage> {
|
|||
}
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: theme.primaryColor,
|
||||
iconTheme: theme.primaryIconTheme,
|
||||
textTheme: theme.primaryTextTheme,
|
||||
brightness: theme.primaryColorBrightness,
|
||||
leading: widget.delegate.buildLeading(context),
|
||||
title: TextField(
|
||||
controller: widget.delegate.queryTextController,
|
||||
|
|
|
@ -13,7 +13,7 @@ class ActionPanel extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final color = highlight ? Theme.of(context).accentColor : Colors.blueGrey;
|
||||
final color = highlight ? Theme.of(context).colorScheme.secondary : Colors.blueGrey;
|
||||
return AnimatedContainer(
|
||||
foregroundDecoration: BoxDecoration(
|
||||
color: color.withOpacity(.2),
|
||||
|
|
|
@ -77,7 +77,7 @@ class _DrawerAlbumTabState extends State<DrawerAlbumTab> {
|
|||
});
|
||||
},
|
||||
style: ButtonStyle(
|
||||
side: MaterialStateProperty.all<BorderSide>(BorderSide(color: Theme.of(context).accentColor)),
|
||||
side: MaterialStateProperty.all<BorderSide>(BorderSide(color: Theme.of(context).colorScheme.secondary)),
|
||||
foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
|
||||
),
|
||||
icon: const Icon(AIcons.add),
|
||||
|
|
|
@ -93,7 +93,7 @@ class StatsPage extends StatelessWidget {
|
|||
percent: withGpsPercent,
|
||||
lineHeight: lineHeight,
|
||||
backgroundColor: Colors.white24,
|
||||
progressColor: Theme.of(context).accentColor,
|
||||
progressColor: Theme.of(context).colorScheme.secondary,
|
||||
animation: true,
|
||||
leading: const Icon(AIcons.location),
|
||||
// right padding to match leading, so that inside label is aligned with outside label below
|
||||
|
|
|
@ -524,9 +524,9 @@ class _EntryViewerStackState extends State<EntryViewerStack> with FeedbackMixin,
|
|||
|
||||
// system UI
|
||||
|
||||
static void _showSystemUI() => SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
|
||||
static void _showSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||
|
||||
static void _hideSystemUI() => SystemChrome.setEnabledSystemUIOverlays([]);
|
||||
static void _hideSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
|
||||
|
||||
// overlay
|
||||
|
||||
|
|
|
@ -140,9 +140,9 @@ class _PanoramaPageState extends State<PanoramaPage> {
|
|||
|
||||
// system UI
|
||||
|
||||
static void _showSystemUI() => SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
|
||||
static void _showSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||
|
||||
static void _hideSystemUI() => SystemChrome.setEnabledSystemUIOverlays([]);
|
||||
static void _hideSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
|
||||
|
||||
// overlay
|
||||
|
||||
|
|
49
pubspec.lock
49
pubspec.lock
|
@ -7,14 +7,14 @@ packages:
|
|||
name: _fe_analyzer_shared
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "22.0.0"
|
||||
version: "25.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.7.1"
|
||||
version: "2.2.0"
|
||||
archive:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -35,7 +35,7 @@ packages:
|
|||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.6.1"
|
||||
version: "2.8.1"
|
||||
barcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -63,7 +63,7 @@ packages:
|
|||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "1.3.1"
|
||||
charts_common:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -74,9 +74,11 @@ packages:
|
|||
charts_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: charts_flutter
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
path: charts_flutter
|
||||
ref: HEAD
|
||||
resolved-ref: "30477090290b348ed3101bc13017aae465f59017"
|
||||
url: "git://github.com/google/charts.git"
|
||||
source: git
|
||||
version: "0.11.0"
|
||||
cli_util:
|
||||
dependency: transitive
|
||||
|
@ -251,7 +253,7 @@ packages:
|
|||
description:
|
||||
path: "."
|
||||
ref: HEAD
|
||||
resolved-ref: b80a0b322622f28bd783cccef3663aa7aa806e01
|
||||
resolved-ref: e0380a550c4be0ef52a70f398c2211fc503094e8
|
||||
url: "git://github.com/deckerst/expansion_tile_card.git"
|
||||
source: git
|
||||
version: "2.0.0"
|
||||
|
@ -284,7 +286,7 @@ packages:
|
|||
name: file
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.1.0"
|
||||
version: "6.1.2"
|
||||
firebase_core:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -408,6 +410,13 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
frontend_server_client:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: frontend_server_client
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
fuchsia_remote_debug_protocol:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
|
@ -517,7 +526,7 @@ packages:
|
|||
name: json_annotation
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.0.1"
|
||||
version: "4.1.0"
|
||||
latlong2:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -573,7 +582,7 @@ packages:
|
|||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.7.0"
|
||||
mgrs_dart:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -762,7 +771,7 @@ packages:
|
|||
name: petitparser
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.1.0"
|
||||
version: "4.2.0"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -804,7 +813,7 @@ packages:
|
|||
name: process
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.2.1"
|
||||
version: "4.2.3"
|
||||
proj4dart:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -949,7 +958,7 @@ packages:
|
|||
name: sqflite_common
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "2.0.1+1"
|
||||
stack_trace:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -1014,21 +1023,21 @@ packages:
|
|||
name: test
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.16.8"
|
||||
version: "1.17.10"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
version: "0.4.2"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.19"
|
||||
version: "0.4.0"
|
||||
transparent_image:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -1119,7 +1128,7 @@ packages:
|
|||
name: vm_service
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.2.0"
|
||||
version: "7.1.1"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1154,7 +1163,7 @@ packages:
|
|||
name: win32
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.8"
|
||||
version: "2.2.9"
|
||||
wkt_parser:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1175,7 +1184,7 @@ packages:
|
|||
name: xml
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.1.2"
|
||||
version: "5.2.0"
|
||||
yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
@ -12,7 +12,11 @@ dependencies:
|
|||
sdk: flutter
|
||||
flutter_localizations:
|
||||
sdk: flutter
|
||||
# TODO TLAD as of 2021/09/09, the released version is incompatible with Flutter v2.5
|
||||
charts_flutter:
|
||||
git:
|
||||
url: git://github.com/google/charts.git
|
||||
path: charts_flutter
|
||||
collection:
|
||||
connectivity_plus:
|
||||
country_code:
|
||||
|
@ -113,7 +117,7 @@ flutter:
|
|||
# Test driver
|
||||
|
||||
# run (any device):
|
||||
# % flutter drive -t test_driver/app.dart
|
||||
# % flutter drive -t test_driver/app.dart --profile
|
||||
|
||||
# capture shaders in profile mode (real device only):
|
||||
# % flutter drive -t test_driver/app.dart --profile --cache-sksl --write-sksl-on-exit shaders.sksl.json
|
||||
|
|
1
shaders.sksl.json
Normal file
1
shaders.sksl.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
shaders_2.5.0.sksl.json
Normal file
1
shaders_2.5.0.sksl.json
Normal file
File diff suppressed because one or more lines are too long
|
@ -34,6 +34,7 @@ Future<void> configureAndLaunch() async {
|
|||
await settings.init();
|
||||
settings.keepScreenOn = KeepScreenOn.always;
|
||||
settings.hasAcceptedTerms = false;
|
||||
settings.isCrashlyticsEnabled = false;
|
||||
settings.locale = const Locale('en');
|
||||
settings.homePage = HomePageSetting.collection;
|
||||
settings.imageBackground = EntryBackground.checkered;
|
||||
|
|
Loading…
Reference in a new issue