不知道更新了什么

main
落雨楓 8 months ago
parent d393ade426
commit 49e0751040

@ -91,7 +91,8 @@ class WikiPageParserController extends GetxController {
tagList.add('<link rel="stylesheet" href="$uri" />');
}
if (parseInfo.value?.modulestyles != null && parseInfo.value!.modulestyles.isNotEmpty) {
if (parseInfo.value?.modulestyles != null &&
parseInfo.value!.modulestyles.isNotEmpty) {
var pageModules = parseInfo.value!.modulestyles
.where((item) => !Global.siteConfig.moduleStyles.contains(item));
@ -217,7 +218,8 @@ navigator.safeArea = {
try {
var bytes = await rootBundle.load("assets/${uri.path}");
var data = bytes.buffer.asUint8List();
var mimeType = MimeTypeResolver().lookup(uri.path, headerBytes: data.sublist(0, 20));
var mimeType = MimeTypeResolver()
.lookup(uri.path, headerBytes: data.sublist(0, 20));
CustomSchemeResponse(
data: data,
contentType: mimeType ?? "text/plain",
@ -236,7 +238,8 @@ navigator.safeArea = {
String encodedAnchor = jsonEncode(anchor);
webviewCotroller?.evaluateJavascript(
source: "window.MugenApp && window.MugenApp.scrollToTitle($encodedAnchor)");
source:
"window.MugenApp && window.MugenApp.scrollToTitle($encodedAnchor)");
}
}
@ -284,7 +287,8 @@ class _WikiParserState extends ReactiveState<WikiPageParser> {
c.parseInfo.value = widget.parseInfo;
c.contentHtml.value = widget.parseInfo?.text ?? "";
c.safeAreaPadding.value = widget.padding ?? const EdgeInsets.all(0);
c.textZoom.value = (MediaQuery.of(Get.context!).textScaleFactor * 100).round();
c.textZoom.value =
(MediaQuery.of(Get.context!).textScaleFactor * 100).round();
c.onSectionChange = widget.onSectionChange;
widget.ref?.call(c);
}
@ -349,8 +353,9 @@ class _WikiParserState extends ReactiveState<WikiPageParser> {
}
@override
Widget build(BuildContext context) {
Widget render(BuildContext context) {
var sc = Get.find<AppSettingsController>();
return Obx(() => sc.betaPageRender.value ? _buildRender() : _buildWebview());
return Obx(
() => sc.betaPageRender.value ? _buildRender() : _buildWebview());
}
}

@ -33,7 +33,7 @@ class _SettingsListState extends ReactiveState<SettingsList> {
}
@override
Widget build(BuildContext context) {
Widget render(BuildContext context) {
return FollowTextScale(
child: CupertinoListSection.insetGrouped(
backgroundColor: Styles.themePageBackgroundColor,
@ -56,7 +56,8 @@ class _SettingsListState extends ReactiveState<SettingsList> {
class SettingsListPage extends StatelessWidget {
const SettingsListPage({super.key});
SliverChildListDelegate _buildSliverChildBuilderDelegate(BuildContext context) {
SliverChildListDelegate _buildSliverChildBuilderDelegate(
BuildContext context) {
return SliverChildListDelegate([
const SettingsList(),
]);

@ -0,0 +1,57 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:isekai_wiki/components/dummy_icon.dart';
import 'package:isekai_wiki/components/follow_scale.dart';
import 'package:isekai_wiki/reactive/reactive.dart';
import 'package:isekai_wiki/styles.dart';
class ViewSettingsController extends GetxController {
var fontSizeDouble = (14.0).obs;
}
class ViewSettings extends StatefulWidget {
const ViewSettings({super.key});
@override
State<StatefulWidget> createState() => _ViewSettingsState();
}
class _ViewSettingsState extends ReactiveState<ViewSettings> {
ViewSettingsController c = ViewSettingsController();
@override
void initState() {
super.initState();
Get.put(c);
}
@override
void dispose() {
super.dispose();
Get.delete<ViewSettingsController>();
}
@override
Widget render(BuildContext context) {
return FollowTextScale(
child: CupertinoListSection.insetGrouped(
backgroundColor: Styles.themePageBackgroundColor,
children: <CupertinoListTile>[
CupertinoListTile.notched(
title: const Text('字体大小'),
additionalInfo: Obx(
() => CupertinoSlider(
onChanged: (double value) {
c.fontSizeDouble.value = value;
},
value: c.fontSizeDouble.value,
),
),
trailing: const CupertinoListTileChevron(),
onTap: () {},
),
],
),
);
}
}

@ -42,10 +42,12 @@ class WikiInfoPageController extends GetxController {
"pageimages",
"pageviews"
], extraParams: {
"inprop": "url|protection|watched|watchers|visitingwatchers|displaytitle",
"inprop":
"url|protection|watched|watchers|visitingwatchers|displaytitle",
});
} else {
pageInfoRes = await MWApiList.getPageInfoList(titles: [pageTitle.value]);
pageInfoRes =
await MWApiList.getPageInfoList(titles: [pageTitle.value]);
}
if (pageInfoRes.data.isEmpty) {
throw MWApiErrorException(code: 'no-page', info: "页面信息丢失");
@ -55,7 +57,8 @@ class WikiInfoPageController extends GetxController {
pageId.value = pageInfo.value!.pageid;
pageTitle.value = pageInfo.value!.title;
} catch (err, stack) {
alert(Get.overlayContext!, ErrorUtils.getErrorMessage(err), title: "错误");
alert(Get.overlayContext!, ErrorUtils.getErrorMessage(err),
title: "错误");
if (kDebugMode) {
print("Exception in page: $err");
stack.printError();
@ -109,14 +112,16 @@ class _WikiInfoPageState extends ReactiveState<WikiInfoPage> {
children: <CupertinoListTile>[
CupertinoListTile.notched(
title: Center(
child: CupertinoActivityIndicator(radius: 10 * MediaQuery.of(context).textScaleFactor),
child: CupertinoActivityIndicator(
radius: 10 * MediaQuery.of(context).textScaleFactor),
),
),
],
);
}
CupertinoListTile buildPageInfo(BuildContext context, String label, dynamic value,
CupertinoListTile buildPageInfo(
BuildContext context, String label, dynamic value,
{VoidFutureCallback? onTap}) {
final Locale appLocale = Localizations.localeOf(context);
var valueStr = "未知";
@ -124,7 +129,8 @@ class _WikiInfoPageState extends ReactiveState<WikiInfoPage> {
valueStr = value;
}
if (value is int) {
valueStr = NumberFormat.decimalPattern(appLocale.toLanguageTag()).format(value);
valueStr =
NumberFormat.decimalPattern(appLocale.toLanguageTag()).format(value);
} else if (value is double) {
var pattern = NumberFormat.decimalPattern(appLocale.toLanguageTag());
pattern.maximumFractionDigits = 2;
@ -138,14 +144,15 @@ class _WikiInfoPageState extends ReactiveState<WikiInfoPage> {
return CupertinoListTile.notched(
padding: const EdgeInsetsDirectional.fromSTEB(20.0, 10.0, 14.0, 10.0),
title: Container(
title: SizedBox(
width: MediaQuery.of(context).size.width,
child: ResponsivePair(
children: [
Text(label),
Text(
valueStr,
style: TextStyle(color: CupertinoColors.systemGrey2.resolveFrom(context)),
style: TextStyle(
color: CupertinoColors.systemGrey2.resolveFrom(context)),
),
],
),
@ -194,7 +201,8 @@ class _WikiInfoPageState extends ReactiveState<WikiInfoPage> {
buildPageInfo(context, "更新后已查看的收藏者", pageInfo?.visitingwatchers),
buildPageInfo(context, "最后修改于", pageInfo?.updatedTime),
buildPageInfo(context, "该页面的子页面数", null),
buildPageInfo(context, "过去30天的页面访问量", getPageViews(pageInfo?.pageviews)),
buildPageInfo(
context, "过去30天的页面访问量", getPageViews(pageInfo?.pageviews)),
],
),
],
@ -210,7 +218,9 @@ class _WikiInfoPageState extends ReactiveState<WikiInfoPage> {
child: SafeArea(
child: ListView(
children: [
Obx(() => c.loadingPageInfo.value ? buildLoading(context) : buildPageInfoList(context))
Obx(() => c.loadingPageInfo.value
? buildLoading(context)
: buildPageInfoList(context))
],
),
),

@ -38,9 +38,8 @@ abstract class ReactiveState<T extends StatefulWidget> extends State<T> {
void receiveProps() {}
Widget render(BuildContext context) {
throw Exception("Render is not impleted");
}
@factory
Widget render(BuildContext context);
@override
Widget build(BuildContext context) {

@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201"
sha256: e440ac42679dfc04bbbefb58ed225c994bc7e07fccc8a68ec7d3631a127e5da9
url: "https://pub.flutter-io.cn"
source: hosted
version: "52.0.0"
version: "54.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4
sha256: "2c2e3721ee9fb36de92faa060f3480c81b23e904352b087e5c64224b1a044427"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.4.0"
version: "5.6.0"
animated_snack_bar:
dependency: "direct main"
description:
@ -37,10 +37,10 @@ packages:
dependency: transitive
description:
name: args
sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611"
sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.2"
version: "2.4.0"
async:
dependency: "direct main"
description:
@ -77,18 +77,18 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf"
sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0"
version: "3.1.1"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
sha256: "7c35a3a7868626257d8aee47b51c26b9dba11eaddf3431117ed2744951416aab"
sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
version: "2.2.0"
build_runner:
dependency: "direct dev"
description:
@ -221,10 +221,10 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: f71079978789bc2fe78d79227f1f8cfe195b31bbd8db2399b0d15a4b96fb843b
sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.3+2"
version: "0.3.3+4"
crypto:
dependency: transitive
description:
@ -277,10 +277,10 @@ packages:
dependency: "direct main"
description:
name: dio_cache_interceptor
sha256: "3f76df600621f3a8ed9c57db053f602b24c7e64c108fbc2791d0fe779c52b45b"
sha256: "24f5fb2fbffea25325e9eabc1501b6582d0928b0ef5cb9127c920e58fbf6ca62"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.3.1"
version: "3.4.0"
dio_cookie_manager:
dependency: "direct main"
description:
@ -448,10 +448,10 @@ packages:
dependency: "direct main"
description:
name: fluttertoast
sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1"
sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25"
url: "https://pub.flutter-io.cn"
source: hosted
version: "8.1.2"
version: "8.2.1"
freezed:
dependency: "direct dev"
description:
@ -488,10 +488,10 @@ packages:
dependency: "direct main"
description:
name: get_storage
sha256: "00b3908d9cd4138738b4db69bcc0fc1cf4ee8570c06594136569470f32a84207"
sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.3"
version: "2.1.1"
glob:
dependency: transitive
description:
@ -584,10 +584,10 @@ packages:
dependency: "direct dev"
description:
name: json_serializable
sha256: "040088d9eb2337f3a51ddabe35261e2fea1c351e3dd29d755ed1290b6b700a75"
sha256: dadc08bd61f72559f938dd08ec20dbfec6c709bba83515085ea943d2078d187a
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.6.0"
version: "6.6.1"
like_button:
dependency: "direct main"
description:
@ -688,10 +688,10 @@ packages:
dependency: "direct main"
description:
name: package_info_plus
sha256: f619162573096d428ccde2e33f92e05b5a179cd6f0e3120c1005f181bee8ed16
sha256: "8df5ab0a481d7dc20c0e63809e90a588e496d276ba53358afc4c4443d0a00697"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.2"
version: "3.0.3"
package_info_plus_platform_interface:
dependency: transitive
description:
@ -728,50 +728,50 @@ packages:
dependency: "direct main"
description:
name: path_provider
sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95
sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.12"
version: "2.0.13"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e
sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.22"
version: "2.0.23"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74"
sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
version: "2.1.2"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.7"
version: "2.1.9"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.5"
version: "2.0.6"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c
sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
version: "2.1.4"
pedantic:
dependency: transitive
description:
@ -800,10 +800,10 @@ packages:
dependency: transitive
description:
name: plugin_platform_interface
sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
version: "2.1.4"
pool:
dependency: transitive
description:
@ -840,10 +840,10 @@ packages:
dependency: transitive
description:
name: pubspec_parse
sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
sha256: ec85d7d55339d85f44ec2b682a82fea340071e8978257e5a43e69f79e98ef50c
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.1"
version: "1.2.2"
pull_down_button:
dependency: "direct main"
description:
@ -904,10 +904,10 @@ packages:
dependency: "direct main"
description:
name: share_plus
sha256: e387077716f80609bb979cd199331033326033ecd1c8f200a90c5f57b1c9f55e
sha256: "8c6892037b1824e2d7e8f59d54b3105932899008642e6372e5079c6939b4b625"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.3.0"
version: "6.3.1"
share_plus_platform_interface:
dependency: transitive
description:
@ -949,10 +949,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d"
sha256: c2bea18c95cfa0276a366270afaa2850b09b4a76db95d546f3d003dcc7011298
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.6"
version: "1.2.7"
source_helper:
dependency: transitive
description:
@ -973,10 +973,10 @@ packages:
dependency: transitive
description:
name: sqflite
sha256: "78324387dc81df14f78df06019175a86a2ee0437624166c382e145d0a7fd9a4f"
sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.4+1"
version: "2.2.5"
sqflite_common:
dependency: transitive
description:
@ -1069,66 +1069,66 @@ packages:
dependency: "direct main"
description:
name: url_launcher
sha256: "698fa0b4392effdc73e9e184403b627362eb5fbf904483ac9defbb1c2191d809"
sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.8"
version: "6.1.10"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1"
sha256: "1f4d9ebe86f333c15d318f81dcdc08b01d45da44af74552608455ebdc08d9732"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.23"
version: "6.0.24"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: bb328b24d3bccc20bdf1024a0990ac4f869d57663660de9c936fb8c043edefe3
sha256: c9cd648d2f7ab56968e049d4e9116f96a85517f1dd806b96a86ea1018a3a82e5
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.18"
version: "6.1.1"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc"
sha256: e29039160ab3730e42f3d811dc2a6d5f2864b90a70fb765ea60144b03307f682
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.2"
version: "3.0.3"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094"
sha256: "2dddb3291a57b074dade66b5e07e64401dd2487caefd4e9e2f467138d8c7eb06"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.2"
version: "3.0.3"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6"
sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
version: "2.1.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0"
sha256: "574cfbe2390666003c3a1d129bdc4574aaa6728f0c00a4829a81c316de69dd9b"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.14"
version: "2.0.15"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615
sha256: "97c9067950a0d09cbd93e2e3f0383d1403989362b97102fbf446473a48079a4b"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.3"
version: "3.0.4"
uuid:
dependency: transitive
description:
@ -1149,42 +1149,42 @@ packages:
dependency: transitive
description:
name: video_player
sha256: "59f7f31c919c59cbedd37c617317045f5f650dc0eeb568b0b0de9a36472bdb28"
sha256: "6cec15c21974282994577ffcfb5b42e64a699d38583138ec8dcb3d0a6902a41c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.5.1"
version: "2.5.2"
video_player_android:
dependency: transitive
description:
name: video_player_android
sha256: "984388511230bac63feb53b2911a70e829fe0976b6b2213f5c579c4e0a882db3"
sha256: "0fc42778d794465f12456ccdade3e729e4339c8a112f9e58d170dc00f17b75f2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.10"
version: "2.3.11"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
sha256: d9f7a46d6a77680adb03ec05a381025d6e890ebe636637c6c3014cc3926b97e9
sha256: "5df5411ff9d316f1dcbfee284e9838aa686e314f2a722b15c02cb7ce40ef9446"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.8"
version: "2.3.9"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
sha256: "42bb75de5e9b79e1f20f1d95f688fac0f95beac4d89c6eb2cd421724d4432dae"
sha256: "72ba04ad0eff76123c6d782ac46621cb8be476a89c33c89173fce982b6ec049b"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.1"
version: "6.0.2"
video_player_web:
dependency: transitive
description:
name: video_player_web
sha256: b649b07b8f8f553bee4a97a0a53d0fe78a70b115eafaf0105b612b32b05ddb99
sha256: d635bb2834f2b14cfd52c7fc9307a95dffbe768d116dd6047a4ecbba203289c8
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.13"
version: "2.0.14"
wakelock:
dependency: transitive
description:
@ -1293,10 +1293,10 @@ packages:
dependency: transitive
description:
name: xdg_directories
sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.2.0+3"
version: "1.0.0"
xml:
dependency: transitive
description:
@ -1314,5 +1314,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.19.0 <4.0.0"
dart: ">=2.19.0 <3.0.0"
flutter: ">=3.3.0"

Loading…
Cancel
Save