mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
42ded1221a | ||
a9a22ace14 | |||
99bbea80dc | |||
26fa41f503 | |||
082aa36316 | |||
5a14ea48c1 | |||
5d43f5c556 | |||
e51a58ba4f | |||
5234de434a | |||
22f2ac99ad | |||
b08b5d0abe | |||
![]() |
96c6323c07 | ||
ae80715db1 | |||
3d7f30af00 | |||
f12cb55bbc |
10
.github/workflows/main.yml
vendored
10
.github/workflows/main.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: {}
|
||||
jobs:
|
||||
Build_MacOS:
|
||||
runs-on: macos-13
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: subosito/flutter-action@v2
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
channel: "stable"
|
||||
flutter-version-file: pubspec.yaml
|
||||
architecture: x64
|
||||
- run: sudo xcode-select --switch /Applications/Xcode_14.3.1.app
|
||||
- run: sudo xcode-select --switch /Applications/Xcode_16.0.app
|
||||
- run: flutter pub get
|
||||
# Step 1: Decode and install the certificate
|
||||
- name: Decode and install certificate
|
||||
@@ -38,12 +38,12 @@ jobs:
|
||||
|
||||
# Step 4: Attach and upload artifacts (optional)
|
||||
- name: Upload DMG
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: venera.dmg
|
||||
path: dist/venera.dmg
|
||||
Build_IOS:
|
||||
runs-on: macos-13
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: subosito/flutter-action@v2
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
channel: "stable"
|
||||
flutter-version-file: pubspec.yaml
|
||||
architecture: x64
|
||||
- run: sudo xcode-select --switch /Applications/Xcode_14.3.1.app
|
||||
- run: sudo xcode-select --switch /Applications/Xcode_16.0.app
|
||||
- run: flutter pub get
|
||||
- run: flutter build ios --release --no-codesign
|
||||
- run: |
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -42,4 +42,4 @@ app.*.map.json
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
|
||||
./add_translation.py
|
||||
add_translation.py
|
@@ -4,6 +4,7 @@
|
||||
[](https://github.com/venera-app/venera/blob/master/LICENSE)
|
||||
[](https://github.com/venera-app/venera/releases)
|
||||
[](https://github.com/venera-app/venera/stargazers)
|
||||
[](https://t.me/+Ws-IpmUutzkxMjhl)
|
||||
|
||||
A comic reader that support reading local and network comics.
|
||||
|
||||
|
@@ -1,31 +0,0 @@
|
||||
import re
|
||||
import json
|
||||
|
||||
path='./assets/translation.json'
|
||||
|
||||
with open(path, 'r',encoding='utf-8') as file:
|
||||
translations=json.load(file)
|
||||
|
||||
|
||||
while True:
|
||||
line=input()
|
||||
if line=="q":
|
||||
break
|
||||
words=line.split('-')
|
||||
if len(words)!=3:
|
||||
print("invalid entry:",line,"(len(words) != 3)"
|
||||
continue
|
||||
en=words[0]
|
||||
cn=words[1]
|
||||
tw=words[2]
|
||||
translations["zh_CN"][en]=cn
|
||||
translations["zh_TW"][en]=tw
|
||||
|
||||
|
||||
with open(path, 'w',encoding='utf-8') as file:
|
||||
json.dump(translations, file, indent=2,ensure_ascii=False)
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -169,7 +169,17 @@
|
||||
"minAppVersion @version is required": "需要最低App版本 @version",
|
||||
"Remove": "移除",
|
||||
"Long press to zoom": "长按缩放",
|
||||
"Updates Available": "更新可用"
|
||||
"Updates Available": "更新可用",
|
||||
"Unselected": "未选择",
|
||||
"Long press and drag to reorder.": "长按并拖动以重新排序。",
|
||||
"Limit image width": "限制图片宽度",
|
||||
"When using Continuous(Top to Bottom) mode": "当使用连续(从上到下)模式",
|
||||
"Open link": "打开链接",
|
||||
"Open comic": "打开漫画",
|
||||
"Move To First": "移动到最前",
|
||||
"Cancel": "取消",
|
||||
"Paused": "已暂停",
|
||||
"Pause": "暂停"
|
||||
},
|
||||
"zh_TW": {
|
||||
"Home": "首頁",
|
||||
@@ -341,6 +351,16 @@
|
||||
"minAppVersion @version is required": "需要最低App版本 @version",
|
||||
"Remove": "移除",
|
||||
"Long press to zoom": "長按縮放",
|
||||
"Updates Available": "更新可用"
|
||||
"Updates Available": "更新可用",
|
||||
"Unselected": "未選擇",
|
||||
"Long press and drag to reorder.": "長按並拖動以重新排序。",
|
||||
"Limit image width": "限制圖片寬度",
|
||||
"When using Continuous(Top to Bottom) mode": "當使用連續(從上到下)模式",
|
||||
"Open link": "打開鏈接",
|
||||
"Open comic": "打開漫畫",
|
||||
"Move To First": "移動到最前",
|
||||
"Cancel": "取消",
|
||||
"Paused": "已暫停",
|
||||
"Pause": "暫停"
|
||||
}
|
||||
}
|
@@ -10,7 +10,7 @@ export "widget_utils.dart";
|
||||
export "context.dart";
|
||||
|
||||
class _App {
|
||||
final version = "1.0.2";
|
||||
final version = "1.0.3";
|
||||
|
||||
bool get isAndroid => Platform.isAndroid;
|
||||
|
||||
|
@@ -113,6 +113,7 @@ class _Settings with ChangeNotifier {
|
||||
'downloadThreads': 5,
|
||||
'enableLongPressToZoom': true,
|
||||
'checkUpdateOnStart': true,
|
||||
'limitImageWidth': true,
|
||||
};
|
||||
|
||||
operator [](String key) {
|
||||
|
@@ -196,12 +196,6 @@ class AppDio with DioMixin {
|
||||
: rhttp.ProxySettings.proxy(proxy!),
|
||||
));
|
||||
}
|
||||
Log.info(
|
||||
"Network",
|
||||
"${options?.method ?? 'GET'} $path\n"
|
||||
"Headers: ${options?.headers}\n"
|
||||
"Data: $data\n",
|
||||
);
|
||||
return super.request(
|
||||
path,
|
||||
data: data,
|
||||
@@ -218,14 +212,14 @@ class RHttpAdapter implements HttpClientAdapter {
|
||||
rhttp.ClientSettings settings;
|
||||
|
||||
RHttpAdapter(this.settings) {
|
||||
settings.copyWith(
|
||||
settings = settings.copyWith(
|
||||
redirectSettings: const rhttp.RedirectSettings.limited(5),
|
||||
timeoutSettings: const rhttp.TimeoutSettings(
|
||||
connectTimeout: Duration(seconds: 15),
|
||||
keepAliveTimeout: Duration(seconds: 60),
|
||||
keepAlivePing: Duration(seconds: 30),
|
||||
),
|
||||
httpVersionPref: rhttp.HttpVersionPref.http1_1,
|
||||
throwOnStatusCode: false,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -238,6 +232,12 @@ class RHttpAdapter implements HttpClientAdapter {
|
||||
Stream<Uint8List>? requestStream,
|
||||
Future<void>? cancelFuture,
|
||||
) async {
|
||||
Log.info(
|
||||
"Network",
|
||||
"${options.method} ${options.uri}\n"
|
||||
"Headers: ${options.headers}\n"
|
||||
"Data: ${options.data}\n",
|
||||
);
|
||||
var res = await rhttp.Rhttp.request(
|
||||
method: switch (options.method) {
|
||||
'GET' => rhttp.HttpMethod.get,
|
||||
@@ -275,12 +275,7 @@ class RHttpAdapter implements HttpClientAdapter {
|
||||
var data = res.body;
|
||||
if(headers['content-encoding']?.contains('gzip') ?? false) {
|
||||
// rhttp does not support gzip decoding
|
||||
var buffer = <int>[];
|
||||
await for (var chunk in data) {
|
||||
buffer.addAll(chunk);
|
||||
}
|
||||
data = Stream.value(Uint8List.fromList(gzip.decode(buffer)));
|
||||
buffer.clear();
|
||||
data = gzip.decoder.bind(data).map((data) => Uint8List.fromList(data));
|
||||
}
|
||||
return ResponseBody(
|
||||
data,
|
||||
|
@@ -90,7 +90,7 @@ class ImagesDownloadTask extends DownloadTask with _TransferSpeedMixin {
|
||||
var local = LocalManager().find(id, comicType);
|
||||
if (path != null) {
|
||||
if (local == null) {
|
||||
Directory(path!).deleteIgnoreError();
|
||||
Directory(path!).deleteIgnoreError(recursive: true);
|
||||
} else if (chapters != null) {
|
||||
for (var c in chapters!) {
|
||||
var dir = Directory(FilePath.join(path!, c));
|
||||
|
@@ -6,7 +6,6 @@ Future<void> newFolder() async {
|
||||
context: App.rootContext,
|
||||
builder: (context) {
|
||||
var controller = TextEditingController();
|
||||
var folders = LocalFavoritesManager().folderNames;
|
||||
String? error;
|
||||
|
||||
return StatefulBuilder(builder: (context, setState) {
|
||||
|
@@ -152,7 +152,8 @@ class _FavoritesPageState extends State<FavoritesPage> {
|
||||
} else {
|
||||
var favoriteData = getFavoriteDataOrNull(folder!);
|
||||
if (favoriteData == null) {
|
||||
return const Center(child: Text("Unknown source"));
|
||||
folder = null;
|
||||
return buildBody();
|
||||
} else {
|
||||
return NetworkFavoritePage(favoriteData, key: Key(folder!));
|
||||
}
|
||||
|
@@ -15,10 +15,8 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
|
||||
late List<FavoriteItem> comics;
|
||||
|
||||
void updateComics() {
|
||||
print(comics.length);
|
||||
setState(() {
|
||||
comics = LocalFavoritesManager().getAllComics(widget.folder);
|
||||
print(comics.length);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -107,7 +105,9 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
|
||||
},
|
||||
).then(
|
||||
(value) {
|
||||
setState(() {});
|
||||
if(mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
);
|
||||
}),
|
||||
@@ -199,6 +199,7 @@ class _ReorderComicsPageState extends State<_ReorderComicsPage> {
|
||||
var comicSource = e.type.comicSource;
|
||||
return ComicTile(
|
||||
key: Key(e.hashCode.toString()),
|
||||
enableLongPressed: false,
|
||||
comic: Comic(
|
||||
e.name,
|
||||
e.coverPath,
|
||||
|
@@ -22,6 +22,8 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> {
|
||||
|
||||
_DragListener? dragListener;
|
||||
|
||||
int fingers = 0;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_tapGestureRecognizer = TapGestureRecognizer()
|
||||
@@ -38,6 +40,7 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> {
|
||||
return Listener(
|
||||
behavior: HitTestBehavior.translucent,
|
||||
onPointerDown: (event) {
|
||||
fingers++;
|
||||
_lastTapPointer = event.pointer;
|
||||
_lastTapMoveDistance = Offset.zero;
|
||||
_tapGestureRecognizer.addPointer(event);
|
||||
@@ -46,7 +49,7 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> {
|
||||
_dragInProgress = false;
|
||||
}
|
||||
Future.delayed(_kLongPressMinTime, () {
|
||||
if (_lastTapPointer == event.pointer) {
|
||||
if (_lastTapPointer == event.pointer && fingers == 1) {
|
||||
if(_lastTapMoveDistance!.distanceSquared < 20.0 * 20.0) {
|
||||
onLongPressedDown(event.position);
|
||||
_longPressInProgress = true;
|
||||
@@ -67,6 +70,19 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> {
|
||||
}
|
||||
},
|
||||
onPointerUp: (event) {
|
||||
fingers--;
|
||||
if (_longPressInProgress) {
|
||||
onLongPressedUp(event.position);
|
||||
}
|
||||
if(_dragInProgress) {
|
||||
dragListener?.onEnd?.call();
|
||||
_dragInProgress = false;
|
||||
}
|
||||
_lastTapPointer = null;
|
||||
_lastTapMoveDistance = null;
|
||||
},
|
||||
onPointerCancel: (event) {
|
||||
fingers--;
|
||||
if (_longPressInProgress) {
|
||||
onLongPressedUp(event.position);
|
||||
}
|
||||
|
@@ -471,18 +471,24 @@ class _ContinuousModeState extends State<_ContinuousMode>
|
||||
},
|
||||
child: widget,
|
||||
);
|
||||
var width = MediaQuery.of(context).size.width;
|
||||
var height = MediaQuery.of(context).size.height;
|
||||
if(appdata.settings['limitImageWidth'] && width / height > 0.7) {
|
||||
width = height * 0.7;
|
||||
}
|
||||
|
||||
return PhotoView.customChild(
|
||||
backgroundDecoration: BoxDecoration(
|
||||
color: context.colorScheme.surface,
|
||||
),
|
||||
childSize: Size(width, height),
|
||||
minScale: 1.0,
|
||||
maxScale: 2.5,
|
||||
strictScale: true,
|
||||
controller: photoViewController,
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
height: MediaQuery.of(context).size.height,
|
||||
width: width,
|
||||
height: height,
|
||||
child: widget,
|
||||
),
|
||||
);
|
||||
|
@@ -369,6 +369,9 @@ class _SearchPageState extends State<SearchPage> {
|
||||
),
|
||||
trailing: const Icon(Icons.arrow_right),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
suggestions.clear();
|
||||
});
|
||||
handleAppLink(Uri.parse(controller.text));
|
||||
},
|
||||
);
|
||||
|
@@ -42,7 +42,7 @@ class _SearchResultPageState extends State<SearchResultPage> {
|
||||
|
||||
void search([String? text]) {
|
||||
if (text != null) {
|
||||
if(suggestionsController.entry != null) {
|
||||
if (suggestionsController.entry != null) {
|
||||
suggestionsController.remove();
|
||||
}
|
||||
setState(() {
|
||||
@@ -135,20 +135,24 @@ class _SearchResultPageState extends State<SearchResultPage> {
|
||||
onChanged: onChanged,
|
||||
action: buildAction(),
|
||||
),
|
||||
loadPage: source!.searchPageData!.loadPage == null ? null : (i) {
|
||||
return source.searchPageData!.loadPage!(
|
||||
text,
|
||||
i,
|
||||
options,
|
||||
);
|
||||
},
|
||||
loadNext: source.searchPageData!.loadNext == null ? null : (i) {
|
||||
return source.searchPageData!.loadNext!(
|
||||
text,
|
||||
i,
|
||||
options,
|
||||
);
|
||||
},
|
||||
loadPage: source!.searchPageData!.loadPage == null
|
||||
? null
|
||||
: (i) {
|
||||
return source.searchPageData!.loadPage!(
|
||||
text,
|
||||
i,
|
||||
options,
|
||||
);
|
||||
},
|
||||
loadNext: source.searchPageData!.loadNext == null
|
||||
? null
|
||||
: (i) {
|
||||
return source.searchPageData!.loadNext!(
|
||||
text,
|
||||
i,
|
||||
options,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -424,6 +428,11 @@ class _SearchSettingsDialogState extends State<_SearchSettingsDialog> {
|
||||
setState(() {
|
||||
searchTarget = e.key;
|
||||
options.clear();
|
||||
final searchOptions = ComicSource.find(searchTarget)!
|
||||
.searchPageData!
|
||||
.searchOptions ??
|
||||
<SearchOptions>[];
|
||||
options = searchOptions.map((e) => e.defaultValue).toList();
|
||||
onChanged();
|
||||
});
|
||||
},
|
||||
|
@@ -61,6 +61,14 @@ class _ReaderSettingsState extends State<ReaderSettings> {
|
||||
widget.onChanged?.call('enableLongPressToZoom');
|
||||
},
|
||||
).toSliver(),
|
||||
_SwitchSetting(
|
||||
title: 'Limit image width'.tl,
|
||||
subtitle: 'When using Continuous(Top to Bottom) mode'.tl,
|
||||
settingKey: 'limitImageWidth',
|
||||
onChanged: () {
|
||||
widget.onChanged?.call('limitImageWidth');
|
||||
},
|
||||
).toSliver(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ class _SwitchSetting extends StatefulWidget {
|
||||
required this.title,
|
||||
required this.settingKey,
|
||||
this.onChanged,
|
||||
this.subtitle,
|
||||
});
|
||||
|
||||
final String title;
|
||||
@@ -13,6 +14,8 @@ class _SwitchSetting extends StatefulWidget {
|
||||
|
||||
final VoidCallback? onChanged;
|
||||
|
||||
final String? subtitle;
|
||||
|
||||
@override
|
||||
State<_SwitchSetting> createState() => _SwitchSettingState();
|
||||
}
|
||||
@@ -24,6 +27,7 @@ class _SwitchSettingState extends State<_SwitchSetting> {
|
||||
|
||||
return ListTile(
|
||||
title: Text(widget.title),
|
||||
subtitle: widget.subtitle == null ? null : Text(widget.subtitle!),
|
||||
trailing: Switch(
|
||||
value: appdata.settings[widget.settingKey],
|
||||
onChanged: (value) {
|
||||
|
44
pubspec.lock
44
pubspec.lock
@@ -345,10 +345,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_reorderable_grid_view
|
||||
sha256: "40abcc5bff228ebff119326502e7357ee6399956b60b80b17385e9770b7458c0"
|
||||
sha256: "93a2b9e279bf40b9333428a67e70e520ca1528554984eb6f6304538400897e64"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.1"
|
||||
version: "5.3.2"
|
||||
flutter_rust_bridge:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -638,10 +638,42 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_retriever
|
||||
sha256: "6ee02c8a1158e6dae7ca430da79436e3b1c9563c8cf02f524af997c201ac2b90"
|
||||
sha256: "570dbc8e4f70bac451e0efc9c9bb19fa2d6799a11e6ef04f946d7886d2e23d0c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.9"
|
||||
version: "0.2.0"
|
||||
screen_retriever_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_retriever_linux
|
||||
sha256: f7f8120c92ef0784e58491ab664d01efda79a922b025ff286e29aa123ea3dd18
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
screen_retriever_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_retriever_macos
|
||||
sha256: "71f956e65c97315dd661d71f828708bd97b6d358e776f1a30d5aa7d22d78a149"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
screen_retriever_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_retriever_platform_interface
|
||||
sha256: ee197f4581ff0d5608587819af40490748e1e39e648d7680ecf95c05197240c0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
screen_retriever_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_retriever_windows
|
||||
sha256: "449ee257f03ca98a57288ee526a301a430a344a161f9202b4fcc38576716fe13"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
scrollable_positioned_list:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -868,10 +900,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: window_manager
|
||||
sha256: ab8b2a7f97543d3db2b506c9d875e637149d48ee0c6a5cb5f5fd6e0dac463792
|
||||
sha256: "732896e1416297c63c9e3fb95aea72d0355f61390263982a47fd519169dc5059"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.2"
|
||||
version: "0.4.3"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@@ -2,7 +2,7 @@ name: venera
|
||||
description: "A comic app."
|
||||
publish_to: 'none'
|
||||
|
||||
version: 1.0.2+102
|
||||
version: 1.0.3+103
|
||||
|
||||
environment:
|
||||
sdk: '>=3.5.0 <4.0.0'
|
||||
@@ -15,7 +15,7 @@ dependencies:
|
||||
flutter_localizations:
|
||||
sdk: flutter
|
||||
intl: any
|
||||
window_manager: ^0.4.2
|
||||
window_manager: ^0.4.3
|
||||
sqlite3: any
|
||||
sqlite3_flutter_libs: any
|
||||
flutter_qjs:
|
||||
@@ -39,7 +39,7 @@ dependencies:
|
||||
url: https://github.com/venera-app/flutter.widgets
|
||||
ref: 09e756b1f1b04e6298318d99ec20a787fb360f59
|
||||
path: packages/scrollable_positioned_list
|
||||
flutter_reorderable_grid_view: 5.0.1
|
||||
flutter_reorderable_grid_view: 5.3.2
|
||||
yaml: any
|
||||
uuid: ^4.5.1
|
||||
desktop_webview_window:
|
||||
|
@@ -52,9 +52,11 @@ Source: "{#RootPath}\build\windows\x64\runner\Release\WebView2Loader.dll"; DestD
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\share_plus_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\url_launcher_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\screen_retriever_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\screen_retriever_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\window_manager_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\zip_flutter.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\rhttp.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\lodepng_flutter.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#RootPath}\build\windows\x64\runner\Release\data\*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
|
Reference in New Issue
Block a user