diff --git a/images/alipay.png b/images/alipay.png index 22818e2..8e748c0 100644 Binary files a/images/alipay.png and b/images/alipay.png differ diff --git a/lib/main.dart b/lib/main.dart index 3200148..362f10c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -23,6 +23,8 @@ import 'dart:math'; //import 'package:flutter/services.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/services.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:flutter/material.dart'; import 'package:xterm/xterm.dart'; @@ -140,17 +142,9 @@ class _InfoPageState extends State { 就可以访问手机存储 如果认为界面大小比例不合适 -可以通过调整左栏设置-高级设置里的scale -快捷调整界面缩放 -这个功能是原本的noVNC里没有的哦! -具体的改动可以在这里看到: -https://github.com/Cateners/noVNC/tree/scale_factor - -其余两个选项是 -quality(图像质量)和compression(压缩等级) -...是noVNC中本来就有的选项。 +可以通过调整图形界面左栏设置-高级里的屏幕缩放比例 如果感觉界面卡卡的 -可以适当调低 +可以适当调低图像质量或压缩等级 如果你想安装其他软件 可以使用容器自带的tmoe @@ -184,7 +178,7 @@ VSCode、输入法 三星Galaxy S21 Ultra, 安卓13, 黑屏 红米Note 12, 安卓13(miui14), 黑屏 红米Note 11T Pro+, miui13.0.4,“无法连接” -Vivo Pad,安卓13,看不见鼠标移动 +Vivo Pad,安卓13,看不见鼠标移动(可以去左栏设置开启显示原系统光标替代) 关于这个 我目前没有什么好的解决办法 (毕竟我没有这些设备 @@ -662,6 +656,10 @@ SOFTWARE. 启用终端: 观看2个广告 启用小键盘: 观看3个广告 关闭横幅广告: 观看5个广告 +终端最大行数修改: 观看6个广告 + +我设置了每天最多可以看5个广告。 +只要看满5个广告, 就可以临时解锁全部功能。 (本来最开始设置是看一个广告就能全部解锁的 然后我自己测试的时候 @@ -734,6 +732,31 @@ class LoadingPage extends StatelessWidget { } } +class ForceScaleGestureRecognizer extends ScaleGestureRecognizer { + @override + void rejectGesture(int pointer) { + super.acceptGesture(pointer); + } +} + +RawGestureDetector forceScaleGestureDetector({ + GestureScaleUpdateCallback? onScaleUpdate, + GestureScaleEndCallback? onScaleEnd, + Widget? child, +}) { + return RawGestureDetector( + gestures: { + ForceScaleGestureRecognizer:GestureRecognizerFactoryWithHandlers(() { + return ForceScaleGestureRecognizer(); + }, (detector) { + detector.onUpdate = onScaleUpdate; + detector.onEnd = onScaleEnd; + }) + }, + child: child, + ); +} + class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); @@ -800,10 +823,16 @@ class _MyHomePageState extends State { bannerAdsFailedToLoad = true; }); }, - ),Expanded(flex: 1, child: AnimatedSwitcher( + ), Expanded(flex: 1, child: AnimatedSwitcher( duration: const Duration(milliseconds: 256), child: [ - Column(children: [Expanded(child: TerminalView(G.termPtys[G.currentContainer]!.terminal)), + Column(children: [Expanded(child: forceScaleGestureDetector(onScaleUpdate: (details) { + setState(() { + G.termFontScale = (details.scale * G.prefs.getDouble("termFontScale")!).clamp(0.2, 5); + }); + }, onScaleEnd: (details) async { + await G.prefs.setDouble("termFontScale", G.termFontScale); + }, child: TerminalView(G.termPtys[G.currentContainer]!.terminal, textScaleFactor: G.termFontScale))), G.prefs.getBool("isTerminalCommandsEnabled")!?Padding(padding: const EdgeInsets.all(8), child: SingleChildScrollView(scrollDirection: Axis.horizontal, child: Row(children: [AnimatedBuilder( animation: G.keyboard, @@ -995,12 +1024,33 @@ class _MyHomePageState extends State { headerBuilder: ((context, isExpanded) { return const ListTile(title: Text("全局设置"), subtitle: Text("在这里关广告、开启终端编辑")); }), body: Padding(padding: const EdgeInsets.all(12), child: Column(children: [ - TextFormField(maxLines: null, initialValue: G.prefs.getString("defaultAudioPort"), decoration: const InputDecoration(border: OutlineInputBorder(), labelText: "pulseaudio接收端口"), onChanged: (value) async { - await G.prefs.setString("defaultAudioPort", value); - }), - SizedBox.fromSize(size: const Size.square(8)), + TextFormField(autovalidateMode: AutovalidateMode.onUserInteraction, initialValue: G.prefs.getInt("termMaxLines")!.toString(), decoration: const InputDecoration(border: OutlineInputBorder(), labelText: "终端最大行数(重启软件生效)"), readOnly: Util.shouldWatchAds(6), + keyboardType: TextInputType.number, + onTap: () { + if (Util.shouldWatchAds(6)) { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("观看六次视频广告永久解锁><")) + ); + } + }, + validator: (value) { + return Util.validateBetween(value, 1024, 2147483647, () async { + await G.prefs.setInt("termMaxLines", int.parse(value!)); + }); + },), + SizedBox.fromSize(size: const Size.square(16)), + TextFormField(autovalidateMode: AutovalidateMode.onUserInteraction, initialValue: G.prefs.getInt("defaultAudioPort")!.toString(), decoration: const InputDecoration(border: OutlineInputBorder(), labelText: "pulseaudio接收端口"), + keyboardType: TextInputType.number, + validator: (value) { + return Util.validateBetween(value, 0, 65535, () async { + await G.prefs.setInt("defaultAudioPort", int.parse(value!)); + }); + } + ), + SizedBox.fromSize(size: const Size.square(16)), SwitchListTile(title: const Text("关闭横幅广告"), value: G.prefs.getBool("isBannerAdsClosed")!, onChanged:(value) { - if (value && (G.prefs.getInt("adsWatchedTotal")! < 5)) { + if (value && Util.shouldWatchAds(5)) { ScaffoldMessenger.of(context).hideCurrentSnackBar(); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("观看五次视频广告永久解锁><")) @@ -1012,7 +1062,7 @@ class _MyHomePageState extends State { },), SizedBox.fromSize(size: const Size.square(8)), SwitchListTile(title: const Text("启用终端"), value: G.prefs.getBool("isTerminalWriteEnabled")!, onChanged:(value) { - if (value && (G.prefs.getInt("adsWatchedTotal")! < 2)) { + if (value && Util.shouldWatchAds(2)) { ScaffoldMessenger.of(context).hideCurrentSnackBar(); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: const Text("观看两次视频广告永久解锁><"), action: SnackBarAction(label: "啊?", onPressed: () { @@ -1027,7 +1077,7 @@ class _MyHomePageState extends State { },), SizedBox.fromSize(size: const Size.square(8)), SwitchListTile(title: const Text("启用终端小键盘"), value: G.prefs.getBool("isTerminalCommandsEnabled")!, onChanged:(value) { - if (value && (G.prefs.getInt("adsWatchedTotal")! < 3)) { + if (value && Util.shouldWatchAds(3)) { ScaffoldMessenger.of(context).hideCurrentSnackBar(); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("观看三次视频广告永久解锁><")) diff --git a/lib/workflow.dart b/lib/workflow.dart index 594442a..60ca7f5 100644 --- a/lib/workflow.dart +++ b/lib/workflow.dart @@ -114,6 +114,27 @@ class Util { } await G.prefs.setStringList("adsBonus", ret); } + + //根据已看广告量判断是否应该继续看广告 + static bool shouldWatchAds(int expectNum) { + return (G.prefs.getInt("adsWatchedTotal")! < expectNum) && (G.prefs.getInt("vip")! < 1) && (G.prefs.getInt("adsWatchedToday")! < 5); + } + + //限定字符串在min和max之间, 给文本框的validator + static String? validateBetween(String? value, int min, int max, Function opr) { + if (value == null || value.isEmpty) { + return "请输入数字"; + } + int? parsedValue = int.tryParse(value); + if (parsedValue == null) { + return "请输入有效的数字"; + } + if (parsedValue < min || parsedValue > max) { + return "请输入$min到$max之间的数字"; + } + opr(); + return null; + } } //来自xterms关于操作ctrl, shift, alt键的示例 @@ -171,7 +192,7 @@ class TermPty { late final Pty pty; TermPty() { - terminal = Terminal(inputHandler: G.keyboard); + terminal = Terminal(inputHandler: G.keyboard, maxLines: G.prefs.getInt("termMaxLines")!); pty = Pty.start( "/system/bin/sh", workingDirectory: G.dataPath, @@ -240,6 +261,8 @@ class G { static late Map termPtys; //为容器存放TermPty数据 static late AdManager ads;//广告实例 static late VirtualKeyboard keyboard; + //终端字体大小,存储为G.prefs的termFontScale + static double termFontScale = 1; //看广告可以获得的奖励。 @@ -257,7 +280,7 @@ class G { //所有key //int defaultContainer = 0: 默认启动第0个容器 - //String defaultAudioPort = 4713: 默认pulseaudio端口(为了避免和其它软件冲突改成4718了) !!!注意!这个值是String类型 + //int defaultAudioPort = 4718: 默认pulseaudio端口(为了避免和其它软件冲突改成4718了,原默认4713) //bool autoLaunchVnc = true: 是否自动启动VNC并跳转 //String lastDate: 上次启动软件的日期,yyyy-MM-dd //int adsWatchedToday: 今日视频广告观看数量 @@ -267,6 +290,9 @@ class G { //bool isTerminalWriteEnabled = false //bool terminalWriteCanBeEnabled = false 看一次视频广告永久开启,历史遗留 //bool isTerminalCommandsEnabled = false + //int termMaxLines = 4095 终端最大行数 + //double termFontScale = 1 终端字体大小 + //int vip = 0 用户等级,vip免广告,你要改吗?(ToT) //? int bootstrapVersion: 启动包版本 //String[] containersInfo: 所有容器信息(json) //{name, boot:"\$DATA_DIR/bin/proot ...", vnc:"startnovnc", vncUrl:"...", commands:[{name:"更新和升级", command:"apt update -y && apt upgrade -y"}, ...]} @@ -362,7 +388,7 @@ class Workflow { //给proot的tmp文件夹,虽然我不知道为什么proot要这个 Util.createDirFromString("${G.dataPath}/proot_tmp"); //解压后得到bin文件夹和libexec文件夹 - //bin存放了proot和pulseaudio + //bin存放了proot, pulseaudio, tar等 //libexec存放了proot loader await Util.copyAsset( "assets/assets.zip", @@ -410,7 +436,7 @@ export PATH=\$DATA_DIR/bin:\$PATH export PROOT_TMP_DIR=\$DATA_DIR/proot_tmp export PROOT_LOADER=\$DATA_DIR/libexec/proot/loader export PROOT_LOADER_32=\$DATA_DIR/libexec/proot/loader32 -#export PROOT_L2S_DIR=\$CONTAINER_DIR/.l2s +export PROOT_L2S_DIR=\$CONTAINER_DIR/.l2s \$DATA_DIR/bin/proot --link2symlink sh -c "cat xa* | \$DATA_DIR/bin/tar x -J --delay-directory-restore --preserve-permissions -v -C containers/0" #Script from proot-distro chmod u+rw "\$CONTAINER_DIR/etc/passwd" "\$CONTAINER_DIR/etc/shadow" "\$CONTAINER_DIR/etc/group" "\$CONTAINER_DIR/etc/gshadow" @@ -444,22 +470,27 @@ done {"name":"卸载视频剪辑软件Kdenlive", "command":"sudo apt autoremove --purge -y kdenlive"}, {"name":"安装科学计算软件Octave", "command":"sudo apt update && sudo apt install -y octave"}, {"name":"卸载科学计算软件Octave", "command":"sudo apt autoremove --purge -y octave"}, -{"name":"安装WPS", "command":"wget https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11704/wps-office_11.1.0.11704_arm64.deb -O /tmp/wps.deb; sudo apt update; sudo apt install /tmp/wps.deb -y; rm /tmp/wps.deb"}, +{"name":"安装WPS", "command":"wget https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11704/wps-office_11.1.0.11704_arm64.deb -O /tmp/wps.deb && sudo apt update && sudo apt install -y /tmp/wps.deb; rm /tmp/wps.deb"}, {"name":"卸载WPS", "command":"sudo apt autoremove --purge -y wps-office"}, +{"name":"安装CAJViewer", "command":"wget https://download.cnki.net/net.cnki.cajviewer_1.3.20-1_arm64.deb -O /tmp/caj.deb && sudo apt update && sudo apt install -y /tmp/caj.deb && bash /home/tiny/.local/share/tiny/caj/postinst; rm /tmp/caj.deb"}, +{"name":"卸载CAJViewer", "command":"sudo apt autoremove --purge -y net.cnki.cajviewer && bash /home/tiny/.local/share/tiny/caj/postrm"}, +{"name":"安装亿图图示", "command":"wget https://www.edrawsoft.cn/2download/aarch64/edrawmax_11.5.6-3_arm64.deb -O /tmp/edraw.deb && sudo apt update && sudo apt install -y /tmp/edraw.deb && bash /home/tiny/.local/share/tiny/edraw/postinst; rm /tmp/edraw.deb"}, +{"name":"卸载亿图图示", "command":"sudo apt autoremove --purge -y edrawmax libldap-2.4-2"}, +{"name":"修复无法编译C语言程序", "command":"sudo apt update && sudo apt reinstall -y libc6-dev"}, +{"name":"启用回收站", "command":"sudo apt update && sudo apt install -y gvfs && echo '安装完成, 重启软件即可使用回收站。'"}, {"name":"???", "command":"timeout 8 cmatrix"}] }"""]); await G.prefs.setStringList("adsBonus", []); await G.prefs.setInt("adsWatchedTotal", 0); - //await G.prefs.setBool("terminalWriteCanBeEnabled", false); - //G.prefs.setBool("isTerminalWriteEnabled", false); await G.prefs.setBool("isTerminalCommandsEnabled", false); await G.prefs.setBool("isTerminalWriteEnabled", false); - //await G.prefs.setBool("bannerAdsCanBeClosed", false); await G.prefs.setBool("isBannerAdsClosed", false); - //G.prefs.setBool("autoLaunchVnc", true); await G.prefs.setBool("autoLaunchVnc", true); - await G.prefs.setString("defaultAudioPort", "4718"); + await G.prefs.setInt("defaultAudioPort", 4718); await G.prefs.setInt("defaultContainer", 0); + await G.prefs.setInt("termMaxLines", 4095); + await G.prefs.setDouble("termFontScale", 1); + await G.prefs.setInt("vip", 0); } static Future initData() async { @@ -485,6 +516,8 @@ done } G.currentContainer = G.prefs.getInt("defaultContainer")!; + G.termFontScale = G.prefs.getDouble("termFontScale")!; + G.controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted); } @@ -498,7 +531,7 @@ done static Future initAds() async { UnityAds.init( gameId: AdManager.gameId, - testMode: true, + testMode: false, onComplete: () { debugPrint('Initialization Complete'); AdManager.loadAds(); @@ -521,7 +554,7 @@ export TMPDIR=\$PWD/cache cd \$DATA_DIR export HOME=\$DATA_DIR/share export LD_LIBRARY_PATH=\$DATA_DIR/bin -\$DATA_DIR/busybox sed "s/4713/${G.prefs.getString("defaultAudioPort")!}/g" \$DATA_DIR/bin/pulseaudio.conf > \$DATA_DIR/bin/pulseaudio.conf.tmp +\$DATA_DIR/busybox sed "s/4713/${G.prefs.getInt("defaultAudioPort")!}/g" \$DATA_DIR/bin/pulseaudio.conf > \$DATA_DIR/bin/pulseaudio.conf.tmp \$DATA_DIR/bin/pulseaudio -F \$DATA_DIR/bin/pulseaudio.conf.tmp exit """)); @@ -533,7 +566,7 @@ exit """ export DATA_DIR=${G.dataPath} export CONTAINER_DIR=\$DATA_DIR/containers/${G.currentContainer} -#export PROOT_L2S_DIR=\$DATA_DIR/containers/0/.l2s +export PROOT_L2S_DIR=\$DATA_DIR/containers/0/.l2s cd \$DATA_DIR export PROOT_TMP_DIR=\$DATA_DIR/proot_tmp export PROOT_LOADER=\$DATA_DIR/libexec/proot/loader diff --git a/pubspec.lock b/pubspec.lock index 0d0130e..1f0fa26 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -98,10 +98,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" flutter_pty: dependency: "direct main" description: @@ -188,66 +188,66 @@ packages: dependency: "direct main" description: name: path_provider - sha256: "909b84830485dbcd0308edf6f7368bc8fd76afa26a270420f34cabea2a6467a0" + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "5d44fc3314d969b84816b569070d7ace0f1dea04bd94a83f74c4829615d22ad8" + sha256: "6b8b19bd80da4f11ce91b2d1fb931f3006911477cec227cce23d3253d80df3f1" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "1b744d3d774e5a879bb76d6cd1ecee2ba2c6960c03b1020cd35212f6aa267ac5" + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: ba2b77f0c52a33db09fc8caf85b12df691bf28d983e84cf87ff6d693cfa007b3 + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84 + sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: ee0e0d164516b90ae1f970bdf29f726f1aa730d7cfc449ecc74c495378b705da + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "63e5216aae014a72fe9579ccd027323395ce7a98271d9defa9d57320d001af81" + sha256: bc56bfe9d3f44c3c612d8d393bd9b174eb796d706759f9b495ac254e4294baa5 url: "https://pub.dev" source: hosted - version: "10.4.3" + version: "10.4.5" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "2ffaf52a21f64ac9b35fe7369bb9533edbd4f698e5604db8645b1064ff4cf221" + sha256: "59c6322171c29df93a22d150ad95f3aa19ed86542eaec409ab2691b8f35f9a47" url: "https://pub.dev" source: hosted - version: "10.3.3" + version: "10.3.6" permission_handler_apple: dependency: transitive description: @@ -260,10 +260,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: "7c6b1500385dd1d2ca61bb89e2488ca178e274a69144d26bbd65e33eae7c02a9" + sha256: f2343e9fa9c22ae4fd92d4732755bfe452214e7189afcc097380950cf567b4b2 url: "https://pub.dev" source: hosted - version: "3.11.3" + version: "3.11.5" permission_handler_windows: dependency: transitive description: @@ -276,10 +276,10 @@ packages: dependency: transitive description: name: platform - sha256: "57c07bf82207aee366dfaa3867b3164e4f03a238a461a11b0e8a3a510d51203d" + sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" platform_info: dependency: transitive description: @@ -292,10 +292,10 @@ packages: dependency: transitive description: name: plugin_platform_interface - sha256: "43798d895c929056255600343db8f049921cbec94d31ec87f1dc5c16c01935dd" + sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.1.6" quiver: dependency: transitive description: @@ -441,66 +441,66 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "781bd58a1eb16069412365c98597726cd8810ae27435f04b3b4d3a470bacd61e" + sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27" url: "https://pub.dev" source: hosted - version: "6.1.12" + version: "6.1.14" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "3dd2388cc0c42912eee04434531a26a82512b9cb1827e0214430c9bcbddfe025" + sha256: b04af59516ab45762b2ca6da40fa830d72d0f6045cd97744450b73493fa76330 url: "https://pub.dev" source: hosted - version: "6.0.38" + version: "6.1.0" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + sha256: "7c65021d5dee51813d652357bc65b8dd4a6177082a9966bc8ba6ee477baa795f" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.1.5" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.6" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "1c4fdc0bfea61a70792ce97157e5cc17260f61abbe4f39354513f39ec6fd73b1" + sha256: b55486791f666e62e0e8ff825e58a023fd6b1f71c49926483f1128d3bbd8fe88 url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.7" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea + sha256: "95465b39f83bfe95fcb9d174829d6476216f2d548b79c38ab2506e0458787618" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.5" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4 + sha256: "2942294a500b4fa0b918685aff406773ba0a4cd34b7f42198742a94083020ce5" url: "https://pub.dev" source: hosted - version: "2.0.18" + version: "2.0.20" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422" + sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "3.0.8" vector_math: dependency: transitive description: @@ -521,50 +521,50 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "04a0782fb058b7c71f2048935583488f4d32e9147ca403abc4e58f1de9964629" + sha256: "82f6787d5df55907aa01e49bd9644f4ed1cc82af7a8257dd9947815959d2e755" url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.2.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: bca797abba472868655b5f1a6029c1132385685ee9db4713cb0e7f33076210c6 + sha256: ddc167c6676f57c8b367d19fcbee267d6dc6adf81bd6c3cb87981d30746e0a6d url: "https://pub.dev" source: hosted - version: "3.9.3" + version: "3.10.1" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "0ca3cfcc6781a7de701d580917af4a9efc4e3e129f8ead95a80587f0a749480a" + sha256: "6d9213c65f1060116757a7c473247c60f3f7f332cac33dc417c9e362a9a13e4f" url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.0" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: ed749f94ac9e814d04a258a9255cf69cfa4cc6006ff59542aea7fb4590144972 + sha256: "485af05f2c5f83c7f78c20e236b170ad02df7153b299ae9917345be43871d29f" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "3.8.0" win32: dependency: transitive description: name: win32 - sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa" + sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" url: "https://pub.dev" source: hosted - version: "5.0.7" + version: "5.0.9" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: f0c26453a2d47aa4c2570c6a033246a3fc62da2fe23c7ffdd0a7495086dc0247 + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" xterm: dependency: "direct main" description: @@ -575,4 +575,4 @@ packages: version: "3.5.0" sdks: dart: ">=3.1.0 <4.0.0" - flutter: ">=3.10.0" + flutter: ">=3.13.0" diff --git a/pubspec.yaml b/pubspec.yaml index cfc98cb..358fcf2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.7+2 +version: 1.0.8+4 environment: sdk: '>=3.1.0 <4.0.0'