提交 72c27baf authored 作者: 张国庆's avatar 张国庆

feat: 升级依赖版本到支持到 flutter3.38.3

上级 80a26b16
#
# Generated file, do not edit.
#
import lldb
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
base = frame.register["x0"].GetValueAsAddress()
page_len = frame.register["x1"].GetValueAsUnsigned()
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
# first page to see if handled it correctly. This makes diagnosing
# misconfiguration (e.g. missing breakpoint) easier.
data = bytearray(page_len)
data[0:8] = b'IHELPED!'
error = lldb.SBError()
frame.GetThread().GetProcess().WriteMemory(base, data, error)
if not error.Success():
print(f'Failed to write into {base}[+{page_len}]', error)
return
def __lldb_init_module(debugger: lldb.SBDebugger, _):
target = debugger.GetDummyTarget()
# Caveat: must use BreakpointCreateByRegEx here and not
# BreakpointCreateByName. For some reasons callback function does not
# get carried over from dummy target for the later.
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
bp.SetAutoContinue(True)
print("-- LLDB integration loaded --")
#
# Generated file, do not edit.
#
command script import --relative-to-command-file flutter_lldb_helper.py
......@@ -13,7 +13,7 @@ class SkeletonItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final themeData = Theme.of(context);
final backgroundColor = themeData.colorScheme.surfaceVariant;
final backgroundColor = themeData.colorScheme.surfaceContainerHighest;
final foregroundColor = themeData.colorScheme.surface;
if (direction == Axis.vertical) {
return Card(
......
......@@ -36,7 +36,7 @@ void setProxyUri(Dio? dio, bool isProdEnv) {
}
/// 设置代理widget
setProxyWidget(context) {
StatelessWidget setProxyWidget(BuildContext context) {
return (!setProxyFlag)
? Container()
: InkWell(
......@@ -62,7 +62,7 @@ var ipController = TextEditingController();
var portController = TextEditingController();
/// 设置代理dialog
setProxyDialog(context) {
void setProxyDialog(BuildContext context) {
ipController.text = SpUtil.getString(spProxyIp) ?? "";
portController.text = SpUtil.getString(spProxyPort) ?? "";
showDialog(
......@@ -80,7 +80,7 @@ setProxyDialog(context) {
const Spacer(),
Builder(builder: (context) {
return Switch(
activeColor: Colors.blue,
activeThumbColor: Colors.blue,
activeTrackColor: Colors.grey,
inactiveThumbColor: Colors.blue,
inactiveTrackColor: Colors.grey,
......@@ -144,7 +144,7 @@ bool _checkInfo() {
}
/// ip、端口 输入框
Widget _textFieldItem({title, controller}) {
Widget _textFieldItem({required String title, required TextEditingController controller}) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
margin: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
......
// ignore_for_file: depend_on_referenced_packages
import 'package:flutter/widgets.dart';
import 'package:flutter_clx_base/utils/log_utils.dart';
import 'package:intl/intl.dart';
......@@ -109,7 +111,7 @@ extension StringExt on String? {
/// num 扩展函数
extension DoubleExt on num? {
// 格式化小数两位
String formatDouble({nullTxt = "-"}) {
String formatDouble({String nullTxt = "-"}) {
if (this == null) {
return nullTxt;
}
......@@ -138,7 +140,7 @@ extension DoubleExt on num? {
}
// int 转换 默认0
String formatInt({nullTxt = "-"}) {
String formatInt({String nullTxt = "-"}) {
if (this == null) {
return nullTxt;
}
......@@ -166,7 +168,7 @@ extension DoubleExt on num? {
/// TextEditingController 扩展
extension TextEditingControllerExt on TextEditingController? {
setContent(String text) {
void setContent(String text) {
// 设置内容 光标展示最后
this
?..text = text
......
......@@ -88,7 +88,7 @@ const Widget vGap130 = SizedBox(height: 130.0);
const Widget vGap140 = SizedBox(height: 140.0);
const Widget vGap150 = SizedBox(height: 150.0);
Widget line({height = 1.0, Color? color}) =>
Widget line({double height = 1.0, Color? color}) =>
Divider(height: height, color: color, thickness: height);
Widget vLine({double? width, double? height, Color? color}) => SizedBox(
......
library flutter_clx_base;
library;
export 'package:dio/dio.dart';
......@@ -6,7 +6,7 @@ export 'package:easy_refresh/easy_refresh.dart';
export 'package:flustars_flutter3/flustars_flutter3.dart';
export 'package:flutter_cupertino_datetime_picker/flutter_cupertino_datetime_picker.dart';
export 'package:flutter_localizations/flutter_localizations.dart';
export 'package:get/get.dart' hide FormData hide MultipartFile hide Response;
export 'package:get/get.dart' hide FormData, MultipartFile, Response;
export 'package:getwidget/getwidget.dart';
export 'package:image_picker/image_picker.dart';
export 'package:keyboard_actions/keyboard_actions.dart';
......@@ -32,3 +32,4 @@ export 'widget/my_scaffold.dart';
export 'widget/my_scroll_view.dart';
export 'widget/my_subclass_list_public.dart';
export 'widget/search_app_bar.dart';
export 'package:pretty_dio_logger/pretty_dio_logger.dart';
\ No newline at end of file
......@@ -29,7 +29,7 @@ String getTXTString(dynamic data) {
}
// 格式化小数两位
String formatDouble(number, {nullTxt = "-"}) {
String formatDouble(String? number, {String nullTxt = "-"}) {
if (number == null || number == "") {
return nullTxt;
}
......@@ -42,9 +42,9 @@ String formatDouble(number, {nullTxt = "-"}) {
}
if ((num.toString().length - num.toString().lastIndexOf(".") - 1) < 2) {
//小数点后有几位小数
return num.toStringAsFixed(2)
.substring(0, num.toString().lastIndexOf(".") + 2 + 1)
.toString();
return num.toStringAsFixed(
2,
).substring(0, num.toString().lastIndexOf(".") + 2 + 1).toString();
} else {
return num.toString()
.substring(0, num.toString().lastIndexOf(".") + 2 + 1)
......@@ -53,12 +53,12 @@ String formatDouble(number, {nullTxt = "-"}) {
}
// double格式化 默认 0.00
String formatDoubleZero(number) {
String formatDoubleZero(dynamic number) {
return formatDouble(number, nullTxt: "0.00");
}
// int 转换 默认0
String formatInt(number, {nullTxt = "-"}) {
String formatInt(dynamic number, {String nullTxt = "-"}) {
if (number == null || number == "") {
return nullTxt;
}
......@@ -73,7 +73,7 @@ String formatInt(number, {nullTxt = "-"}) {
}
// int格式化 默认 0
String formatIntZero(number) {
String formatIntZero(dynamic number) {
return formatInt(number, nullTxt: "0");
}
......@@ -82,7 +82,7 @@ String formatIntZero(number) {
/// onRefuse 拒绝权限
/// onSettings 手动设置权限
/// onCancelSettings 不手动设置权限
requestPermission({
void requestPermission({
VoidCallback? onGranted,
VoidCallback? onRefuse,
VoidCallback? onSettings,
......@@ -96,10 +96,8 @@ requestPermission({
onFailed: onRefuse, // 权限拒绝回调
onOpenSetting: () {
Get.dialog(
WillPopScope(
onWillPop: () {
return Future.value(false);
},
PopScope(
canPop: false,
child: NormalDialog(
title: "温馨提示",
content: toSettingTip,
......@@ -112,7 +110,8 @@ requestPermission({
onCancel: onCancelSettings, // 不跳转设置页面回调
),
),
barrierDismissible: false);
barrierDismissible: false,
);
},
);
}
// ignore: depend_on_referenced_packages
import 'package:shared_preferences/shared_preferences.dart';
/// 推荐:使用 Enum 来管理所有的 Key,避免字符串拼写错误
enum StorageKey {
token,
themeMode,
userName,
isFirstLaunch,
testKey, // 示例键
}
class StorageService {
// 1. 私有构造函数
StorageService._internal();
// 2. 静态单例对象
static final StorageService _instance = StorageService._internal();
// 3. 工厂构造函数,返回单例
factory StorageService() => _instance;
// 4. 初始化新版 API 实例 (无缓存,全异步,跨 Isolate 安全)
final SharedPreferencesAsync _prefs = SharedPreferencesAsync();
// =========================================================
// 通用泛型存储方法 (支持 String 和 Enum 作为 Key)
// =========================================================
/// 保存字符串
Future<void> setString(dynamic key, String value) async {
await _prefs.setString(_getKey(key), value);
}
/// 获取字符串
Future<String?> getString(dynamic key) async {
return await _prefs.getString(_getKey(key));
}
/// 保存布尔值
Future<void> setBool(dynamic key, bool value) async {
await _prefs.setBool(_getKey(key), value);
}
/// 获取布尔值
Future<bool?> getBool(dynamic key) async {
return await _prefs.getBool(_getKey(key));
}
/// 保存整数
Future<void> setInt(dynamic key, int value) async {
await _prefs.setInt(_getKey(key), value);
}
/// 获取整数
Future<int?> getInt(dynamic key) async {
return await _prefs.getInt(_getKey(key));
}
/// 保存浮点数
Future<void> setDouble(dynamic key, double value) async {
await _prefs.setDouble(_getKey(key), value);
}
/// 获取浮点数
Future<double?> getDouble(dynamic key) async {
return await _prefs.getDouble(_getKey(key));
}
/// 保存字符串列表
Future<void> setStringList(dynamic key, List<String> value) async {
await _prefs.setStringList(_getKey(key), value);
}
/// 获取字符串列表
Future<List<String>?> getStringList(dynamic key) async {
return await _prefs.getStringList(_getKey(key));
}
// =========================================================
// 删除与清空
// =========================================================
/// 删除单个 Key
Future<void> remove(dynamic key) async {
await _prefs.remove(_getKey(key));
}
/// 清空所有数据 (慎用)
/// allowList: 如果提供了列表,则只清除列表中的 Key
Future<void> clear({Set<String>? allowList}) async {
await _prefs.clear(allowList: allowList);
}
// =========================================================
// 内部辅助方法
// =========================================================
/// 将 Enum 转换为 String,或者直接使用 String
String _getKey(dynamic key) {
if (key is Enum) {
return key.name; // 或者使用 key.toString() 取决于你的偏好
} else if (key is String) {
return key;
} else {
throw Exception('Storage Key must be of type String or Enum');
}
}
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ bool isNullOrEmpty(String? txt) {
}
///判断文字是否为空
String txtIsNull(txt, {nullTxt = "-"}) {
String txtIsNull(String? txt, {String nullTxt = "-"}) {
if (txt == null || txt == "") {
return nullTxt;
} else {
......@@ -14,11 +14,11 @@ String txtIsNull(txt, {nullTxt = "-"}) {
}
}
String txtIsNullWithTitle(txt, title, {nullTxt = "-"}) {
String txtIsNullWithTitle(String? txt, String title, {String nullTxt = "-"}) {
if (txt == null || txt == "") {
return nullTxt;
} else {
return title + ": " + txt;
return "$title: $txt";
}
}
......@@ -113,7 +113,7 @@ bool checkPwdRuleDriver(String pwd){
}
/// 禁止输入表情
regexEmoji() {
String regexEmoji() {
return "[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]";
}
......
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_clx_base/flutter_clx_base.dart';
import 'package:flutter_clx_base/widget/state_layout.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
......@@ -19,7 +18,7 @@ class BaseListWidget extends StatefulWidget {
final bool refreshOnStart; // 首次展示列表是否刷新数据
const BaseListWidget({
Key? key,
super.key,
required this.requestData,
required this.itemBuilder,
this.pageSize = 10,
......@@ -30,7 +29,7 @@ class BaseListWidget extends StatefulWidget {
this.emptyWidget,
this.canLoadMore = true, // 是否支持上拉刷新
this.refreshOnStart = true,
}) : super(key: key);
});
@override
State<BaseListWidget> createState() => _BaseListWidgetState();
......@@ -38,7 +37,7 @@ class BaseListWidget extends StatefulWidget {
class _BaseListWidgetState extends State<BaseListWidget> {
late BaseListController _controller;
ScrollController _scrollController = ScrollController();
final ScrollController _scrollController = ScrollController();
final _CIProperties _headerProperties = _CIProperties(
name: 'Header',
alignment: MainAxisAlignment.center,
......@@ -167,7 +166,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
_stateType = isEmpty ? StateType.empty : StateType.success;
}
void _requestError(code, msg) {
void _requestError( dynamic code, dynamic msg) {
if (!mounted) {
return;
}
......@@ -189,7 +188,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
ClassicHeader(
clamping: _headerProperties.clamping,
backgroundColor: _headerProperties.background
? Theme.of(context).colorScheme.surfaceVariant
? Theme.of(context).colorScheme.surfaceContainerHighest
: null,
mainAxisAlignment: _headerProperties.alignment,
showMessage: _headerProperties.message,
......@@ -212,7 +211,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
ClassicFooter(
clamping: _footerProperties.clamping,
backgroundColor: _footerProperties.background
? Theme.of(context).colorScheme.surfaceVariant
? Theme.of(context).colorScheme.surfaceContainerHighest
: null,
mainAxisAlignment: _footerProperties.alignment,
showMessage: _footerProperties.message,
......@@ -283,7 +282,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
}
// 刷新单个数据
void notifySingleItem(index, item) {
void notifySingleItem(int index, dynamic item) {
_dataList[index] = item;
if (mounted) {
setState(() {});
......@@ -356,7 +355,7 @@ class BaseListController {
}
// 刷新单个数据
void notifySingleItem(index, item) {
void notifySingleItem(int index, dynamic item) {
_listState?.notifySingleItem(index, item);
}
......@@ -373,7 +372,7 @@ class BaseListController {
);
}
get c => _controller;
EasyRefreshController get c => _controller;
int? get total => _listState?._count;
}
......
......@@ -7,7 +7,7 @@ class CustomPagingList extends EasyPaging<List<String>, String> {
const CustomPagingList({
Key? key,
super.key,
super.callLoadOverOffset,
super.callRefreshOverOffset,
super.clipBehavior,
......@@ -24,7 +24,7 @@ class CustomPagingList extends EasyPaging<List<String>, String> {
super.itemBuilder,
super.refreshOnStartWidgetBuilder,
super.emptyWidgetBuilder,
}) : super(key: key);
});
@override
......
......@@ -9,8 +9,7 @@ class HeadWidget extends StatelessWidget {
final double? height;
const HeadWidget(
{Key? key, this.domain, this.headUrl, this.width, this.height})
: super(key: key);
{super.key, this.domain, this.headUrl, this.width, this.height});
@override
Widget build(BuildContext context) {
......
......@@ -87,7 +87,7 @@ class ImageWidget {
//缓存 本地图片
static void cacheAssetImage(
context,
BuildContext context,
String image, {
String format = 'png',
}) {
......@@ -97,7 +97,7 @@ class ImageWidget {
//缓存 网络图片
static void cacheNetImage(
context,
BuildContext context,
String url, {
String? domain,
}) {
......
......@@ -13,7 +13,7 @@ class MyPageAppBar extends StatelessWidget implements PreferredSizeWidget {
final double? titleSpacing; // 标题横向padding
const MyPageAppBar({
Key? key,
super.key,
this.title,
this.backgroundColor,
this.foregroundColor,
......@@ -24,7 +24,7 @@ class MyPageAppBar extends StatelessWidget implements PreferredSizeWidget {
this.elevation = 0,
this.titleWidget,
this.titleSpacing,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
......
......@@ -8,7 +8,7 @@ import 'state_layout.dart';
/// 封装下拉刷新与加载更多
class MyListViewPublic extends StatefulWidget {
const MyListViewPublic({
Key? key,
super.key,
required this.itemBuilder,
required this.requestData,
this.pageSize = 10,
......@@ -21,7 +21,7 @@ class MyListViewPublic extends StatefulWidget {
this.emptyText,
this.emptyImg,
this.errorImg,
}) : super(key: key);
});
final bool canLoadMore; //是否允许上拉
final ItemBuilder itemBuilder;
......@@ -93,7 +93,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
}
// 移除数据
void removeItem(index) {
void removeItem(int index) {
_dataList.removeAt(index);
listItemCount = _dataList.length;
if (_dataList.isEmpty) {
......@@ -108,7 +108,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
}
// 刷新单个数据
void notifySingleItem(index, beanJson) {
void notifySingleItem(int index, dynamic beanJson) {
_dataList[index] = beanJson;
if (mounted) {
setState(() {});
......@@ -196,7 +196,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
}
}
void _requestError(r, s) {
void _requestError(dynamic r, dynamic s) {
stateType = StateType.error; //显示异常布局
_isLoading = false;
if (mounted) {
......@@ -233,12 +233,12 @@ class MyListController {
}
// 移除数据
void removeItem(index) {
void removeItem(int index) {
return _deerListViewState?.removeItem(index);
}
// 刷新单个数据
void notifySingleItem(index, beanJson) {
void notifySingleItem(int index, dynamic beanJson) {
return _deerListViewState?.notifySingleItem(index, beanJson);
}
}
......@@ -248,8 +248,8 @@ class MoreWidget extends StatelessWidget {
this.itemCount,
this.hasMore,
this.pageSize, {
Key? key,
}) : super(key: key);
super.key,
});
final int itemCount;
final bool hasMore;
......
......@@ -19,7 +19,7 @@ class MyScaffold extends StatelessWidget {
final Widget? endDrawer;
const MyScaffold({
Key? key,
super.key,
this.appBar,
this.backgroundColor,
this.title = "",
......@@ -32,7 +32,7 @@ class MyScaffold extends StatelessWidget {
this.floatingActionButton,
this.controller,
this.endDrawer,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
......
......@@ -8,7 +8,7 @@ class MyScrollView extends StatelessWidget {
/// 注意:同时存在底部按钮与keyboardConfig配置时,为保证软键盘弹出高度正常。需要在`Scaffold`使用 `resizeToAvoidBottomInset: defaultTargetPlatform != TargetPlatform.iOS,`
/// 除非Android与iOS平台均使用keyboard_actions
const MyScrollView({
Key? key,
super.key,
required this.children,
this.padding,
this.physics = const BouncingScrollPhysics(),
......@@ -18,7 +18,7 @@ class MyScrollView extends StatelessWidget {
this.tapOutsideToDismiss = false,
this.overScroll = 16.0,
this.controller,
}) : super(key: key);
});
final List<Widget> children;
final EdgeInsetsGeometry? padding;
......
......@@ -19,7 +19,7 @@ class MySubListViewPublic extends StatelessWidget {
final Function? onRefresh;
const MySubListViewPublic({
Key? key,
super.key,
required this.itemBuilder,
required this.requestData,
this.pageSize = 10,
......@@ -31,7 +31,7 @@ class MySubListViewPublic extends StatelessWidget {
this.firstRefresh = true,
this.emptyText,
this.emptyImg,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
......
......@@ -29,7 +29,7 @@ class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
final double? elevation; // 阴影
const SearchAppBar({
Key? key,
super.key,
this.onCallback,
this.hintText = "请输入搜索内容",
this.leading,
......@@ -53,7 +53,7 @@ class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
this.searchBgRadius,
this.maxLength,
this.elevation,
}) : super(key: key);
});
@override
State<SearchAppBar> createState() => _SearchAppBarState();
......
......@@ -4,7 +4,7 @@ import 'package:flutter_clx_base/common/gaps.dart';
class SelectTextItem extends StatelessWidget {
const SelectTextItem({
Key? key,
super.key,
required this.title,
this.titleColor = text999,
this.titleFontSize = 14.0,
......@@ -26,7 +26,7 @@ class SelectTextItem extends StatelessWidget {
this.leftImage,
this.leftImageWidth,
this.leftImageHeight,
}) : super(key: key);
});
final GestureTapCallback? onTap;
final String title;
......
......@@ -12,7 +12,7 @@ class StateLayout extends StatefulWidget {
final double size;
const StateLayout({
Key? key,
super.key,
required this.type,
this.emptyImg,
this.hintText,
......@@ -20,7 +20,7 @@ class StateLayout extends StatefulWidget {
this.onRefresh,
this.loadingWidget,
this.size = 270,
}) : super(key: key);
});
@override
State<StateLayout> createState() => _StateLayoutState();
......
name: flutter_clx_base
description: A new base library
version: 1.0.7
homepage: http://t.clxkj.cn/clx-android/flutter_clx_base.git
homepage: https://t.clxkj.cn/clx-android/flutter_clx_base
environment:
sdk: ">=2.17.0 <4.0.0"
sdk: ^3.10.1
flutter: ">=2.5.0"
dependencies:
......@@ -13,68 +13,59 @@ dependencies:
flutter_localizations:
sdk: flutter
# dio https://pub.dev/packages/dio
dio: ^5.3.1
dio: 5.9.0
# 时间选择器 https://pub.dev/packages/flutter_cupertino_datetime_picker
flutter_cupertino_datetime_picker: ^3.0.0
flutter_cupertino_datetime_picker: 3.0.0
# 键盘工具类 https://pub.dev/packages/keyboard_actions
keyboard_actions: ^4.0.1
keyboard_actions: 4.2.1
# sp https://pub.dev/packages/sp_util
sp_util: ^2.0.3
sp_util: 2.0.3
# get https://pub.dev/packages/get
get: ^4.6.5
get: 4.7.3
# 日志打印 https://pub.dev/packages/logger
logger: ^1.2.2
logger: 2.6.2
# toast https://pub.dev/packages/fluttertoast
fluttertoast: ^8.2.1
fluttertoast: 9.0.0
# webview https://pub.dev/packages/webview_flutter
webview_flutter: ^4.0.5
webview_flutter: 4.13.0
# 显示网页Widget https://pub.dev/packages/flutter_widget_from_html_core
flutter_widget_from_html_core: ^0.10.0
flutter_widget_from_html_core: 0.17.0
# 包信息 https://pub.dev/packages/package_info_plus
package_info_plus: ^3.0.3
package_info_plus: 9.0.0
# 权限 https://pub.dev/packages/permission_handler
permission_handler: ^9.2.0
permission_handler: 12.0.1
# https://pub.dev/packages/url_launcher
url_launcher: ^6.1.2
url_launcher: 6.3.2
# loading https://pub.dev/packages/flutter_easyloading
flutter_easyloading: ^3.0.5
flutter_easyloading: 3.0.5
# https://pub.dev/packages/auto_size_text
auto_size_text: ^3.0.0
auto_size_text: 3.0.0
# https://pub.flutter-io.cn/packages/getwidget
getwidget: ^3.0.1
getwidget: 7.0.0
# https://pub.dev/packages/octo_image
octo_image: ^2.0.0
octo_image: 2.1.0
# https://pub.dev/packages/cached_network_image
cached_network_image: ^3.3.0
cached_network_image: 3.4.1
# https://pub.dev/packages/image_picker
image_picker: ^0.8.6
image_picker: 1.2.1
#https://pub.dev/packages/flustars_flutter3
flustars_flutter3: ^3.0.0
flustars_flutter3: 3.0.0
#https://pub.dev/packages/easy_refresh
easy_refresh: ^3.3.1
easy_refresh: 3.4.0
#https://pub.dev/packages/flutter_spinkit
flutter_spinkit: ^5.1.0
flutter_spinkit: 5.2.2
# https://pub.dev/packages/pretty_dio_logger
pretty_dio_logger: ^1.3.1
pretty_dio_logger: 1.4.0
# 获取设备唯一标识 https://pub.dev/packages/unique_identifier
unique_identifier: ^0.3.0
unique_identifier: 0.4.0
# 设备信息 https://pub.dev/packages/device_info_plus
device_info_plus: ^8.1.0
device_info_plus: 12.3.0
#获取设备id https://t.clxkj:cn/openSourceLibrary/device_id_plugin.git
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter_lints: ^6.0.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论