feat: change app icon
|
|
@ -1,27 +1,52 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="0 0 64 64"
|
||||
width="64"
|
||||
height="64"
|
||||
role="img"
|
||||
aria-labelledby="title desc"
|
||||
>
|
||||
<title id="title">PDF Signature</title>
|
||||
<desc id="desc">An app icon showing a PDF page with a folded corner and a handwritten signature.</desc>
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="0 0 512 512" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#000000;}
|
||||
</style>
|
||||
<!-- Background tile -->
|
||||
<rect x="4" y="4" width="56" height="56" rx="12" fill="#2563EB" />
|
||||
|
||||
<!-- Paper with folded corner -->
|
||||
<g>
|
||||
<path class="st0" d="M56.007,114.35c-5.535-5.539-14.51-5.539-20.045,0L4.148,146.159c-5.531,5.539-5.531,14.506,0,20.046
|
||||
l20.622,20.621l51.859-51.855L56.007,114.35z"/>
|
||||
<polygon class="st0" points="286.422,396.623 268.742,327.077 216.884,378.94 "/>
|
||||
<path class="st0" d="M258.136,316.475L86.058,144.397L34.2,196.26l172.073,172.077L258.136,316.475z M87.468,166.56
|
||||
l149.919,149.922l-11.784,11.78L75.684,178.348L87.468,166.56z"/>
|
||||
<rect x="195.662" y="132.491" class="st0" width="29.356" height="28.017"/>
|
||||
<rect x="195.662" y="200.693" class="st0" width="29.356" height="28.009"/>
|
||||
<rect x="256.69" y="132.491" class="st0" width="173.056" height="28.017"/>
|
||||
<rect x="256.69" y="200.693" class="st0" width="173.056" height="28.009"/>
|
||||
<rect x="288.598" y="268.894" class="st0" width="141.148" height="28.01"/>
|
||||
<path class="st0" d="M429.817,11.059H195.582c-45.32,0-82.182,36.858-82.182,82.179v32.726l30.427,30.435V93.238
|
||||
c0-28.586,23.178-51.752,51.755-51.752h234.235c28.594,0,51.756,23.166,51.756,51.752v254.042h-80.097
|
||||
c-23.822,0-43.124,19.318-43.124,43.132v80.101h-162.77c-28.578,0-51.755-23.166-51.755-51.752v-37.072l-6.234-1.587l6.234-6.235
|
||||
v-22.202L113.4,321.239v97.522c0,45.313,36.862,82.179,82.182,82.179h162.77h12.598l8.917-8.913l123.224-123.224l8.909-8.912
|
||||
v-12.61V93.238C512,47.917,475.138,11.059,429.817,11.059z"/>
|
||||
<path
|
||||
d="M20 16h18l10 10v22c0 2.2-1.8 4-4 4H20c-2.2 0-4-1.8-4-4V20c0-2.2 1.8-4 4-4z"
|
||||
fill="#FFFFFF"
|
||||
/>
|
||||
<path
|
||||
d="M38 16v8c0 3.3 2.7 6 6 6h8l-14-14z"
|
||||
fill="#F3F4F6"
|
||||
/>
|
||||
</g>
|
||||
|
||||
<!-- Signature stroke -->
|
||||
<path
|
||||
d="M18 42c3-2 6-2.2 8.5 0 2.5 2.2 4.8 1.8 8.2-1.2 3.4-3 6.9-5.3 9.4-2.8 1.2 1.2 0.5 3.2-1.2 3.6-3.5 0.9 3.3-6.8 6.4-4.6 2 1.4-1.5 6.7-4.8 7.8-4.6 1.6-10.9-0.6-13.8-0.6-4.4 0-7.5 2.4-12 2.8"
|
||||
fill="none"
|
||||
stroke="#1F2937"
|
||||
stroke-width="2.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
|
||||
<!-- Subtle page shadow for depth (kept minimal for clarity) -->
|
||||
<path
|
||||
d="M20 16h18l10 10v1H44c-4.4 0-8-3.6-8-8v-3H20c-1.1 0-2 .9-2 2v0c0-1.1.9-2 2-2z"
|
||||
fill="#000"
|
||||
opacity=".05"
|
||||
/>
|
||||
|
||||
<!-- Optional PDF label dots (very subtle) -->
|
||||
<g fill="#E53935" opacity=".9">
|
||||
<circle cx="24" cy="28" r="1" />
|
||||
<circle cx="28" cy="28" r="1" />
|
||||
<circle cx="32" cy="28" r="1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
|
@ -2,7 +2,7 @@
|
|||
<application
|
||||
android:label="pdf_signature"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
android:icon="@mipmap/launcher_icon">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="0 0 64 64"
|
||||
width="64"
|
||||
height="64"
|
||||
role="img"
|
||||
aria-labelledby="title desc"
|
||||
>
|
||||
<title id="title">PDF Signature</title>
|
||||
<desc id="desc">An app icon showing a PDF page with a folded corner and a handwritten signature.</desc>
|
||||
|
||||
<!-- Background tile -->
|
||||
<rect x="4" y="4" width="56" height="56" rx="12" fill="#2563EB" />
|
||||
|
||||
<!-- Paper with folded corner -->
|
||||
<g>
|
||||
<path
|
||||
d="M20 16h18l10 10v22c0 2.2-1.8 4-4 4H20c-2.2 0-4-1.8-4-4V20c0-2.2 1.8-4 4-4z"
|
||||
fill="#FFFFFF"
|
||||
/>
|
||||
<path
|
||||
d="M38 16v8c0 3.3 2.7 6 6 6h8l-14-14z"
|
||||
fill="#F3F4F6"
|
||||
/>
|
||||
</g>
|
||||
|
||||
<!-- Signature stroke -->
|
||||
<path
|
||||
d="M18 42c3-2 6-2.2 8.5 0 2.5 2.2 4.8 1.8 8.2-1.2 3.4-3 6.9-5.3 9.4-2.8 1.2 1.2 0.5 3.2-1.2 3.6-3.5 0.9 3.3-6.8 6.4-4.6 2 1.4-1.5 6.7-4.8 7.8-4.6 1.6-10.9-0.6-13.8-0.6-4.4 0-7.5 2.4-12 2.8"
|
||||
fill="none"
|
||||
stroke="#1F2937"
|
||||
stroke-width="2.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
|
||||
<!-- Subtle page shadow for depth (kept minimal for clarity) -->
|
||||
<path
|
||||
d="M20 16h18l10 10v1H44c-4.4 0-8-3.6-8-8v-3H20c-1.1 0-2 .9-2 2v0c0-1.1.9-2 2-2z"
|
||||
fill="#000"
|
||||
opacity=".05"
|
||||
/>
|
||||
|
||||
<!-- Optional PDF label dots (very subtle) -->
|
||||
<g fill="#E53935" opacity=".9">
|
||||
<circle cx="24" cy="28" r="1" />
|
||||
<circle cx="28" cy="28" r="1" />
|
||||
<circle cx="32" cy="28" r="1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -427,7 +427,7 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
|
|
@ -484,7 +484,7 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
|
|
|
|||
|
|
@ -1,122 +1 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "83.5x83.5",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "1024x1024",
|
||||
"idiom" : "ios-marketing",
|
||||
"filename" : "Icon-App-1024x1024@1x.png",
|
||||
"scale" : "1x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 1012 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.2 KiB |
|
|
@ -117,14 +117,15 @@ class ExportService {
|
|||
for (var i = 0; i < pagePlacements.length; i++) {
|
||||
final placement = pagePlacements[i];
|
||||
final r = placement.rect;
|
||||
final left = r.left / uiPageSize.width * widthPts;
|
||||
final top = r.top / uiPageSize.height * heightPts;
|
||||
final w = r.width / uiPageSize.width * widthPts;
|
||||
final h = r.height / uiPageSize.height * heightPts;
|
||||
// rect is stored in normalized units (0..1) relative to page
|
||||
final left = r.left * widthPts;
|
||||
final top = r.top * heightPts;
|
||||
final w = r.width * widthPts;
|
||||
final h = r.height * heightPts;
|
||||
|
||||
// Process the signature asset with its graphic adjustments
|
||||
Uint8List? bytes = placement.asset.bytes;
|
||||
if (bytes != null && bytes.isNotEmpty) {
|
||||
Uint8List bytes = placement.asset.bytes;
|
||||
if (bytes.isNotEmpty) {
|
||||
try {
|
||||
// Decode the image
|
||||
final decoded = img.decodeImage(bytes);
|
||||
|
|
@ -155,9 +156,11 @@ class ExportService {
|
|||
}
|
||||
|
||||
// Use fallback if no bytes available
|
||||
bytes ??= signatureImageBytes;
|
||||
if (bytes.isEmpty && signatureImageBytes != null) {
|
||||
bytes = signatureImageBytes;
|
||||
}
|
||||
|
||||
if (bytes != null && bytes.isNotEmpty) {
|
||||
if (bytes.isNotEmpty) {
|
||||
pw.MemoryImage? imgObj;
|
||||
try {
|
||||
imgObj = pw.MemoryImage(bytes);
|
||||
|
|
@ -229,14 +232,15 @@ class ExportService {
|
|||
for (var i = 0; i < pagePlacements.length; i++) {
|
||||
final placement = pagePlacements[i];
|
||||
final r = placement.rect;
|
||||
final left = r.left / uiPageSize.width * widthPts;
|
||||
final top = r.top / uiPageSize.height * heightPts;
|
||||
final w = r.width / uiPageSize.width * widthPts;
|
||||
final h = r.height / uiPageSize.height * heightPts;
|
||||
// rect is stored in normalized units (0..1) relative to page
|
||||
final left = r.left * widthPts;
|
||||
final top = r.top * heightPts;
|
||||
final w = r.width * widthPts;
|
||||
final h = r.height * heightPts;
|
||||
|
||||
// Process the signature asset with its graphic adjustments
|
||||
Uint8List? bytes = placement.asset.bytes;
|
||||
if (bytes != null && bytes.isNotEmpty) {
|
||||
Uint8List bytes = placement.asset.bytes;
|
||||
if (bytes.isNotEmpty) {
|
||||
try {
|
||||
// Decode the image
|
||||
final decoded = img.decodeImage(bytes);
|
||||
|
|
@ -267,9 +271,11 @@ class ExportService {
|
|||
}
|
||||
|
||||
// Use fallback if no bytes available
|
||||
bytes ??= signatureImageBytes;
|
||||
if (bytes.isEmpty && signatureImageBytes != null) {
|
||||
bytes = signatureImageBytes;
|
||||
}
|
||||
|
||||
if (bytes != null && bytes.isNotEmpty) {
|
||||
if (bytes.isNotEmpty) {
|
||||
pw.MemoryImage? imgObj;
|
||||
try {
|
||||
// Ensure PNG for transparency if not already
|
||||
|
|
|
|||
|
|
@ -47,7 +47,10 @@ class PdfViewModel extends ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
Document get document => ref.watch(documentRepositoryProvider);
|
||||
// Do not watch the document repository here; watching would cause this
|
||||
// ChangeNotifier to be disposed/recreated on every document change, which
|
||||
// resets transient UI state like locked placements. Read instead.
|
||||
Document get document => ref.read(documentRepositoryProvider);
|
||||
|
||||
void jumpToPage(int page) {
|
||||
currentPage = page;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:file_selector/file_selector.dart' as fs;
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/data/services/export_service.dart';
|
||||
|
||||
|
|
@ -9,5 +10,14 @@ final exportServiceProvider = Provider<ExportService>((ref) => ExportService());
|
|||
|
||||
/// Provider for a function that picks a save path. Tests may override.
|
||||
final savePathPickerProvider = Provider<Future<String?> Function()>((ref) {
|
||||
return () async => null;
|
||||
return () async {
|
||||
// Desktop save dialog with PDF filter; mobile platforms may not support this.
|
||||
final group = fs.XTypeGroup(label: 'PDF', extensions: ['pdf']);
|
||||
final location = await fs.getSaveLocation(
|
||||
acceptedTypeGroups: [group],
|
||||
suggestedName: 'signed.pdf',
|
||||
confirmButtonText: 'Save',
|
||||
);
|
||||
return location?.path; // null if user cancels
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
{
|
||||
"info": {
|
||||
"version": 1,
|
||||
"author": "xcode"
|
||||
},
|
||||
"images": [
|
||||
{
|
||||
"size": "16x16",
|
||||
|
|
@ -60,9 +64,5 @@
|
|||
"filename": "app_icon_1024.png",
|
||||
"scale": "2x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 992 B |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.6 KiB |
20
pubspec.yaml
|
|
@ -85,6 +85,7 @@ dev_dependencies:
|
|||
json_serializable: ^6.11.0
|
||||
dead_code_analyzer: ^1.1.0
|
||||
faker_dart: ^0.2.3
|
||||
flutter_launcher_icons: "^0.14.4"
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
|
@ -128,3 +129,22 @@ flutter:
|
|||
#
|
||||
# For details regarding fonts from package dependencies,
|
||||
# see https://flutter.dev/to/font-from-package
|
||||
|
||||
|
||||
flutter_launcher_icons:
|
||||
android: "launcher_icon"
|
||||
ios: true
|
||||
image_path: "assets/icon/pdf_signature-icon.png"
|
||||
min_sdk_android: 21 # android min sdk min:16, default 21
|
||||
web:
|
||||
generate: true
|
||||
image_path: "assets/icon/pdf_signature-icon.png"
|
||||
background_color: "#hexcode"
|
||||
theme_color: "#hexcode"
|
||||
windows:
|
||||
generate: true
|
||||
image_path: "assets/icon/pdf_signature-icon.png"
|
||||
icon_size: 48 # min:48, max:256, default: 48
|
||||
macos:
|
||||
generate: true
|
||||
image_path: "assets/icon/pdf_signature-icon.png"
|
||||
|
|
|
|||
BIN
web/favicon.png
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 992 B |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 3.6 KiB |
|
|
@ -3,8 +3,8 @@
|
|||
"short_name": "pdf_signature",
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"background_color": "#0175C2",
|
||||
"theme_color": "#0175C2",
|
||||
"background_color": "#hexcode",
|
||||
"theme_color": "#hexcode",
|
||||
"description": "A new Flutter project.",
|
||||
"orientation": "portrait-primary",
|
||||
"prefer_related_applications": false,
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 1.3 KiB |