From 1a578c925d26f9964f30d1c322d334b32dceda7b Mon Sep 17 00:00:00 2001 From: peima Date: Fri, 24 Jul 2026 03:10:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Phase=202=20=E2=80=94=20upgrade=20deps?= =?UTF-8?q?=20to=20null-safe,=20replace=20deprecated=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - pubspec: bump all maintained deps to null-safe latest; flutter pub get resolves - Remove 12 packages (0-ref or no null-safe): splashscreen, flappy_search_bar, searchable_dropdown, share, platform_detect, flutter_inappwebview, countdown, gender_selection, flutter_dash, smooth_star_rating, hovering, ffi - Add flutter_rating_bar - Keep discontinued-but-null-safe for now (Phase 5): pull_to_refresh, hive, catcher - New null-safe custom components (API-compatible, callers change only imports): utils/countdown.dart, widgets/general/{hover_widget,gender_selection, smooth_star_rating,search_bar}.dart - main.dart: drop dead SplashScreen _buildBody + _to field - 23 consuming files: swap deprecated imports to local components Null-safety migration + upgraded-API adaptation = Phase 3. --- UPGRADE_NOTES.md | 17 +- lib/main.dart | 21 - lib/utils/countdown.dart | 29 + .../desktop_change_mobile_or_email.dart | 2 +- lib/widgets/desktop/desktop_edit_address.dart | 2 +- .../desktop/desktop_forgot_password.dart | 2 +- lib/widgets/desktop/desktop_new_address.dart | 2 +- lib/widgets/desktop/desktop_new_comment.dart | 2 +- lib/widgets/desktop/desktop_new_user.dart | 2 +- lib/widgets/desktop/desktop_search_place.dart | 2 +- .../desktop/desktop_store_product_search.dart | 2 +- lib/widgets/desktop/product_item.dart | 2 +- lib/widgets/desktop/product_search.dart | 2 +- lib/widgets/general/gender_selection.dart | 111 ++ lib/widgets/general/hover_widget.dart | 46 + .../payment_verification_code_dialog.dart | 2 +- lib/widgets/general/search_bar.dart | 185 +++ lib/widgets/general/smooth_star_rating.dart | 90 ++ lib/widgets/general/text_link.dart | 2 +- .../mobile/mobile_change_mobile_or_email.dart | 2 +- lib/widgets/mobile/mobile_edit_address.dart | 2 +- .../mobile/mobile_forgot_password.dart | 2 +- lib/widgets/mobile/mobile_new_address.dart | 2 +- lib/widgets/mobile/mobile_new_comment.dart | 2 +- lib/widgets/mobile/mobile_new_user.dart | 2 +- lib/widgets/mobile/mobile_search_place.dart | 2 +- .../mobile/mobile_store_product_search.dart | 2 +- lib/widgets/mobile/mobile_view_ticket.dart | 1 - lib/widgets/mobile/product_search.dart | 2 +- lib/widgets/mobile/shop.dart | 2 +- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 16 +- pubspec.lock | 1103 ++++++++++------- pubspec.yaml | 144 +-- .../flutter/generated_plugin_registrant.cc | 12 +- windows/flutter/generated_plugins.cmake | 2 + 37 files changed, 1252 insertions(+), 574 deletions(-) create mode 100644 lib/utils/countdown.dart create mode 100644 lib/widgets/general/gender_selection.dart create mode 100644 lib/widgets/general/hover_widget.dart create mode 100644 lib/widgets/general/search_bar.dart create mode 100644 lib/widgets/general/smooth_star_rating.dart diff --git a/UPGRADE_NOTES.md b/UPGRADE_NOTES.md index ccfc980..fa2bf96 100644 --- a/UPGRADE_NOTES.md +++ b/UPGRADE_NOTES.md @@ -15,7 +15,7 @@ ## 阶段 - [x] 阶段 0:基线 & 锁版本 - [x] 阶段 1:去掉 Stripe -- [ ] 阶段 2:依赖替换与升级 +- [x] 阶段 2:依赖替换与升级 - [ ] 阶段 3:空安全迁移 - [ ] 阶段 4:Web 跑起来 @@ -38,3 +38,18 @@ - constants.dart: 新增 ETRANSFER_EMAIL(payment@wisetronic.com) 与 REMARK_PREFIX(R#) - 新增 lib/widgets/general/e_transfer_pay.dart: 展示邮箱 + 提醒备注写 R# - 保留: PAYMENT_METHOD_CODE_STRIPE='stripe'(API 仍返回该 code,路由到 e-Transfer);payment_platform.dart 的 'stripe' 显示名(后续美化时调整) + +### 阶段 2 — 依赖替换与升级(已完成) +**flutter pub get 成功解析 178 个依赖。** +- 升级到 null-safe 最新版:dio ^5.7、cached_network_image ^3.4、url_launcher ^6.3、path_provider ^2.1、image_picker ^1.1、google_maps_flutter ^2.9、geolocator ^12、youtube_player_iframe ^5.2、flutter_local_notifications ^17、uuid ^4、fluttertoast ^8.2、badges ^3、carousel_slider ^5、percent_indicator ^4.2.3、photo_view ^0.15、toggle_switch ^2.3、pinput ^5、email_validator ^3、responsive_builder ^0.7、flutter_redux ^0.10、fluro ^2.0.5、font_awesome_flutter ^10、flutter_spinkit ^5.2、flutter_markdown ^0.7、url_strategy ^0.3、universal_io/html +- 删除(0引用或无 null-safe 版):splashscreen(死代码)、flappy_search_bar、searchable_dropdown、share、platform_detect、flutter_inappwebview、countdown、gender_selection、flutter_dash(死 import)、smooth_star_rating、hovering、ffi +- 新增:flutter_rating_bar ^4.0 +- 停维但有 null-safe 版→暂留(Phase 5 再换):pull_to_refresh(→smart_refresher)、hive/hive_flutter(→hive_ce)、catcher ^0.8(→catcher2) +- 新建 null-safe 自定义组件替代废弃包(API 兼容, 调用方仅改 import): + - lib/utils/countdown.dart (CountDown.stream) + - lib/widgets/general/hover_widget.dart (HoverWidget) + - lib/widgets/general/gender_selection.dart (Gender 枚举 + GenderSelection) + - lib/widgets/general/smooth_star_rating.dart (SmoothStarRating) + - lib/widgets/general/search_bar.dart (轻量 Web 搜索 SearchBar + SearchBarController, 含 replayLastSearch 分页) +- main.dart:删除未使用的 _buildBody(SplashScreen) 与 _to 字段 +- ⚠️ 待 Phase 3:API 升级破坏性变更(dio5/badges3/toggle_switch2/pinput5/geolocator12 等用法适配) + 整库空安全迁移,按 dart analyze 驱动修复 diff --git a/lib/main.dart b/lib/main.dart index 6981244..43324b9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,7 +14,6 @@ import 'pages/create_online_store_1.dart'; import 'pages/download.dart'; import 'pages/me.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; -import 'package:splashscreen/splashscreen.dart'; // import 'package:uni_links/uni_links.dart'; import 'constants.dart'; @@ -41,8 +40,6 @@ void main() { } class MyApp extends StatelessWidget { - String _to = '/'; - MyApp() { Routes.configure(); Utils().init(); @@ -95,24 +92,6 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - Widget _buildBody() { - return SplashScreen( - seconds: 5, - routeName: _to, - navigateAfterSeconds: Home(title: Constants.APP_TITLE,), - styleTextUnderTheLoader: new TextStyle( - fontWeight: FontWeight.bold, - fontSize: 20.0, - ), - imageBackground: (Image.network(Constants.BASE_API_URL + 'gallery/get-minimanager-splash/')).image, - backgroundColor: Colors.white, - onClick: () { - - }, - loaderColor: Colors.blue, - ); - } - return MaterialApp( debugShowCheckedModeBanner: Constants.DEBUG, navigatorKey: kIsWeb ? null : Catcher.navigatorKey, diff --git a/lib/utils/countdown.dart b/lib/utils/countdown.dart new file mode 100644 index 0000000..ce3e91e --- /dev/null +++ b/lib/utils/countdown.dart @@ -0,0 +1,29 @@ +import 'dart:async'; + +/// 自定义实现,替代已停维的 `countdown` 包的 [CountDown]。 +/// +/// 用法与原包兼容: +/// ```dart +/// var listener = CountDown(Duration(seconds: 90)).stream.listen(null); +/// listener.onData((Duration d) { ... d.inSeconds ... }); +/// listener.onDone(() { ... }); +/// ``` +/// +/// `stream` 每秒发出剩余 [Duration](从满时长倒数到 0),到达 0 后关闭。 +class CountDown { + CountDown(this.duration) : assert(!duration.isNegative); + + final Duration duration; + + Stream get stream => _countdownStream(); + + Stream _countdownStream() async* { + int remaining = duration.inSeconds; + while (remaining > 0) { + yield Duration(seconds: remaining); + await Future.delayed(const Duration(seconds: 1)); + remaining--; + } + yield Duration.zero; + } +} diff --git a/lib/widgets/desktop/desktop_change_mobile_or_email.dart b/lib/widgets/desktop/desktop_change_mobile_or_email.dart index 290998e..f3384fc 100644 --- a/lib/widgets/desktop/desktop_change_mobile_or_email.dart +++ b/lib/widgets/desktop/desktop_change_mobile_or_email.dart @@ -1,6 +1,6 @@ -import 'package:countdown/countdown.dart'; +import '../../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; diff --git a/lib/widgets/desktop/desktop_edit_address.dart b/lib/widgets/desktop/desktop_edit_address.dart index bc3704d..639769c 100644 --- a/lib/widgets/desktop/desktop_edit_address.dart +++ b/lib/widgets/desktop/desktop_edit_address.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_wisetronic/widgets/general/breadcrumbs.dart'; import 'package:fluttertoast/fluttertoast.dart'; -import 'package:gender_selection/gender_selection.dart'; +import '../general/gender_selection.dart'; import '../../constants.dart'; import '../../events/eventbus.dart'; diff --git a/lib/widgets/desktop/desktop_forgot_password.dart b/lib/widgets/desktop/desktop_forgot_password.dart index 34f8a75..3ea3890 100644 --- a/lib/widgets/desktop/desktop_forgot_password.dart +++ b/lib/widgets/desktop/desktop_forgot_password.dart @@ -1,5 +1,5 @@ -import 'package:countdown/countdown.dart'; +import '../../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_wisetronic/widgets/general/breadcrumbs.dart'; diff --git a/lib/widgets/desktop/desktop_new_address.dart b/lib/widgets/desktop/desktop_new_address.dart index 5080060..2846726 100644 --- a/lib/widgets/desktop/desktop_new_address.dart +++ b/lib/widgets/desktop/desktop_new_address.dart @@ -2,7 +2,7 @@ import 'package:email_validator/email_validator.dart'; import 'package:flutter/material.dart'; import 'package:flutter_wisetronic/widgets/general/breadcrumbs.dart'; -import 'package:gender_selection/gender_selection.dart'; +import '../general/gender_selection.dart'; import '../../constants.dart'; import '../../generated/l10n.dart'; diff --git a/lib/widgets/desktop/desktop_new_comment.dart b/lib/widgets/desktop/desktop_new_comment.dart index 267a8ca..d393cc1 100644 --- a/lib/widgets/desktop/desktop_new_comment.dart +++ b/lib/widgets/desktop/desktop_new_comment.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_wisetronic/widgets/general/breadcrumbs.dart'; import 'package:flutter_wisetronic/widgets/general/navigationbar.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; -import 'package:smooth_star_rating/smooth_star_rating.dart'; +import '../general/smooth_star_rating.dart'; import '../../constants.dart'; import '../../events/eventbus.dart'; diff --git a/lib/widgets/desktop/desktop_new_user.dart b/lib/widgets/desktop/desktop_new_user.dart index f7a077f..00510a6 100644 --- a/lib/widgets/desktop/desktop_new_user.dart +++ b/lib/widgets/desktop/desktop_new_user.dart @@ -1,5 +1,5 @@ -import 'package:countdown/countdown.dart'; +import '../../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:fluttertoast/fluttertoast.dart'; diff --git a/lib/widgets/desktop/desktop_search_place.dart b/lib/widgets/desktop/desktop_search_place.dart index d49ee44..0ab73ff 100644 --- a/lib/widgets/desktop/desktop_search_place.dart +++ b/lib/widgets/desktop/desktop_search_place.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; -import 'package:flappy_search_bar/flappy_search_bar.dart'; +import '../general/search_bar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_wisetronic/widgets/general/breadcrumbs.dart'; import 'package:flutter_wisetronic/widgets/general/navigationbar.dart'; diff --git a/lib/widgets/desktop/desktop_store_product_search.dart b/lib/widgets/desktop/desktop_store_product_search.dart index d70ec08..3d3fef1 100644 --- a/lib/widgets/desktop/desktop_store_product_search.dart +++ b/lib/widgets/desktop/desktop_store_product_search.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; -import 'package:flappy_search_bar/flappy_search_bar.dart'; +import '../general/search_bar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_wisetronic/pages/product_detail_page.dart'; diff --git a/lib/widgets/desktop/product_item.dart b/lib/widgets/desktop/product_item.dart index 033f9f1..def6d06 100644 --- a/lib/widgets/desktop/product_item.dart +++ b/lib/widgets/desktop/product_item.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:hovering/hovering.dart'; +import '../general/hover_widget.dart'; import '../../events/eventbus.dart'; import '../../events/events.dart'; diff --git a/lib/widgets/desktop/product_search.dart b/lib/widgets/desktop/product_search.dart index 4e2086f..a7585e9 100644 --- a/lib/widgets/desktop/product_search.dart +++ b/lib/widgets/desktop/product_search.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; -import 'package:flappy_search_bar/flappy_search_bar.dart'; +import '../general/search_bar.dart'; import 'package:flutter/material.dart'; import '../../constants.dart'; diff --git a/lib/widgets/general/gender_selection.dart b/lib/widgets/general/gender_selection.dart new file mode 100644 index 0000000..180655c --- /dev/null +++ b/lib/widgets/general/gender_selection.dart @@ -0,0 +1,111 @@ +import 'package:flutter/material.dart'; + +/// 自定义实现,替代已停维的 `gender_selection` 包。 +/// +/// 保留原 `Gender` 枚举与 `GenderSelection` 组件的命名参数, +/// 使调用方仅改 import 即可编译。大部分装饰性参数为兼容保留(暂未全部生效, +/// 后续美化阶段 Phase 5 再完善视觉)。 +enum Gender { Male, Female } + +class GenderSelection extends StatefulWidget { + final String? maleText; + final String? femaleText; + final Color? selectedGenderIconBackgroundColor; + final Alignment? checkIconAlignment; + final IconData? selectedGenderCheckIcon; + final void Function(Gender gender)? onChanged; + final bool? equallyAligned; + final Duration? animationDuration; + final bool? isCircular; + final bool? isSelectedGenderIconCircular; + final double? opacityOfGradient; + final EdgeInsets? padding; + final double? size; + final Gender? selectedGender; + + const GenderSelection({ + super.key, + this.maleText, + this.femaleText, + this.selectedGenderIconBackgroundColor, + this.checkIconAlignment, + this.selectedGenderCheckIcon, + this.onChanged, + this.equallyAligned, + this.animationDuration, + this.isCircular, + this.isSelectedGenderIconCircular, + this.opacityOfGradient, + this.padding, + this.size, + this.selectedGender, + }); + + @override + State createState() => _GenderSelectionState(); +} + +class _GenderSelectionState extends State { + Gender? _selected; + + @override + void initState() { + super.initState(); + _selected = widget.selectedGender; + } + + Widget _buildOption(Gender gender, String label) { + final selected = _selected == gender; + final color = widget.selectedGenderIconBackgroundColor ?? Colors.indigo; + return Expanded( + child: Padding( + padding: widget.padding ?? const EdgeInsets.all(3.0), + child: InkWell( + onTap: () { + setState(() => _selected = gender); + widget.onChanged?.call(gender); + }, + child: Container( + height: widget.size ?? 50.0, + alignment: Alignment.center, + decoration: BoxDecoration( + color: selected ? color : color.withOpacity(0.06), + borderRadius: + (widget.isCircular ?? false) ? BorderRadius.circular(60) : null, + border: Border.all( + color: selected ? color : Colors.black26, + width: selected ? 2 : 1, + ), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (selected && widget.selectedGenderCheckIcon != null) + Icon(widget.selectedGenderCheckIcon, color: Colors.white, size: 18), + if (selected && widget.selectedGenderCheckIcon != null) + const SizedBox(width: 6), + Text( + label, + style: TextStyle( + color: selected ? Colors.white : Colors.black87, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + return Row( + children: [ + _buildOption(Gender.Male, widget.maleText ?? 'Mr'), + _buildOption(Gender.Female, widget.femaleText ?? 'Ms'), + ], + ); + } +} diff --git a/lib/widgets/general/hover_widget.dart b/lib/widgets/general/hover_widget.dart new file mode 100644 index 0000000..06117cd --- /dev/null +++ b/lib/widgets/general/hover_widget.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; + +/// 自定义实现,替代已停维的 `hovering` 包的 [HoverWidget]。 +/// +/// API 兼容: +/// ```dart +/// HoverWidget( +/// child: ..., +/// hoverChild: ..., +/// onHover: (PointerHoverEvent event) { ... }, +/// ) +/// ``` +/// +/// 鼠标悬停时显示 [hoverChild],否则显示 [child]。 +class HoverWidget extends StatefulWidget { + final Widget child; + final Widget? hoverChild; + final void Function(PointerHoverEvent)? onHover; + + const HoverWidget({ + super.key, + required this.child, + this.hoverChild, + this.onHover, + }); + + @override + State createState() => _HoverWidgetState(); +} + +class _HoverWidgetState extends State { + bool _hovering = false; + + @override + Widget build(BuildContext context) { + return MouseRegion( + cursor: SystemMouseCursors.click, + onHover: widget.onHover, + onEnter: (_) => setState(() => _hovering = true), + onExit: (_) => setState(() => _hovering = false), + child: (_hovering && widget.hoverChild != null) + ? widget.hoverChild! + : widget.child, + ); + } +} diff --git a/lib/widgets/general/payment_verification_code_dialog.dart b/lib/widgets/general/payment_verification_code_dialog.dart index 0321372..591e7c4 100644 --- a/lib/widgets/general/payment_verification_code_dialog.dart +++ b/lib/widgets/general/payment_verification_code_dialog.dart @@ -1,5 +1,5 @@ -import 'package:countdown/countdown.dart'; +import '../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:pinput/pin_put/pin_put.dart'; diff --git a/lib/widgets/general/search_bar.dart b/lib/widgets/general/search_bar.dart new file mode 100644 index 0000000..e808a92 --- /dev/null +++ b/lib/widgets/general/search_bar.dart @@ -0,0 +1,185 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +/// 轻量级异步搜索控制器,配合 [SearchBar] 使用。 +/// +/// 替代已停维的 `flappy_search_bar` 的 `SearchBarController`。 +/// 保留泛型 `` 以兼容调用方 `SearchBarController()` 写法。 +/// [replayLastSearch] 用于“加载更多 / 分页”:外部 page++ 后触发重跑上一次搜索。 +class SearchBarController { + String lastQuery = ''; + VoidCallback? _replay; + + void _register(VoidCallback replay) { + _replay = replay; + } + + /// 重新执行上一次搜索(分页加载更多时调用)。 + void replayLastSearch() => _replay?.call(); +} + +/// 轻量级 Web 异步搜索栏,替代已停维的 `flappy_search_bar` 的 `SearchBar`。 +/// +/// 基本流程:输入达到 [minimumChars] 个字符后,调用 [onSearch] 取结果, +/// 用 [onItemFound] 渲染每一条;无结果时显示 [emptyWidget];出错显示 [onError]。 +/// +/// 注意:`searchBarController` 参数刻意使用裸类型(`SearchBarController?`), +/// 以兼容调用方 `SearchBarController _controller = SearchBarController();` +/// 的写法(Dart 3 sound 类型下避免泛型不变性报错)。 +class SearchBar extends StatefulWidget { + final SearchBarController? searchBarController; + final int minimumChars; + final String? hintText; + final Widget? cancellationWidget; + final Future> Function(String text) onSearch; + final Widget Function(T item, int index) onItemFound; + final Widget Function(dynamic error)? onError; + final Widget? emptyWidget; + final Duration debounceDuration; + + const SearchBar({ + super.key, + this.searchBarController, + this.minimumChars = 2, + this.hintText, + this.cancellationWidget, + required this.onSearch, + required this.onItemFound, + this.onError, + this.emptyWidget, + this.debounceDuration = const Duration(milliseconds: 350), + }); + + @override + State> createState() => _SearchBarState(); +} + +class _SearchBarState extends State> { + final TextEditingController _textController = TextEditingController(); + final FocusNode _focusNode = FocusNode(); + Timer? _debounce; + List _results = []; + bool _loading = false; + dynamic _error; + bool _hasSearched = false; + + @override + void initState() { + super.initState(); + widget.searchBarController?._register(_runSearch); + _textController.addListener(_onTextChanged); + } + + @override + void dispose() { + _debounce?.cancel(); + _textController.dispose(); + _focusNode.dispose(); + super.dispose(); + } + + void _onTextChanged() { + final text = _textController.text; + _debounce?.cancel(); + if (text.length >= widget.minimumChars) { + _debounce = Timer(widget.debounceDuration, _runSearch); + } else if (text.isEmpty) { + setState(() { + _results = []; + _hasSearched = false; + _error = null; + }); + } + } + + Future _runSearch() async { + final query = _textController.text; + if (query.length < widget.minimumChars) return; + if (widget.searchBarController != null) { + widget.searchBarController!.lastQuery = query; + } + setState(() { + _loading = true; + _error = null; + _hasSearched = true; + }); + try { + final results = await widget.onSearch(query); + if (mounted) { + setState(() { + _results = results; + _loading = false; + }); + } + } catch (e) { + if (mounted) { + setState(() { + _error = e; + _loading = false; + }); + } + } + } + + void _cancel() { + _textController.clear(); + _focusNode.unfocus(); + setState(() { + _results = []; + _hasSearched = false; + _error = null; + }); + } + + @override + Widget build(BuildContext context) { + return Column( + children: [ + TextField( + controller: _textController, + focusNode: _focusNode, + decoration: InputDecoration( + hintText: widget.hintText, + prefixIcon: const Icon(Icons.search), + suffixIcon: _textController.text.isNotEmpty + ? GestureDetector( + onTap: _cancel, + child: widget.cancellationWidget ?? + const Icon(Icons.close, size: 20), + ) + : null, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + ), + contentPadding: const EdgeInsets.symmetric(horizontal: 12), + ), + ), + const SizedBox(height: 8), + Expanded(child: _buildBody()), + ], + ); + } + + Widget _buildBody() { + if (_loading) { + return const Center(child: CircularProgressIndicator()); + } + if (_error != null) { + return widget.onError != null + ? widget.onError!(_error) + : Center(child: Text('$_error')); + } + if (!_hasSearched) { + return const SizedBox.shrink(); + } + if (_results.isEmpty) { + return widget.emptyWidget ?? const SizedBox.shrink(); + } + return ListView.builder( + itemCount: _results.length, + itemBuilder: (BuildContext context, int index) => + widget.onItemFound(_results[index], index), + ); + } +} diff --git a/lib/widgets/general/smooth_star_rating.dart b/lib/widgets/general/smooth_star_rating.dart new file mode 100644 index 0000000..59e0496 --- /dev/null +++ b/lib/widgets/general/smooth_star_rating.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; + +/// 自定义实现,替代已停维的 `smooth_star_rating` 包的 [SmoothStarRating]。 +/// +/// 保留原命名参数(`allowHalfRating`/`onRated`/`starCount`/`rating`/`size`/ +/// `filledIconData`/`color`/`borderColor`/`spacing`),调用方仅改 import 即可。 +class SmoothStarRating extends StatefulWidget { + final bool allowHalfRating; + final void Function(double)? onRated; + final int starCount; + final double rating; + final double size; + final IconData filledIconData; + final IconData? halfFilledIconData; + final IconData? defaultIconData; + final Color color; + final Color borderColor; + final double spacing; + + const SmoothStarRating({ + super.key, + this.allowHalfRating = false, + this.onRated, + this.starCount = 5, + this.rating = 0.0, + this.size = 24.0, + this.filledIconData = Icons.star, + this.halfFilledIconData, + this.defaultIconData, + this.color = Colors.orange, + this.borderColor = Colors.orange, + this.spacing = 0.0, + }); + + @override + State createState() => _SmoothStarRatingState(); +} + +class _SmoothStarRatingState extends State { + late double _rating; + + @override + void initState() { + super.initState(); + _rating = widget.rating; + } + + @override + void didUpdateWidget(covariant SmoothStarRating oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.rating != widget.rating) { + _rating = widget.rating; + } + } + + Widget _star(int index) { + IconData icon; + Color iconColor; + if (index < _rating.floor()) { + icon = widget.filledIconData; + iconColor = widget.color; + } else if (widget.allowHalfRating && + index == _rating.floor() && + (_rating - index) >= 0.5) { + icon = widget.halfFilledIconData ?? Icons.star_half; + iconColor = widget.color; + } else { + icon = widget.defaultIconData ?? Icons.star_border; + iconColor = widget.borderColor; + } + return GestureDetector( + onTap: () { + setState(() => _rating = (index + 1).toDouble()); + widget.onRated?.call(_rating); + }, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: widget.spacing / 2), + child: Icon(icon, size: widget.size, color: iconColor), + ), + ); + } + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: List.generate(widget.starCount, _star), + ); + } +} diff --git a/lib/widgets/general/text_link.dart b/lib/widgets/general/text_link.dart index 4ebf529..21b5dd3 100644 --- a/lib/widgets/general/text_link.dart +++ b/lib/widgets/general/text_link.dart @@ -3,7 +3,7 @@ import 'package:fluro/fluro.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_wisetronic/utils/utils.dart'; -import 'package:hovering/hovering.dart'; +import 'hover_widget.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../routes.dart'; diff --git a/lib/widgets/mobile/mobile_change_mobile_or_email.dart b/lib/widgets/mobile/mobile_change_mobile_or_email.dart index ba21651..d421bc8 100644 --- a/lib/widgets/mobile/mobile_change_mobile_or_email.dart +++ b/lib/widgets/mobile/mobile_change_mobile_or_email.dart @@ -1,6 +1,6 @@ -import 'package:countdown/countdown.dart'; +import '../../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:fluttertoast/fluttertoast.dart'; diff --git a/lib/widgets/mobile/mobile_edit_address.dart b/lib/widgets/mobile/mobile_edit_address.dart index 24aacf3..d062bb0 100644 --- a/lib/widgets/mobile/mobile_edit_address.dart +++ b/lib/widgets/mobile/mobile_edit_address.dart @@ -13,7 +13,7 @@ import 'package:flutter_wisetronic/store/store.dart'; import 'package:flutter_wisetronic/utils/http_util.dart'; import 'package:flutter_wisetronic/utils/utils.dart'; import 'package:fluttertoast/fluttertoast.dart'; -import 'package:gender_selection/gender_selection.dart'; +import '../general/gender_selection.dart'; import '../../routes.dart'; diff --git a/lib/widgets/mobile/mobile_forgot_password.dart b/lib/widgets/mobile/mobile_forgot_password.dart index 68e59b4..42b7611 100644 --- a/lib/widgets/mobile/mobile_forgot_password.dart +++ b/lib/widgets/mobile/mobile_forgot_password.dart @@ -1,5 +1,5 @@ -import 'package:countdown/countdown.dart'; +import '../../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:fluttertoast/fluttertoast.dart'; diff --git a/lib/widgets/mobile/mobile_new_address.dart b/lib/widgets/mobile/mobile_new_address.dart index 229e2a1..122b0d2 100644 --- a/lib/widgets/mobile/mobile_new_address.dart +++ b/lib/widgets/mobile/mobile_new_address.dart @@ -1,7 +1,7 @@ import 'package:email_validator/email_validator.dart'; import 'package:flutter/material.dart'; -import 'package:gender_selection/gender_selection.dart'; +import '../general/gender_selection.dart'; import '../../generated/l10n.dart'; import '../../models/located_address.dart'; diff --git a/lib/widgets/mobile/mobile_new_comment.dart b/lib/widgets/mobile/mobile_new_comment.dart index a315ebf..aa85efd 100644 --- a/lib/widgets/mobile/mobile_new_comment.dart +++ b/lib/widgets/mobile/mobile_new_comment.dart @@ -3,7 +3,7 @@ import 'package:badges/badges.dart'; import 'package:flutter/material.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; -import 'package:smooth_star_rating/smooth_star_rating.dart'; +import '../general/smooth_star_rating.dart'; import '../../events/eventbus.dart'; import '../../events/events.dart'; diff --git a/lib/widgets/mobile/mobile_new_user.dart b/lib/widgets/mobile/mobile_new_user.dart index 1fd66a0..ff6f98b 100644 --- a/lib/widgets/mobile/mobile_new_user.dart +++ b/lib/widgets/mobile/mobile_new_user.dart @@ -1,5 +1,5 @@ -import 'package:countdown/countdown.dart'; +import '../../utils/countdown.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:fluttertoast/fluttertoast.dart'; diff --git a/lib/widgets/mobile/mobile_search_place.dart b/lib/widgets/mobile/mobile_search_place.dart index 5f385b6..5b5b736 100644 --- a/lib/widgets/mobile/mobile_search_place.dart +++ b/lib/widgets/mobile/mobile_search_place.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; -import 'package:flappy_search_bar/flappy_search_bar.dart'; +import '../general/search_bar.dart'; import 'package:flutter/material.dart'; import '../../events/eventbus.dart'; diff --git a/lib/widgets/mobile/mobile_store_product_search.dart b/lib/widgets/mobile/mobile_store_product_search.dart index 8cd3769..0c8fb7a 100644 --- a/lib/widgets/mobile/mobile_store_product_search.dart +++ b/lib/widgets/mobile/mobile_store_product_search.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; -import 'package:flappy_search_bar/flappy_search_bar.dart'; +import '../general/search_bar.dart'; import 'package:flutter/material.dart'; import '../../events/eventbus.dart'; diff --git a/lib/widgets/mobile/mobile_view_ticket.dart b/lib/widgets/mobile/mobile_view_ticket.dart index f4326c2..a215928 100644 --- a/lib/widgets/mobile/mobile_view_ticket.dart +++ b/lib/widgets/mobile/mobile_view_ticket.dart @@ -1,7 +1,6 @@ import 'package:badges/badges.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_dash/flutter_dash.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_wisetronic/dialog/image_viewer.dart'; import 'package:flutter_wisetronic/events/eventbus.dart'; diff --git a/lib/widgets/mobile/product_search.dart b/lib/widgets/mobile/product_search.dart index c025f85..a0f911f 100644 --- a/lib/widgets/mobile/product_search.dart +++ b/lib/widgets/mobile/product_search.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; -import 'package:flappy_search_bar/flappy_search_bar.dart'; +import '../general/search_bar.dart'; import 'package:flutter/material.dart'; import '../../events/eventbus.dart'; diff --git a/lib/widgets/mobile/shop.dart b/lib/widgets/mobile/shop.dart index ab43892..9e710ac 100644 --- a/lib/widgets/mobile/shop.dart +++ b/lib/widgets/mobile/shop.dart @@ -28,7 +28,7 @@ import 'package:flutter_wisetronic/widgets/general/read_more_text.dart'; import 'package:flutter_wisetronic/widgets/general/show_price.dart'; import 'package:flutter_wisetronic/widgets/general/sliding_up_panel.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; -import 'package:smooth_star_rating/smooth_star_rating.dart'; +import '../general/smooth_star_rating.dart'; import '../../constants.dart'; diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 5a2da2c..dc92979 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,12 +7,16 @@ #include "generated_plugin_registrant.h" #include +#include #include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) catcher_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "CatcherPlugin"); catcher_plugin_register_with_registrar(catcher_registrar); + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index faffff3..6b9ba87 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST catcher + file_selector_linux url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 94f1d6f..6e0f827 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,19 +6,25 @@ import FlutterMacOS import Foundation import catcher -import device_info_plus_macos +import device_info_plus +import file_selector_macos import flutter_local_notifications -import package_info_plus_macos -import path_provider_macos -import sqflite +import geolocator_apple +import package_info_plus +import path_provider_foundation +import sqflite_darwin import url_launcher_macos +import webview_flutter_wkwebview func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { CatcherPlugin.register(with: registry.registrar(forPlugin: "CatcherPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) - FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) + GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) + FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) + WebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "WebViewFlutterPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 4c98351..7447705 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,294 +5,335 @@ packages: dependency: transitive description: name: archive - url: "https://pub.dartlang.org" + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff + url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.9" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.7.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + url: "https://pub.dev" source: hosted - version: "2.8.2" - awesome_card: - dependency: transitive - description: - name: awesome_card - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.7" + version: "2.12.0" badges: dependency: "direct main" description: name: badges - url: "https://pub.dartlang.org" + sha256: cf1c88fb3777df69ccd630b80de5267f54efa4a39381b0404a7c03d56cb7c041 + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.2.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" cached_network_image: dependency: "direct main" description: name: cached_network_image - url: "https://pub.dartlang.org" + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" + url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.4.1" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - url: "https://pub.dartlang.org" + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "4.1.1" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - url: "https://pub.dartlang.org" + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.3.1" carousel_slider: dependency: "direct main" description: name: carousel_slider - url: "https://pub.dartlang.org" + sha256: febf4b0163e0242adc13d7a863b04965351f59e7dfea56675c7c2caa7bcd7476 + url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.1.2" catcher: dependency: "direct main" description: name: catcher - url: "https://pub.dartlang.org" + sha256: "6747baea6b1cf742c5e2158181d295773bb514172a15be34fc4346abe7622daa" + url: "https://pub.dev" source: hosted - version: "0.6.8" + version: "0.8.0" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.4.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.2" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" source: hosted - version: "1.16.0" - countdown: - dependency: "direct main" - description: - name: countdown - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.0" - credit_card_type_detector: - dependency: transitive - description: - name: credit_card_type_detector - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0" - credit_card_validator: - dependency: transitive - description: - name: credit_card_validator - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.1" + version: "1.19.1" cross_file: dependency: transitive description: name: cross_file - url: "https://pub.dartlang.org" + sha256: "437b2b8da454fe1e01131f4410274fd607347325e9330f0b469ed5a204991068" + url: "https://pub.dev" source: hosted version: "0.3.1+4" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: cf75650c66c0316274e21d7c43d3dea246273af5955bd94e8184837cd577575c + url: "https://pub.dev" source: hosted version: "3.0.1" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" source: hosted - version: "0.17.0" + version: "1.0.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.8" + dbus: + dependency: transitive + description: + name: dbus + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + url: "https://pub.dev" + source: hosted + version: "0.7.12" device_info_plus: dependency: transitive description: name: device_info_plus - url: "https://pub.dartlang.org" + sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + url: "https://pub.dev" source: hosted - version: "2.1.0" - device_info_plus_linux: - dependency: transitive - description: - name: device_info_plus_linux - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - device_info_plus_macos: - dependency: transitive - description: - name: device_info_plus_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" + version: "9.1.2" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f + url: "https://pub.dev" source: hosted - version: "2.1.0" - device_info_plus_web: - dependency: transitive - description: - name: device_info_plus_web - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - device_info_plus_windows: - dependency: transitive - description: - name: device_info_plus_windows - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" + version: "7.0.3" dio: dependency: "direct main" description: name: dio - url: "https://pub.dartlang.org" + sha256: ea2bad3c89a27635ce2d85cce4d6b199da49a5a48ec77b03e45b65a3b90922b0 + url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.10.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: dd58dc3861eb36edb13b217efc006a1c21e5bbc341de8c229b85634fa5e362e4 + url: "https://pub.dev" + source: hosted + version: "2.2.0" email_validator: dependency: "direct main" description: name: email_validator - url: "https://pub.dartlang.org" + sha256: b19aa5d92fdd76fbc65112060c94d45ba855105a28bb6e462de7ff03b12fa1fb + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" event_bus: dependency: "direct main" description: name: event_bus - url: "https://pub.dartlang.org" + sha256: "44baa799834f4c803921873e7446a2add0f3efa45e101a054b1f0ab9b95f8edc" + url: "https://pub.dev" source: hosted version: "2.0.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + url: "https://pub.dev" + source: hosted + version: "1.3.2" ffi: - dependency: "direct main" + dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "2.2.0" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" source: hosted - version: "6.1.2" - flappy_search_bar: - dependency: "direct main" + version: "7.0.1" + file_selector_linux: + dependency: transitive description: - name: flappy_search_bar - url: "https://pub.dartlang.org" + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" source: hosted - version: "1.7.2" + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c" + url: "https://pub.dev" + source: hosted + version: "0.9.4+4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" + url: "https://pub.dev" + source: hosted + version: "2.7.0" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" + url: "https://pub.dev" + source: hosted + version: "0.9.3+4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" fluro: dependency: "direct main" description: name: fluro - url: "https://pub.dartlang.org" + sha256: "24d07d0b285b213ec2045b83e85d076185fa5c23651e44dae0ac6755784b97d0" + url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.5" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - url: "https://pub.dartlang.org" - source: hosted - version: "0.6.0" flutter_cache_manager: dependency: transitive description: name: flutter_cache_manager - url: "https://pub.dartlang.org" + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" + url: "https://pub.dev" source: hosted - version: "3.1.2" - flutter_dash: - dependency: "direct main" - description: - name: flutter_dash - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.1" - flutter_inappwebview: - dependency: "direct main" - description: - name: flutter_inappwebview - url: "https://pub.dartlang.org" - source: hosted - version: "5.3.2" + version: "3.4.1" flutter_launcher_icons: - dependency: "direct main" + dependency: "direct dev" description: name: flutter_launcher_icons - url: "https://pub.dartlang.org" + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" + url: "https://pub.dev" source: hosted - version: "0.9.1" + version: "0.14.4" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - url: "https://pub.dartlang.org" + sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" + url: "https://pub.dev" source: hosted - version: "8.1.1" + version: "17.2.4" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af + url: "https://pub.dev" + source: hosted + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - url: "https://pub.dartlang.org" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" + url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -302,44 +343,55 @@ packages: dependency: transitive description: name: flutter_mailer - url: "https://pub.dartlang.org" + sha256: "48b442ee2b608e46b6ed935efe9f0dff7cffa76e1827b8a32cbcc48834fdb87c" + url: "https://pub.dev" source: hosted version: "2.0.0" flutter_markdown: dependency: "direct main" description: name: flutter_markdown - url: "https://pub.dartlang.org" + sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.7.7+1" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + sha256: aa36b33c721ac6e889adad07e3c87e6a07b33c28d1f2bc22f2561762cd7d2162 + url: "https://pub.dev" source: hosted version: "2.0.2" + flutter_rating_bar: + dependency: "direct main" + description: + name: flutter_rating_bar + sha256: d2af03469eac832c591a1eba47c91ecc871fe5708e69967073c043b2d775ed93 + url: "https://pub.dev" + source: hosted + version: "4.0.1" flutter_redux: dependency: "direct main" description: name: flutter_redux - url: "https://pub.dartlang.org" + sha256: "3b20be9e08d0038e1452fbfa1fdb1ea0a7c3738c997734530b3c6d0bb5fcdbdc" + url: "https://pub.dev" source: hosted - version: "0.8.2" + version: "0.10.0" flutter_spinkit: dependency: "direct main" description: name: flutter_spinkit - url: "https://pub.dartlang.org" + sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f" + url: "https://pub.dev" source: hosted - version: "5.0.0" - flutter_staggered_grid_view: - dependency: transitive - description: - name: flutter_staggered_grid_view - url: "https://pub.dartlang.org" - source: hosted - version: "0.3.4" + version: "5.2.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" flutter_web_plugins: dependency: "direct main" description: flutter @@ -349,688 +401,879 @@ packages: dependency: "direct main" description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: "90778fe0497fe3a09166e8cf2e0867310ff434b794526589e77ec03cf08ba8e8" + url: "https://pub.dev" source: hosted - version: "8.0.8" + version: "8.2.14" font_awesome_flutter: dependency: "direct main" description: name: font_awesome_flutter - url: "https://pub.dartlang.org" + sha256: b738e35f8bb4957896c34957baf922f99c5d415b38ddc8b070d14b7fa95715d4 + url: "https://pub.dev" source: hosted - version: "9.1.0" - gender_selection: - dependency: "direct main" - description: - name: gender_selection - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.0" + version: "10.9.1" geolocator: dependency: "direct main" description: name: geolocator - url: "https://pub.dartlang.org" + sha256: "149876cc5207a0f5daf4fdd3bfcf0a0f27258b3fe95108fa084f527ad0568f1b" + url: "https://pub.dev" source: hosted - version: "7.4.0" + version: "12.0.0" geolocator_android: dependency: transitive description: name: geolocator_android - url: "https://pub.dartlang.org" + sha256: fcb1760a50d7500deca37c9a666785c047139b5f9ee15aa5469fae7dbbe3170d + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "4.6.2" geolocator_apple: dependency: transitive description: name: geolocator_apple - url: "https://pub.dartlang.org" + sha256: "853803d6bb1713c094e935b4a5ae5f19c0308acf81da13fa9ff84fb4c70c0b73" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "2.3.14" geolocator_platform_interface: dependency: transitive description: name: geolocator_platform_interface - url: "https://pub.dartlang.org" + sha256: cdb082e4f048b69da244117b7914cc60d2a8897546ffaa4f2529c786ded7aee2 + url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "4.2.8" geolocator_web: dependency: transitive description: name: geolocator_web - url: "https://pub.dartlang.org" + sha256: "19e485a0f8d6a88abcf9c53cba3a4105e14b7435ed8ac1c108c067b938fe8429" + url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "4.1.4" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6" + url: "https://pub.dev" + source: hosted + version: "0.2.5" + google_maps: + dependency: transitive + description: + name: google_maps + sha256: "5d410c32112d7c6eb7858d359275b2aa04778eed3e36c745aeae905fb2fa6468" + url: "https://pub.dev" + source: hosted + version: "8.2.0" google_maps_flutter: dependency: "direct main" description: name: google_maps_flutter - url: "https://pub.dartlang.org" + sha256: "819985697596a42e1054b5feb2f407ba1ac92262e02844a40168e742b9f36dca" + url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.14.0" + google_maps_flutter_android: + dependency: transitive + description: + name: google_maps_flutter_android + sha256: "7c7ff5b883b27bfdd0d52d91d89faf00858a6c1b33aeca0dc80faca64f389983" + url: "https://pub.dev" + source: hosted + version: "2.18.3" + google_maps_flutter_ios: + dependency: transitive + description: + name: google_maps_flutter_ios + sha256: ca02463b19a9abc7d31fcaf22631d021d647107467f741b917a69fa26659fd75 + url: "https://pub.dev" + source: hosted + version: "2.15.5" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: f4b9b44f7b12a1f6707ffc79d082738e0b7e194bf728ee61d2b3cdf5fdf16081 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.14.0" + google_maps_flutter_web: + dependency: transitive + description: + name: google_maps_flutter_web + sha256: d416602944e1859f3cbbaa53e34785c223fa0a11eddb34a913c964c5cbb5d8cf + url: "https://pub.dev" + source: hosted + version: "0.5.14+3" hive: dependency: "direct main" description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.2.3" hive_flutter: dependency: "direct main" description: name: hive_flutter - url: "https://pub.dartlang.org" + sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc + url: "https://pub.dev" source: hosted version: "1.1.0" - hovering: - dependency: "direct main" - description: - name: hovering - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.4" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" source: hosted - version: "0.15.0" + version: "0.15.6" http: dependency: transitive description: name: http - url: "https://pub.dartlang.org" + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" source: hosted - version: "0.13.4" + version: "1.6.0" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185 + url: "https://pub.dev" source: hosted version: "4.0.0" image: dependency: transitive description: name: image - url: "https://pub.dartlang.org" + sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.8.0" image_picker: dependency: "direct main" description: name: image_picker - url: "https://pub.dartlang.org" + sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320" + url: "https://pub.dev" source: hosted - version: "0.8.3+1" + version: "1.2.1" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "28f3987ca0ec702d346eae1d90eda59603a2101b52f1e234ded62cff1d5cfa6e" + url: "https://pub.dev" + source: hosted + version: "0.8.13+1" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - url: "https://pub.dartlang.org" + sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "3.1.0" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e + url: "https://pub.dev" + source: hosted + version: "0.8.13" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" + url: "https://pub.dev" + source: hosted + version: "0.2.2" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04 + url: "https://pub.dev" + source: hosted + version: "0.2.2" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - url: "https://pub.dartlang.org" + sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.11.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae + url: "https://pub.dev" + source: hosted + version: "0.2.2" intl: dependency: transitive description: name: intl - url: "https://pub.dartlang.org" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" source: hosted - version: "0.17.0" - js: + version: "0.19.0" + json_annotation: dependency: transitive description: - name: js - url: "https://pub.dartlang.org" + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + url: "https://pub.dev" + source: hosted + version: "10.0.8" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + url: "https://pub.dev" + source: hosted + version: "3.0.9" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.3.0" mailer: dependency: transitive description: name: mailer - url: "https://pub.dartlang.org" + sha256: c3b934c0e800ddc946167c0123a900eba5acd009abb73648d0191a742542f2b4 + url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "6.6.0" markdown: dependency: transitive description: name: markdown - url: "https://pub.dartlang.org" + sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1" + url: "https://pub.dev" source: hosted - version: "4.0.0" - mask_text_input_formatter: + version: "7.3.0" + matcher: dependency: transitive description: - name: mask_text_input_formatter - url: "https://pub.dartlang.org" + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.11.1" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.16.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" source: hosted version: "1.0.0" octo_image: dependency: transitive description: name: octo_image - url: "https://pub.dartlang.org" + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" + url: "https://pub.dev" source: hosted - version: "1.0.0+1" + version: "2.1.0" package_info_plus: dependency: transitive description: name: package_info_plus - url: "https://pub.dartlang.org" + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" + url: "https://pub.dev" source: hosted - version: "1.0.4" - package_info_plus_linux: - dependency: transitive - description: - name: package_info_plus_linux - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.3" - package_info_plus_macos: - dependency: transitive - description: - name: package_info_plus_macos - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.1" + version: "4.2.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" source: hosted - version: "1.0.2" - package_info_plus_web: - dependency: transitive - description: - name: package_info_plus_web - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.3" - package_info_plus_windows: - dependency: transitive - description: - name: package_info_plus_windows - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.3" + version: "2.0.1" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.9.1" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "3b4c1fc3aa55ddc9cd4aa6759984330d5c8e66aa7702a6223c61540dc6380c37" + url: "https://pub.dev" + source: hosted + version: "2.2.19" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd" + url: "https://pub.dev" + source: hosted + version: "2.4.2" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" source: hosted - version: "2.0.2" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.2" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" source: hosted - version: "2.0.3" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" + version: "2.3.0" percent_indicator: dependency: "direct main" description: name: percent_indicator - url: "https://pub.dartlang.org" + sha256: "157d29133bbc6ecb11f923d36e7960a96a3f28837549a20b65e5135729f0f9fd" + url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.2.5" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "6.1.0" photo_view: dependency: "direct main" description: name: photo_view - url: "https://pub.dartlang.org" + sha256: "1fc3d970a91295fbd1364296575f854c9863f225505c28c46e0a03e48960c75e" + url: "https://pub.dev" source: hosted - version: "0.12.0" + version: "0.15.0" pinput: dependency: "direct main" description: name: pinput - url: "https://pub.dartlang.org" + sha256: c41f42ee301505ae2375ec32871c985d3717bf8aee845620465b286e0140aad2 + url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "5.0.2" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: ebc79f16b5f6b609aad4a5e63447d4795d16f7adee46e93ed03200848c006735 + url: "https://pub.dev" source: hosted version: "3.0.0" - platform_detect: - dependency: "direct main" - description: - name: platform_detect - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" source: hosted - version: "2.1.2" - process: + version: "2.1.8" + posix: dependency: transitive description: - name: process - url: "https://pub.dartlang.org" + name: posix + sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" + url: "https://pub.dev" source: hosted - version: "4.2.3" - pub_semver: + version: "6.5.0" + provider: dependency: transitive description: - name: pub_semver - url: "https://pub.dartlang.org" + name: provider + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "6.1.5+1" pull_to_refresh: dependency: "direct main" description: name: pull_to_refresh - url: "https://pub.dartlang.org" + sha256: bbadd5a931837b57739cf08736bea63167e284e71fb23b218c8c9a6e042aad12 + url: "https://pub.dev" source: hosted version: "2.0.0" redux: dependency: transitive description: name: redux - url: "https://pub.dartlang.org" + sha256: "1e86ed5b1a9a717922d0a0ca41f9bf49c1a587d50050e9426fc65b14e85ec4d7" + url: "https://pub.dev" source: hosted version: "5.0.0" responsive_builder: dependency: "direct main" description: name: responsive_builder - url: "https://pub.dartlang.org" + sha256: "64a5ef3fbe3628e4588a0c2391c3186300e76f58621d8135cc77aac816255a3e" + url: "https://pub.dev" source: hosted - version: "0.4.1" + version: "0.7.1" rxdart: dependency: transitive description: name: rxdart - url: "https://pub.dartlang.org" + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" source: hosted - version: "0.27.1" - searchable_dropdown: - dependency: "direct main" + version: "0.28.0" + sanitize_html: + dependency: transitive description: - name: searchable_dropdown - url: "https://pub.dartlang.org" + name: sanitize_html + sha256: "60257e2b8fd8b13b7c755065c2639a6c800031bb5bd3e30a007fc6739c77b2e1" + url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "2.2.0" sentry: dependency: transitive description: name: sentry - url: "https://pub.dartlang.org" + sha256: "57514bc72d441ffdc463f498d6886aa586a2494fa467a1eb9d649c28010d7ee3" + url: "https://pub.dev" source: hosted - version: "5.1.0" - share: - dependency: "direct main" - description: - name: share - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.4" - simple_animations: - dependency: transitive - description: - name: simple_animations - url: "https://pub.dartlang.org" - source: hosted - version: "4.2.0" + version: "7.20.2" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.99" - smooth_star_rating: - dependency: "direct main" - description: - name: smooth_star_rating - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.1" + version: "0.0.0" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" source: hosted - version: "1.8.1" - splashscreen: - dependency: "direct main" - description: - name: splashscreen - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.5" + version: "1.10.1" sqflite: dependency: transitive description: name: sqflite - url: "https://pub.dartlang.org" + sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 + url: "https://pub.dev" source: hosted - version: "2.0.0+3" + version: "2.4.2" + sqflite_android: + dependency: transitive + description: + name: sqflite_android + sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b" + url: "https://pub.dev" + source: hosted + version: "2.4.1" sqflite_common: dependency: transitive description: name: sqflite_common - url: "https://pub.dartlang.org" + sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" + url: "https://pub.dev" source: hosted - version: "2.0.0+2" + version: "2.5.5" + sqflite_darwin: + dependency: transitive + description: + name: sqflite_darwin + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + sqflite_platform_interface: + dependency: transitive + description: + name: sqflite_platform_interface + sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" + url: "https://pub.dev" + source: hosted + version: "2.4.0" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: ed464977cb26a1f41537e177e190c67223dbd9f4f683489b6ab2e5d211ec564e + url: "https://pub.dev" source: hosted version: "2.0.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" source: hosted - version: "1.1.0" - stripe_payment: - dependency: "direct main" - description: - name: stripe_payment - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.4" - stripe_sdk: - dependency: "direct main" - description: - path: "." - ref: HEAD - resolved-ref: "1c614cbb782fa664a2dda65377c85520dfaea92e" - url: "https://github.com/ezet/stripe-sdk.git" - source: git - version: "5.0.0-nullsafety.1" + version: "1.4.1" synchronized: dependency: transitive description: name: synchronized - url: "https://pub.dartlang.org" + sha256: "271977ff1e9e82ceefb4f08424b8839f577c1852e0726b5ce855311b46d3ef83" + url: "https://pub.dev" source: hosted version: "3.0.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + url: "https://pub.dev" + source: hosted + version: "0.7.4" timezone: dependency: transitive description: name: timezone - url: "https://pub.dartlang.org" + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" + url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.9.4" toggle_switch: dependency: "direct main" description: name: toggle_switch - url: "https://pub.dartlang.org" + sha256: dca04512d7c23ed320d6c5ede1211a404f177d54d353bf785b07d15546a86ce5 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "2.3.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" universal_html: dependency: "direct main" description: name: universal_html - url: "https://pub.dartlang.org" + sha256: c0bcae5c733c60f26c7dfc88b10b0fd27cbcc45cb7492311cdaa6067e21c9cd4 + url: "https://pub.dev" source: hosted - version: "2.0.8" + version: "2.3.0" universal_io: dependency: "direct main" description: name: universal_io - url: "https://pub.dartlang.org" + sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 + url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.3.1" + universal_platform: + dependency: transitive + description: + name: universal_platform + sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec" + url: "https://pub.dev" + source: hosted + version: "1.1.0" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" source: hosted - version: "6.1.5" + version: "6.3.2" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: "81777b08c498a292d93ff2feead633174c386291e35612f8da438d6e92c4447e" + url: "https://pub.dev" source: hosted - version: "6.0.17" + version: "6.3.20" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7 + url: "https://pub.dev" source: hosted - version: "6.0.17" + version: "6.3.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.2.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.2.3" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.4.1" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.1.4" url_strategy: dependency: "direct main" description: name: url_strategy - url: "https://pub.dartlang.org" + sha256: "6eff69fa0900b731a23552b38b54389f399d247dbb0998f2cbdf25bef6790a7c" + url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.3.0" uuid: dependency: "direct main" description: name: uuid - url: "https://pub.dartlang.org" + sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" + url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "4.6.0" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" + very_good_analysis: + dependency: transitive + description: + name: very_good_analysis + sha256: "9ae7f3a3bd5764fb021b335ca28a34f040cd0ab6eec00a1b213b445dae58a4b8" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + url: "https://pub.dev" + source: hosted + version: "14.3.1" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" webview_flutter: dependency: transitive description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba + url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "4.13.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: "9a25f6b4313978ba1c2cda03a242eea17848174912cfb4d2d8ee84a556f248e3" + url: "https://pub.dev" source: hosted - version: "2.9.1" + version: "4.10.1" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "63d26ee3aca7256a83ccb576a50272edd7cfc80573a4305caa98985feb493ee0" + url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "2.14.0" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: fb46db8216131a3e55bcf44040ca808423539bc6732e7ed34fb6d8044e3d512f + url: "https://pub.dev" source: hosted - version: "2.9.1" + version: "3.23.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" + url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "5.13.0" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" + url: "https://pub.dev" + source: hosted + version: "1.1.5" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "1.1.0" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" source: hosted - version: "5.1.2" + version: "6.5.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.3" youtube_player_iframe: dependency: "direct main" description: name: youtube_player_iframe - url: "https://pub.dartlang.org" + sha256: "6690da91591d14b32a6884eb6ae270ea4cc946a748d577d89d18cde565be689f" + url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "5.2.2" + youtube_player_iframe_web: + dependency: transitive + description: + name: youtube_player_iframe_web + sha256: "333901d008634f2ea67ef27aba8d597567e4ff45f393290b948a739654ab6dca" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: - dart: ">=2.17.0 <3.0.0" - flutter: ">=3.0.0" + dart: ">=3.7.0 <4.0.0" + flutter: ">=3.29.0" diff --git a/pubspec.yaml b/pubspec.yaml index 250a433..5a79249 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: flutter_wisetronic description: Wisetronic website # The following line prevents the package from being accidentally published to -# pub.dev using `pub publish`. This is preferred for private packages. +# pub.dev using `pub publish -- this is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. @@ -29,72 +29,60 @@ dependencies: flutter_web_plugins: sdk: flutter + cupertino_icons: ^1.0.8 + font_awesome_flutter: ^10.8.0 - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.1 - font_awesome_flutter: ^9.1.0 - - responsive_builder: ^0.4.1 - fluro: ^2.0.3 - flutter_redux: ^0.8.2 + responsive_builder: ^0.7.1 + fluro: ^2.0.5 + flutter_redux: ^0.10.0 event_bus: ^2.0.0 - cached_network_image: ^3.1.0 #^2.5.1 - pull_to_refresh: ^2.0.0 #^1.5.0 - splashscreen: ^1.3.5 - carousel_slider: ^4.0.0 - badges: ^2.0.1 - url_launcher: ^6.1.5 #^6.0.9 #^5.7.10 -# flutter_html: ^2.1.1 - flutter_markdown: ^0.6.4 #^0.5.1 - hive: ^2.0.4 #^1.4.4+1 - hive_flutter: ^1.1.0 #^0.3.1 - flutter_spinkit: ^5.0.0 - dio: ^4.0.0 #^3.0.10 - searchable_dropdown: ^1.1.3 - email_validator: ^2.0.1 - flappy_search_bar: ^1.7.2 - flutter_launcher_icons: ^0.9.1 #^0.8.1 -# package_info: ^2.0.2 - catcher: ^0.6.8 #^0.4.2 - share: ^2.0.4 #^0.6.5+4 - universal_io: ^2.0.4 #^1.0.2 - path_provider: ^2.0.2 #^1.6.28 -# path_provider: ^2.0.1 - platform_detect: ^2.0.0 - flutter_inappwebview: ^5.3.2 #^4.0.0+4 - youtube_player_iframe: ^2.2.1 #^1.2.0+2 - fluttertoast: ^8.0.8 #^7.1.8 - percent_indicator: ^4.2.2 #^3.0.1 - image_picker: ^0.8.0+3 #^0.6.7+22 - countdown: ^0.1.0 - gender_selection: ^1.0.0 -# uni_links: ^0.5.1 #^0.4.0 - photo_view: ^0.12.0 - flutter_dash: ^0.0.1 - smooth_star_rating: ^1.1.1 -# tesseract_ocr: ^0.3.1 -# local_auth: ^1.1.0 - toggle_switch: ^1.2.0 - pinput: ^1.2.0 - google_maps_flutter: ^2.0.6 #^1.2.0 -# Stripe removed — switched to e-Transfer. See UPGRADE_NOTES.md. - uuid: ^3.0.4 #^2.2.2 - ffi: ^1.0.0 -# firebase_messaging: ^10.0.4 #^7.0.3 - flutter_local_notifications: ^8.1.1 #^4.0.1+2 - geolocator: ^7.4.0 #^6.2.1 - url_strategy: ^0.2.0 - hovering: ^1.0.4 - universal_html: ^2.0.8 + cached_network_image: ^3.4.1 + carousel_slider: ^5.0.0 + badges: ^3.1.2 + url_launcher: ^6.3.1 + flutter_markdown: ^0.7.4 + flutter_spinkit: ^5.2.1 + dio: ^5.7.0 + email_validator: ^3.0.0 + path_provider: ^2.1.4 + youtube_player_iframe: ^5.2.0 + fluttertoast: ^8.2.8 + percent_indicator: ^4.2.3 + image_picker: ^1.1.2 + photo_view: ^0.15.0 + toggle_switch: ^2.3.0 + pinput: ^5.0.0 + google_maps_flutter: ^2.9.0 + uuid: ^4.5.1 + flutter_local_notifications: ^17.2.4 + geolocator: ^12.0.0 + url_strategy: ^0.3.0 + universal_io: ^2.2.2 + universal_html: ^2.2.4 -#dev_dependencies: -# flutter_test: -# sdk: flutter + # Replaces discontinued smooth_star_rating (no null-safe release). + flutter_rating_bar: ^4.0.1 -#dependency_overrides: -# webview_flutter: ^3.0.4 -# path: ^1.8.0 + # Discontinued but ship a null-safe release — KEPT for now to reach a runnable + # build with minimal churn. Scheduled for proper replacement in Phase 5: + # pull_to_refresh -> smart_refresher + # hive / hive_flutter -> hive_ce / hive_ce_flutter + # catcher -> catcher2 + pull_to_refresh: ^2.0.0 + hive: ^2.2.3 + hive_flutter: ^1.1.0 + catcher: ^0.8.0 + +# Removed in Phase 2 (no null-safe release and/or zero references): +# splashscreen, flappy_search_bar, searchable_dropdown, share, platform_detect, +# flutter_inappwebview, countdown, gender_selection, flutter_dash, +# smooth_star_rating, hovering, ffi +# Stripe payment deps removed in Phase 1 (switched to e-Transfer). + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_launcher_icons: ^0.14.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -112,42 +100,16 @@ flutter: - assets/ - assets/images/ - assets/tessdata/ - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: fonts: - family: wisetronic fonts: - asset: fonts/wisetronic.ttf - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages + flutter_intl: enabled: true flutter_icons: android: "launcher_icon" ios: true - image_path: "assets/images/icon.png" \ No newline at end of file + image_path: "assets/images/icon.png" diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 0e707e1..1c78060 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,11 +7,17 @@ #include "generated_plugin_registrant.h" #include -#include +#include +#include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { CatcherPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("CatcherPlugin")); - UrlLauncherPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("UrlLauncherPlugin")); + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); + GeolocatorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("GeolocatorWindows")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 3e2cef5..cc85433 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,6 +4,8 @@ list(APPEND FLUTTER_PLUGIN_LIST catcher + file_selector_windows + geolocator_windows url_launcher_windows )