Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
F
flutter_clx_base
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
flutter_clx_base
Commits
72c27baf
提交
72c27baf
authored
12月 29, 2025
作者:
张国庆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 升级依赖版本到支持到 flutter3.38.3
上级
80a26b16
显示空白字符变更
内嵌
并排
正在显示
23 个修改的文件
包含
242 行增加
和
103 行删除
+242
-103
flutter_lldb_helper.py
example/ios/Flutter/ephemeral/flutter_lldb_helper.py
+32
-0
flutter_lldbinit
example/ios/Flutter/ephemeral/flutter_lldbinit
+5
-0
skeleton_item.dart
example/lib/sample/skeleton_item.dart
+1
-1
proxy.dart
lib/api/proxy.dart
+4
-4
extension.dart
lib/common/extension.dart
+5
-3
gaps.dart
lib/common/gaps.dart
+1
-1
flutter_clx_base.dart
lib/flutter_clx_base.dart
+4
-2
common_utils.dart
lib/utils/common_utils.dart
+12
-13
storage_service.dart
lib/utils/storage_service.dart
+110
-0
string_util.dart
lib/utils/string_util.dart
+4
-4
base_list_widget.dart
lib/widget/base_list_widget.dart
+9
-10
custom_paging_list.dart
lib/widget/custom_paging_list.dart
+2
-2
head_widget.dart
lib/widget/head_widget.dart
+1
-2
image_widget.dart
lib/widget/image_widget.dart
+2
-2
my_app_bar.dart
lib/widget/my_app_bar.dart
+2
-2
my_refresh_list_public.dart
lib/widget/my_refresh_list_public.dart
+9
-9
my_scaffold.dart
lib/widget/my_scaffold.dart
+2
-2
my_scroll_view.dart
lib/widget/my_scroll_view.dart
+2
-2
my_subclass_list_public.dart
lib/widget/my_subclass_list_public.dart
+2
-2
search_app_bar.dart
lib/widget/search_app_bar.dart
+2
-2
select_text_item.dart
lib/widget/select_text_item.dart
+2
-2
state_layout.dart
lib/widget/state_layout.dart
+2
-2
pubspec.yaml
pubspec.yaml
+27
-36
没有找到文件。
example/ios/Flutter/ephemeral/flutter_lldb_helper.py
0 → 100644
浏览文件 @
72c27baf
#
# 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 --"
)
example/ios/Flutter/ephemeral/flutter_lldbinit
0 → 100644
浏览文件 @
72c27baf
#
# Generated file, do not edit.
#
command script import --relative-to-command-file flutter_lldb_helper.py
example/lib/sample/skeleton_item.dart
浏览文件 @
72c27baf
...
@@ -13,7 +13,7 @@ class SkeletonItem extends StatelessWidget {
...
@@ -13,7 +13,7 @@ class SkeletonItem extends StatelessWidget {
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
final
themeData
=
Theme
.
of
(
context
);
final
themeData
=
Theme
.
of
(
context
);
final
backgroundColor
=
themeData
.
colorScheme
.
surface
Varian
t
;
final
backgroundColor
=
themeData
.
colorScheme
.
surface
ContainerHighes
t
;
final
foregroundColor
=
themeData
.
colorScheme
.
surface
;
final
foregroundColor
=
themeData
.
colorScheme
.
surface
;
if
(
direction
==
Axis
.
vertical
)
{
if
(
direction
==
Axis
.
vertical
)
{
return
Card
(
return
Card
(
...
...
lib/api/proxy.dart
浏览文件 @
72c27baf
...
@@ -36,7 +36,7 @@ void setProxyUri(Dio? dio, bool isProdEnv) {
...
@@ -36,7 +36,7 @@ void setProxyUri(Dio? dio, bool isProdEnv) {
}
}
/// 设置代理widget
/// 设置代理widget
setProxyWidget
(
context
)
{
StatelessWidget
setProxyWidget
(
BuildContext
context
)
{
return
(!
setProxyFlag
)
return
(!
setProxyFlag
)
?
Container
()
?
Container
()
:
InkWell
(
:
InkWell
(
...
@@ -62,7 +62,7 @@ var ipController = TextEditingController();
...
@@ -62,7 +62,7 @@ var ipController = TextEditingController();
var
portController
=
TextEditingController
();
var
portController
=
TextEditingController
();
/// 设置代理dialog
/// 设置代理dialog
setProxyDialog
(
context
)
{
void
setProxyDialog
(
BuildContext
context
)
{
ipController
.
text
=
SpUtil
.
getString
(
spProxyIp
)
??
""
;
ipController
.
text
=
SpUtil
.
getString
(
spProxyIp
)
??
""
;
portController
.
text
=
SpUtil
.
getString
(
spProxyPort
)
??
""
;
portController
.
text
=
SpUtil
.
getString
(
spProxyPort
)
??
""
;
showDialog
(
showDialog
(
...
@@ -80,7 +80,7 @@ setProxyDialog(context) {
...
@@ -80,7 +80,7 @@ setProxyDialog(context) {
const
Spacer
(),
const
Spacer
(),
Builder
(
builder:
(
context
)
{
Builder
(
builder:
(
context
)
{
return
Switch
(
return
Switch
(
activeColor:
Colors
.
blue
,
active
Thumb
Color:
Colors
.
blue
,
activeTrackColor:
Colors
.
grey
,
activeTrackColor:
Colors
.
grey
,
inactiveThumbColor:
Colors
.
blue
,
inactiveThumbColor:
Colors
.
blue
,
inactiveTrackColor:
Colors
.
grey
,
inactiveTrackColor:
Colors
.
grey
,
...
@@ -144,7 +144,7 @@ bool _checkInfo() {
...
@@ -144,7 +144,7 @@ bool _checkInfo() {
}
}
/// ip、端口 输入框
/// ip、端口 输入框
Widget
_textFieldItem
(
{
title
,
controller
})
{
Widget
_textFieldItem
(
{
required
String
title
,
required
TextEditingController
controller
})
{
return
Container
(
return
Container
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
20.0
),
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
20.0
),
margin:
const
EdgeInsets
.
symmetric
(
horizontal:
20.0
,
vertical:
10.0
),
margin:
const
EdgeInsets
.
symmetric
(
horizontal:
20.0
,
vertical:
10.0
),
...
...
lib/common/extension.dart
浏览文件 @
72c27baf
// ignore_for_file: depend_on_referenced_packages
import
'package:flutter/widgets.dart'
;
import
'package:flutter/widgets.dart'
;
import
'package:flutter_clx_base/utils/log_utils.dart'
;
import
'package:flutter_clx_base/utils/log_utils.dart'
;
import
'package:intl/intl.dart'
;
import
'package:intl/intl.dart'
;
...
@@ -109,7 +111,7 @@ extension StringExt on String? {
...
@@ -109,7 +111,7 @@ extension StringExt on String? {
/// num 扩展函数
/// num 扩展函数
extension
DoubleExt
on
num
?
{
extension
DoubleExt
on
num
?
{
// 格式化小数两位
// 格式化小数两位
String
formatDouble
({
nullTxt
=
"-"
})
{
String
formatDouble
({
String
nullTxt
=
"-"
})
{
if
(
this
==
null
)
{
if
(
this
==
null
)
{
return
nullTxt
;
return
nullTxt
;
}
}
...
@@ -138,7 +140,7 @@ extension DoubleExt on num? {
...
@@ -138,7 +140,7 @@ extension DoubleExt on num? {
}
}
// int 转换 默认0
// int 转换 默认0
String
formatInt
({
nullTxt
=
"-"
})
{
String
formatInt
({
String
nullTxt
=
"-"
})
{
if
(
this
==
null
)
{
if
(
this
==
null
)
{
return
nullTxt
;
return
nullTxt
;
}
}
...
@@ -166,7 +168,7 @@ extension DoubleExt on num? {
...
@@ -166,7 +168,7 @@ extension DoubleExt on num? {
/// TextEditingController 扩展
/// TextEditingController 扩展
extension
TextEditingControllerExt
on
TextEditingController
?
{
extension
TextEditingControllerExt
on
TextEditingController
?
{
setContent
(
String
text
)
{
void
setContent
(
String
text
)
{
// 设置内容 光标展示最后
// 设置内容 光标展示最后
this
this
?..
text
=
text
?..
text
=
text
...
...
lib/common/gaps.dart
浏览文件 @
72c27baf
...
@@ -88,7 +88,7 @@ const Widget vGap130 = SizedBox(height: 130.0);
...
@@ -88,7 +88,7 @@ const Widget vGap130 = SizedBox(height: 130.0);
const
Widget
vGap140
=
SizedBox
(
height:
140.0
);
const
Widget
vGap140
=
SizedBox
(
height:
140.0
);
const
Widget
vGap150
=
SizedBox
(
height:
150.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
);
Divider
(
height:
height
,
color:
color
,
thickness:
height
);
Widget
vLine
(
{
double
?
width
,
double
?
height
,
Color
?
color
})
=>
SizedBox
(
Widget
vLine
(
{
double
?
width
,
double
?
height
,
Color
?
color
})
=>
SizedBox
(
...
...
lib/flutter_clx_base.dart
浏览文件 @
72c27baf
library
flutter_clx_base
;
library
;
export
'package:dio/dio.dart'
;
export
'package:dio/dio.dart'
;
...
@@ -6,7 +6,7 @@ export 'package:easy_refresh/easy_refresh.dart';
...
@@ -6,7 +6,7 @@ export 'package:easy_refresh/easy_refresh.dart';
export
'package:flustars_flutter3/flustars_flutter3.dart'
;
export
'package:flustars_flutter3/flustars_flutter3.dart'
;
export
'package:flutter_cupertino_datetime_picker/flutter_cupertino_datetime_picker.dart'
;
export
'package:flutter_cupertino_datetime_picker/flutter_cupertino_datetime_picker.dart'
;
export
'package:flutter_localizations/flutter_localizations.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:getwidget/getwidget.dart'
;
export
'package:image_picker/image_picker.dart'
;
export
'package:image_picker/image_picker.dart'
;
export
'package:keyboard_actions/keyboard_actions.dart'
;
export
'package:keyboard_actions/keyboard_actions.dart'
;
...
@@ -32,3 +32,4 @@ export 'widget/my_scaffold.dart';
...
@@ -32,3 +32,4 @@ export 'widget/my_scaffold.dart';
export
'widget/my_scroll_view.dart'
;
export
'widget/my_scroll_view.dart'
;
export
'widget/my_subclass_list_public.dart'
;
export
'widget/my_subclass_list_public.dart'
;
export
'widget/search_app_bar.dart'
;
export
'widget/search_app_bar.dart'
;
export
'package:pretty_dio_logger/pretty_dio_logger.dart'
;
\ No newline at end of file
lib/utils/common_utils.dart
浏览文件 @
72c27baf
...
@@ -29,7 +29,7 @@ String getTXTString(dynamic data) {
...
@@ -29,7 +29,7 @@ String getTXTString(dynamic data) {
}
}
// 格式化小数两位
// 格式化小数两位
String
formatDouble
(
number
,
{
nullTxt
=
"-"
})
{
String
formatDouble
(
String
?
number
,
{
String
nullTxt
=
"-"
})
{
if
(
number
==
null
||
number
==
""
)
{
if
(
number
==
null
||
number
==
""
)
{
return
nullTxt
;
return
nullTxt
;
}
}
...
@@ -42,9 +42,9 @@ String formatDouble(number, {nullTxt = "-"}) {
...
@@ -42,9 +42,9 @@ String formatDouble(number, {nullTxt = "-"}) {
}
}
if
((
num
.
toString
().
length
-
num
.
toString
().
lastIndexOf
(
"."
)
-
1
)
<
2
)
{
if
((
num
.
toString
().
length
-
num
.
toString
().
lastIndexOf
(
"."
)
-
1
)
<
2
)
{
//小数点后有几位小数
//小数点后有几位小数
return
num
.
toStringAsFixed
(
2
)
return
num
.
toStringAsFixed
(
.
substring
(
0
,
num
.
toString
().
lastIndexOf
(
"."
)
+
2
+
1
)
2
,
.
toString
();
).
substring
(
0
,
num
.
toString
().
lastIndexOf
(
"."
)
+
2
+
1
)
.
toString
();
}
else
{
}
else
{
return
num
.
toString
()
return
num
.
toString
()
.
substring
(
0
,
num
.
toString
().
lastIndexOf
(
"."
)
+
2
+
1
)
.
substring
(
0
,
num
.
toString
().
lastIndexOf
(
"."
)
+
2
+
1
)
...
@@ -53,12 +53,12 @@ String formatDouble(number, {nullTxt = "-"}) {
...
@@ -53,12 +53,12 @@ String formatDouble(number, {nullTxt = "-"}) {
}
}
// double格式化 默认 0.00
// double格式化 默认 0.00
String
formatDoubleZero
(
number
)
{
String
formatDoubleZero
(
dynamic
number
)
{
return
formatDouble
(
number
,
nullTxt:
"0.00"
);
return
formatDouble
(
number
,
nullTxt:
"0.00"
);
}
}
// int 转换 默认0
// int 转换 默认0
String
formatInt
(
number
,
{
nullTxt
=
"-"
})
{
String
formatInt
(
dynamic
number
,
{
String
nullTxt
=
"-"
})
{
if
(
number
==
null
||
number
==
""
)
{
if
(
number
==
null
||
number
==
""
)
{
return
nullTxt
;
return
nullTxt
;
}
}
...
@@ -73,7 +73,7 @@ String formatInt(number, {nullTxt = "-"}) {
...
@@ -73,7 +73,7 @@ String formatInt(number, {nullTxt = "-"}) {
}
}
// int格式化 默认 0
// int格式化 默认 0
String
formatIntZero
(
number
)
{
String
formatIntZero
(
dynamic
number
)
{
return
formatInt
(
number
,
nullTxt:
"0"
);
return
formatInt
(
number
,
nullTxt:
"0"
);
}
}
...
@@ -82,7 +82,7 @@ String formatIntZero(number) {
...
@@ -82,7 +82,7 @@ String formatIntZero(number) {
/// onRefuse 拒绝权限
/// onRefuse 拒绝权限
/// onSettings 手动设置权限
/// onSettings 手动设置权限
/// onCancelSettings 不手动设置权限
/// onCancelSettings 不手动设置权限
requestPermission
({
void
requestPermission
(
{
VoidCallback
?
onGranted
,
VoidCallback
?
onGranted
,
VoidCallback
?
onRefuse
,
VoidCallback
?
onRefuse
,
VoidCallback
?
onSettings
,
VoidCallback
?
onSettings
,
...
@@ -96,10 +96,8 @@ requestPermission({
...
@@ -96,10 +96,8 @@ requestPermission({
onFailed:
onRefuse
,
// 权限拒绝回调
onFailed:
onRefuse
,
// 权限拒绝回调
onOpenSetting:
()
{
onOpenSetting:
()
{
Get
.
dialog
(
Get
.
dialog
(
WillPopScope
(
PopScope
(
onWillPop:
()
{
canPop:
false
,
return
Future
.
value
(
false
);
},
child:
NormalDialog
(
child:
NormalDialog
(
title:
"温馨提示"
,
title:
"温馨提示"
,
content:
toSettingTip
,
content:
toSettingTip
,
...
@@ -112,7 +110,8 @@ requestPermission({
...
@@ -112,7 +110,8 @@ requestPermission({
onCancel:
onCancelSettings
,
// 不跳转设置页面回调
onCancel:
onCancelSettings
,
// 不跳转设置页面回调
),
),
),
),
barrierDismissible:
false
);
barrierDismissible:
false
,
);
},
},
);
);
}
}
lib/utils/storage_service.dart
0 → 100644
浏览文件 @
72c27baf
// 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
lib/utils/string_util.dart
浏览文件 @
72c27baf
...
@@ -6,7 +6,7 @@ bool isNullOrEmpty(String? txt) {
...
@@ -6,7 +6,7 @@ bool isNullOrEmpty(String? txt) {
}
}
///判断文字是否为空
///判断文字是否为空
String
txtIsNull
(
txt
,
{
nullTxt
=
"-"
})
{
String
txtIsNull
(
String
?
txt
,
{
String
nullTxt
=
"-"
})
{
if
(
txt
==
null
||
txt
==
""
)
{
if
(
txt
==
null
||
txt
==
""
)
{
return
nullTxt
;
return
nullTxt
;
}
else
{
}
else
{
...
@@ -14,11 +14,11 @@ String txtIsNull(txt, {nullTxt = "-"}) {
...
@@ -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
==
""
)
{
if
(
txt
==
null
||
txt
==
""
)
{
return
nullTxt
;
return
nullTxt
;
}
else
{
}
else
{
return
title
+
": "
+
txt
;
return
"
$title
:
$txt
"
;
}
}
}
}
...
@@ -113,7 +113,7 @@ bool checkPwdRuleDriver(String pwd){
...
@@ -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
]"
;
return
"[^
\\
u0020-
\\
u007E
\\
u00A0-
\\
u00BE
\\
u2E80-
\\
uA4CF
\\
uF900-
\\
uFAFF
\\
uFE30-
\\
uFE4F
\\
uFF00-
\\
uFFEF
\\
u0080-
\\
u009F
\\
u2000-
\\
u201f
\r\n
]"
;
}
}
...
...
lib/widget/base_list_widget.dart
浏览文件 @
72c27baf
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/widgets.dart'
;
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
import
'package:flutter_clx_base/widget/state_layout.dart'
;
import
'package:flutter_clx_base/widget/state_layout.dart'
;
import
'package:flutter_spinkit/flutter_spinkit.dart'
;
import
'package:flutter_spinkit/flutter_spinkit.dart'
;
...
@@ -19,7 +18,7 @@ class BaseListWidget extends StatefulWidget {
...
@@ -19,7 +18,7 @@ class BaseListWidget extends StatefulWidget {
final
bool
refreshOnStart
;
// 首次展示列表是否刷新数据
final
bool
refreshOnStart
;
// 首次展示列表是否刷新数据
const
BaseListWidget
({
const
BaseListWidget
({
Key
?
key
,
super
.
key
,
required
this
.
requestData
,
required
this
.
requestData
,
required
this
.
itemBuilder
,
required
this
.
itemBuilder
,
this
.
pageSize
=
10
,
this
.
pageSize
=
10
,
...
@@ -30,7 +29,7 @@ class BaseListWidget extends StatefulWidget {
...
@@ -30,7 +29,7 @@ class BaseListWidget extends StatefulWidget {
this
.
emptyWidget
,
this
.
emptyWidget
,
this
.
canLoadMore
=
true
,
// 是否支持上拉刷新
this
.
canLoadMore
=
true
,
// 是否支持上拉刷新
this
.
refreshOnStart
=
true
,
this
.
refreshOnStart
=
true
,
})
:
super
(
key:
key
)
;
});
@override
@override
State
<
BaseListWidget
>
createState
()
=>
_BaseListWidgetState
();
State
<
BaseListWidget
>
createState
()
=>
_BaseListWidgetState
();
...
@@ -38,7 +37,7 @@ class BaseListWidget extends StatefulWidget {
...
@@ -38,7 +37,7 @@ class BaseListWidget extends StatefulWidget {
class
_BaseListWidgetState
extends
State
<
BaseListWidget
>
{
class
_BaseListWidgetState
extends
State
<
BaseListWidget
>
{
late
BaseListController
_controller
;
late
BaseListController
_controller
;
ScrollController
_scrollController
=
ScrollController
();
final
ScrollController
_scrollController
=
ScrollController
();
final
_CIProperties
_headerProperties
=
_CIProperties
(
final
_CIProperties
_headerProperties
=
_CIProperties
(
name:
'Header'
,
name:
'Header'
,
alignment:
MainAxisAlignment
.
center
,
alignment:
MainAxisAlignment
.
center
,
...
@@ -167,7 +166,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
...
@@ -167,7 +166,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
_stateType
=
isEmpty
?
StateType
.
empty
:
StateType
.
success
;
_stateType
=
isEmpty
?
StateType
.
empty
:
StateType
.
success
;
}
}
void
_requestError
(
code
,
msg
)
{
void
_requestError
(
dynamic
code
,
dynamic
msg
)
{
if
(!
mounted
)
{
if
(!
mounted
)
{
return
;
return
;
}
}
...
@@ -189,7 +188,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
...
@@ -189,7 +188,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
ClassicHeader
(
ClassicHeader
(
clamping:
_headerProperties
.
clamping
,
clamping:
_headerProperties
.
clamping
,
backgroundColor:
_headerProperties
.
background
backgroundColor:
_headerProperties
.
background
?
Theme
.
of
(
context
).
colorScheme
.
surface
Varian
t
?
Theme
.
of
(
context
).
colorScheme
.
surface
ContainerHighes
t
:
null
,
:
null
,
mainAxisAlignment:
_headerProperties
.
alignment
,
mainAxisAlignment:
_headerProperties
.
alignment
,
showMessage:
_headerProperties
.
message
,
showMessage:
_headerProperties
.
message
,
...
@@ -212,7 +211,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
...
@@ -212,7 +211,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
ClassicFooter
(
ClassicFooter
(
clamping:
_footerProperties
.
clamping
,
clamping:
_footerProperties
.
clamping
,
backgroundColor:
_footerProperties
.
background
backgroundColor:
_footerProperties
.
background
?
Theme
.
of
(
context
).
colorScheme
.
surface
Varian
t
?
Theme
.
of
(
context
).
colorScheme
.
surface
ContainerHighes
t
:
null
,
:
null
,
mainAxisAlignment:
_footerProperties
.
alignment
,
mainAxisAlignment:
_footerProperties
.
alignment
,
showMessage:
_footerProperties
.
message
,
showMessage:
_footerProperties
.
message
,
...
@@ -283,7 +282,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
...
@@ -283,7 +282,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
}
}
// 刷新单个数据
// 刷新单个数据
void
notifySingleItem
(
in
dex
,
item
)
{
void
notifySingleItem
(
in
t
index
,
dynamic
item
)
{
_dataList
[
index
]
=
item
;
_dataList
[
index
]
=
item
;
if
(
mounted
)
{
if
(
mounted
)
{
setState
(()
{});
setState
(()
{});
...
@@ -356,7 +355,7 @@ class BaseListController {
...
@@ -356,7 +355,7 @@ class BaseListController {
}
}
// 刷新单个数据
// 刷新单个数据
void
notifySingleItem
(
in
dex
,
item
)
{
void
notifySingleItem
(
in
t
index
,
dynamic
item
)
{
_listState
?.
notifySingleItem
(
index
,
item
);
_listState
?.
notifySingleItem
(
index
,
item
);
}
}
...
@@ -373,7 +372,7 @@ class BaseListController {
...
@@ -373,7 +372,7 @@ class BaseListController {
);
);
}
}
get
c
=>
_controller
;
EasyRefreshController
get
c
=>
_controller
;
int
?
get
total
=>
_listState
?.
_count
;
int
?
get
total
=>
_listState
?.
_count
;
}
}
...
...
lib/widget/custom_paging_list.dart
浏览文件 @
72c27baf
...
@@ -7,7 +7,7 @@ class CustomPagingList extends EasyPaging<List<String>, String> {
...
@@ -7,7 +7,7 @@ class CustomPagingList extends EasyPaging<List<String>, String> {
const
CustomPagingList
({
const
CustomPagingList
({
Key
?
key
,
super
.
key
,
super
.
callLoadOverOffset
,
super
.
callLoadOverOffset
,
super
.
callRefreshOverOffset
,
super
.
callRefreshOverOffset
,
super
.
clipBehavior
,
super
.
clipBehavior
,
...
@@ -24,7 +24,7 @@ class CustomPagingList extends EasyPaging<List<String>, String> {
...
@@ -24,7 +24,7 @@ class CustomPagingList extends EasyPaging<List<String>, String> {
super
.
itemBuilder
,
super
.
itemBuilder
,
super
.
refreshOnStartWidgetBuilder
,
super
.
refreshOnStartWidgetBuilder
,
super
.
emptyWidgetBuilder
,
super
.
emptyWidgetBuilder
,
})
:
super
(
key:
key
)
;
});
@override
@override
...
...
lib/widget/head_widget.dart
浏览文件 @
72c27baf
...
@@ -9,8 +9,7 @@ class HeadWidget extends StatelessWidget {
...
@@ -9,8 +9,7 @@ class HeadWidget extends StatelessWidget {
final
double
?
height
;
final
double
?
height
;
const
HeadWidget
(
const
HeadWidget
(
{
Key
?
key
,
this
.
domain
,
this
.
headUrl
,
this
.
width
,
this
.
height
})
{
super
.
key
,
this
.
domain
,
this
.
headUrl
,
this
.
width
,
this
.
height
});
:
super
(
key:
key
);
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
...
...
lib/widget/image_widget.dart
浏览文件 @
72c27baf
...
@@ -87,7 +87,7 @@ class ImageWidget {
...
@@ -87,7 +87,7 @@ class ImageWidget {
//缓存 本地图片
//缓存 本地图片
static
void
cacheAssetImage
(
static
void
cacheAssetImage
(
context
,
BuildContext
context
,
String
image
,
{
String
image
,
{
String
format
=
'png'
,
String
format
=
'png'
,
})
{
})
{
...
@@ -97,7 +97,7 @@ class ImageWidget {
...
@@ -97,7 +97,7 @@ class ImageWidget {
//缓存 网络图片
//缓存 网络图片
static
void
cacheNetImage
(
static
void
cacheNetImage
(
context
,
BuildContext
context
,
String
url
,
{
String
url
,
{
String
?
domain
,
String
?
domain
,
})
{
})
{
...
...
lib/widget/my_app_bar.dart
浏览文件 @
72c27baf
...
@@ -13,7 +13,7 @@ class MyPageAppBar extends StatelessWidget implements PreferredSizeWidget {
...
@@ -13,7 +13,7 @@ class MyPageAppBar extends StatelessWidget implements PreferredSizeWidget {
final
double
?
titleSpacing
;
// 标题横向padding
final
double
?
titleSpacing
;
// 标题横向padding
const
MyPageAppBar
({
const
MyPageAppBar
({
Key
?
key
,
super
.
key
,
this
.
title
,
this
.
title
,
this
.
backgroundColor
,
this
.
backgroundColor
,
this
.
foregroundColor
,
this
.
foregroundColor
,
...
@@ -24,7 +24,7 @@ class MyPageAppBar extends StatelessWidget implements PreferredSizeWidget {
...
@@ -24,7 +24,7 @@ class MyPageAppBar extends StatelessWidget implements PreferredSizeWidget {
this
.
elevation
=
0
,
this
.
elevation
=
0
,
this
.
titleWidget
,
this
.
titleWidget
,
this
.
titleSpacing
,
this
.
titleSpacing
,
})
:
super
(
key:
key
)
;
});
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
...
...
lib/widget/my_refresh_list_public.dart
浏览文件 @
72c27baf
...
@@ -8,7 +8,7 @@ import 'state_layout.dart';
...
@@ -8,7 +8,7 @@ import 'state_layout.dart';
/// 封装下拉刷新与加载更多
/// 封装下拉刷新与加载更多
class
MyListViewPublic
extends
StatefulWidget
{
class
MyListViewPublic
extends
StatefulWidget
{
const
MyListViewPublic
({
const
MyListViewPublic
({
Key
?
key
,
super
.
key
,
required
this
.
itemBuilder
,
required
this
.
itemBuilder
,
required
this
.
requestData
,
required
this
.
requestData
,
this
.
pageSize
=
10
,
this
.
pageSize
=
10
,
...
@@ -21,7 +21,7 @@ class MyListViewPublic extends StatefulWidget {
...
@@ -21,7 +21,7 @@ class MyListViewPublic extends StatefulWidget {
this
.
emptyText
,
this
.
emptyText
,
this
.
emptyImg
,
this
.
emptyImg
,
this
.
errorImg
,
this
.
errorImg
,
})
:
super
(
key:
key
)
;
});
final
bool
canLoadMore
;
//是否允许上拉
final
bool
canLoadMore
;
//是否允许上拉
final
ItemBuilder
itemBuilder
;
final
ItemBuilder
itemBuilder
;
...
@@ -93,7 +93,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
...
@@ -93,7 +93,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
}
}
// 移除数据
// 移除数据
void
removeItem
(
index
)
{
void
removeItem
(
in
t
in
dex
)
{
_dataList
.
removeAt
(
index
);
_dataList
.
removeAt
(
index
);
listItemCount
=
_dataList
.
length
;
listItemCount
=
_dataList
.
length
;
if
(
_dataList
.
isEmpty
)
{
if
(
_dataList
.
isEmpty
)
{
...
@@ -108,7 +108,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
...
@@ -108,7 +108,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
}
}
// 刷新单个数据
// 刷新单个数据
void
notifySingleItem
(
in
dex
,
beanJson
)
{
void
notifySingleItem
(
in
t
index
,
dynamic
beanJson
)
{
_dataList
[
index
]
=
beanJson
;
_dataList
[
index
]
=
beanJson
;
if
(
mounted
)
{
if
(
mounted
)
{
setState
(()
{});
setState
(()
{});
...
@@ -196,7 +196,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
...
@@ -196,7 +196,7 @@ class _MyListViewPublicState extends State<MyListViewPublic> {
}
}
}
}
void
_requestError
(
r
,
s
)
{
void
_requestError
(
dynamic
r
,
dynamic
s
)
{
stateType
=
StateType
.
error
;
//显示异常布局
stateType
=
StateType
.
error
;
//显示异常布局
_isLoading
=
false
;
_isLoading
=
false
;
if
(
mounted
)
{
if
(
mounted
)
{
...
@@ -233,12 +233,12 @@ class MyListController {
...
@@ -233,12 +233,12 @@ class MyListController {
}
}
// 移除数据
// 移除数据
void
removeItem
(
index
)
{
void
removeItem
(
in
t
in
dex
)
{
return
_deerListViewState
?.
removeItem
(
index
);
return
_deerListViewState
?.
removeItem
(
index
);
}
}
// 刷新单个数据
// 刷新单个数据
void
notifySingleItem
(
in
dex
,
beanJson
)
{
void
notifySingleItem
(
in
t
index
,
dynamic
beanJson
)
{
return
_deerListViewState
?.
notifySingleItem
(
index
,
beanJson
);
return
_deerListViewState
?.
notifySingleItem
(
index
,
beanJson
);
}
}
}
}
...
@@ -248,8 +248,8 @@ class MoreWidget extends StatelessWidget {
...
@@ -248,8 +248,8 @@ class MoreWidget extends StatelessWidget {
this
.
itemCount
,
this
.
itemCount
,
this
.
hasMore
,
this
.
hasMore
,
this
.
pageSize
,
{
this
.
pageSize
,
{
Key
?
key
,
super
.
key
,
})
:
super
(
key:
key
)
;
});
final
int
itemCount
;
final
int
itemCount
;
final
bool
hasMore
;
final
bool
hasMore
;
...
...
lib/widget/my_scaffold.dart
浏览文件 @
72c27baf
...
@@ -19,7 +19,7 @@ class MyScaffold extends StatelessWidget {
...
@@ -19,7 +19,7 @@ class MyScaffold extends StatelessWidget {
final
Widget
?
endDrawer
;
final
Widget
?
endDrawer
;
const
MyScaffold
({
const
MyScaffold
({
Key
?
key
,
super
.
key
,
this
.
appBar
,
this
.
appBar
,
this
.
backgroundColor
,
this
.
backgroundColor
,
this
.
title
=
""
,
this
.
title
=
""
,
...
@@ -32,7 +32,7 @@ class MyScaffold extends StatelessWidget {
...
@@ -32,7 +32,7 @@ class MyScaffold extends StatelessWidget {
this
.
floatingActionButton
,
this
.
floatingActionButton
,
this
.
controller
,
this
.
controller
,
this
.
endDrawer
,
this
.
endDrawer
,
})
:
super
(
key:
key
)
;
});
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
...
...
lib/widget/my_scroll_view.dart
浏览文件 @
72c27baf
...
@@ -8,7 +8,7 @@ class MyScrollView extends StatelessWidget {
...
@@ -8,7 +8,7 @@ class MyScrollView extends StatelessWidget {
/// 注意:同时存在底部按钮与keyboardConfig配置时,为保证软键盘弹出高度正常。需要在`Scaffold`使用 `resizeToAvoidBottomInset: defaultTargetPlatform != TargetPlatform.iOS,`
/// 注意:同时存在底部按钮与keyboardConfig配置时,为保证软键盘弹出高度正常。需要在`Scaffold`使用 `resizeToAvoidBottomInset: defaultTargetPlatform != TargetPlatform.iOS,`
/// 除非Android与iOS平台均使用keyboard_actions
/// 除非Android与iOS平台均使用keyboard_actions
const
MyScrollView
({
const
MyScrollView
({
Key
?
key
,
super
.
key
,
required
this
.
children
,
required
this
.
children
,
this
.
padding
,
this
.
padding
,
this
.
physics
=
const
BouncingScrollPhysics
(),
this
.
physics
=
const
BouncingScrollPhysics
(),
...
@@ -18,7 +18,7 @@ class MyScrollView extends StatelessWidget {
...
@@ -18,7 +18,7 @@ class MyScrollView extends StatelessWidget {
this
.
tapOutsideToDismiss
=
false
,
this
.
tapOutsideToDismiss
=
false
,
this
.
overScroll
=
16.0
,
this
.
overScroll
=
16.0
,
this
.
controller
,
this
.
controller
,
})
:
super
(
key:
key
)
;
});
final
List
<
Widget
>
children
;
final
List
<
Widget
>
children
;
final
EdgeInsetsGeometry
?
padding
;
final
EdgeInsetsGeometry
?
padding
;
...
...
lib/widget/my_subclass_list_public.dart
浏览文件 @
72c27baf
...
@@ -19,7 +19,7 @@ class MySubListViewPublic extends StatelessWidget {
...
@@ -19,7 +19,7 @@ class MySubListViewPublic extends StatelessWidget {
final
Function
?
onRefresh
;
final
Function
?
onRefresh
;
const
MySubListViewPublic
({
const
MySubListViewPublic
({
Key
?
key
,
super
.
key
,
required
this
.
itemBuilder
,
required
this
.
itemBuilder
,
required
this
.
requestData
,
required
this
.
requestData
,
this
.
pageSize
=
10
,
this
.
pageSize
=
10
,
...
@@ -31,7 +31,7 @@ class MySubListViewPublic extends StatelessWidget {
...
@@ -31,7 +31,7 @@ class MySubListViewPublic extends StatelessWidget {
this
.
firstRefresh
=
true
,
this
.
firstRefresh
=
true
,
this
.
emptyText
,
this
.
emptyText
,
this
.
emptyImg
,
this
.
emptyImg
,
})
:
super
(
key:
key
)
;
});
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
...
...
lib/widget/search_app_bar.dart
浏览文件 @
72c27baf
...
@@ -29,7 +29,7 @@ class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
...
@@ -29,7 +29,7 @@ class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
final
double
?
elevation
;
// 阴影
final
double
?
elevation
;
// 阴影
const
SearchAppBar
({
const
SearchAppBar
({
Key
?
key
,
super
.
key
,
this
.
onCallback
,
this
.
onCallback
,
this
.
hintText
=
"请输入搜索内容"
,
this
.
hintText
=
"请输入搜索内容"
,
this
.
leading
,
this
.
leading
,
...
@@ -53,7 +53,7 @@ class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
...
@@ -53,7 +53,7 @@ class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
this
.
searchBgRadius
,
this
.
searchBgRadius
,
this
.
maxLength
,
this
.
maxLength
,
this
.
elevation
,
this
.
elevation
,
})
:
super
(
key:
key
)
;
});
@override
@override
State
<
SearchAppBar
>
createState
()
=>
_SearchAppBarState
();
State
<
SearchAppBar
>
createState
()
=>
_SearchAppBarState
();
...
...
lib/widget/select_text_item.dart
浏览文件 @
72c27baf
...
@@ -4,7 +4,7 @@ import 'package:flutter_clx_base/common/gaps.dart';
...
@@ -4,7 +4,7 @@ import 'package:flutter_clx_base/common/gaps.dart';
class
SelectTextItem
extends
StatelessWidget
{
class
SelectTextItem
extends
StatelessWidget
{
const
SelectTextItem
({
const
SelectTextItem
({
Key
?
key
,
super
.
key
,
required
this
.
title
,
required
this
.
title
,
this
.
titleColor
=
text999
,
this
.
titleColor
=
text999
,
this
.
titleFontSize
=
14.0
,
this
.
titleFontSize
=
14.0
,
...
@@ -26,7 +26,7 @@ class SelectTextItem extends StatelessWidget {
...
@@ -26,7 +26,7 @@ class SelectTextItem extends StatelessWidget {
this
.
leftImage
,
this
.
leftImage
,
this
.
leftImageWidth
,
this
.
leftImageWidth
,
this
.
leftImageHeight
,
this
.
leftImageHeight
,
})
:
super
(
key:
key
)
;
});
final
GestureTapCallback
?
onTap
;
final
GestureTapCallback
?
onTap
;
final
String
title
;
final
String
title
;
...
...
lib/widget/state_layout.dart
浏览文件 @
72c27baf
...
@@ -12,7 +12,7 @@ class StateLayout extends StatefulWidget {
...
@@ -12,7 +12,7 @@ class StateLayout extends StatefulWidget {
final
double
size
;
final
double
size
;
const
StateLayout
({
const
StateLayout
({
Key
?
key
,
super
.
key
,
required
this
.
type
,
required
this
.
type
,
this
.
emptyImg
,
this
.
emptyImg
,
this
.
hintText
,
this
.
hintText
,
...
@@ -20,7 +20,7 @@ class StateLayout extends StatefulWidget {
...
@@ -20,7 +20,7 @@ class StateLayout extends StatefulWidget {
this
.
onRefresh
,
this
.
onRefresh
,
this
.
loadingWidget
,
this
.
loadingWidget
,
this
.
size
=
270
,
this
.
size
=
270
,
})
:
super
(
key:
key
)
;
});
@override
@override
State
<
StateLayout
>
createState
()
=>
_StateLayoutState
();
State
<
StateLayout
>
createState
()
=>
_StateLayoutState
();
...
...
pubspec.yaml
浏览文件 @
72c27baf
name
:
flutter_clx_base
name
:
flutter_clx_base
description
:
A new base library
description
:
A new base library
version
:
1.0.7
version
:
1.0.7
homepage
:
http
://t.clxkj.cn/clx-android/flutter_clx_base.git
homepage
:
http
s://t.clxkj.cn/clx-android/flutter_clx_base
environment
:
environment
:
sdk
:
"
>=2.17.0
<4.0.0"
sdk
:
^3.10.1
flutter
:
"
>=2.5.0"
flutter
:
"
>=2.5.0"
dependencies
:
dependencies
:
...
@@ -13,68 +13,59 @@ dependencies:
...
@@ -13,68 +13,59 @@ dependencies:
flutter_localizations
:
flutter_localizations
:
sdk
:
flutter
sdk
:
flutter
# dio https://pub.dev/packages/dio
# dio https://pub.dev/packages/dio
dio
:
^5.3.1
dio
:
5.9.0
# 时间选择器 https://pub.dev/packages/flutter_cupertino_datetime_picker
# 时间选择器 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
# 键盘工具类 https://pub.dev/packages/keyboard_actions
keyboard_actions
:
^4.0
.1
keyboard_actions
:
4.2
.1
# sp https://pub.dev/packages/sp_util
# sp https://pub.dev/packages/sp_util
sp_util
:
^
2.0.3
sp_util
:
2.0.3
# get https://pub.dev/packages/get
# get https://pub.dev/packages/get
get
:
^4.6.5
get
:
4.7.3
# 日志打印 https://pub.dev/packages/logger
# 日志打印 https://pub.dev/packages/logger
logger
:
^1.2
.2
logger
:
2.6
.2
# toast https://pub.dev/packages/fluttertoast
# toast https://pub.dev/packages/fluttertoast
fluttertoast
:
^8.2.1
fluttertoast
:
9.0.0
# webview https://pub.dev/packages/webview_flutter
# 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
# 显示网页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
# 包信息 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
# 权限 https://pub.dev/packages/permission_handler
permission_handler
:
^9.2.0
permission_handler
:
12.0.1
# https://pub.dev/packages/url_launcher
# https://pub.dev/packages/url_launcher
url_launcher
:
^6.1
.2
url_launcher
:
6.3
.2
# loading https://pub.dev/packages/flutter_easyloading
# loading https://pub.dev/packages/flutter_easyloading
flutter_easyloading
:
^
3.0.5
flutter_easyloading
:
3.0.5
# https://pub.dev/packages/auto_size_text
# 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
# https://pub.flutter-io.cn/packages/getwidget
getwidget
:
^3.0.1
getwidget
:
7.0.0
# https://pub.dev/packages/octo_image
# https://pub.dev/packages/octo_image
octo_image
:
^2.0
.0
octo_image
:
2.1
.0
# https://pub.dev/packages/cached_network_image
# 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
# https://pub.dev/packages/image_picker
image_picker
:
^0.8.6
image_picker
:
1.2.1
#https://pub.dev/packages/flustars_flutter3
#https://pub.dev/packages/flustars_flutter3
flustars_flutter3
:
^
3.0.0
flustars_flutter3
:
3.0.0
#https://pub.dev/packages/easy_refresh
#https://pub.dev/packages/easy_refresh
easy_refresh
:
^3.3.1
easy_refresh
:
3.4.0
#https://pub.dev/packages/flutter_spinkit
#https://pub.dev/packages/flutter_spinkit
flutter_spinkit
:
^5.1.0
flutter_spinkit
:
5.2.2
# https://pub.dev/packages/pretty_dio_logger
# 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
# 获取设备唯一标识 https://pub.dev/packages/unique_identifier
unique_identifier
:
^0.3
.0
unique_identifier
:
0.4
.0
# 设备信息 https://pub.dev/packages/device_info_plus
# 设备信息 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
#获取设备id https://t.clxkj:cn/openSourceLibrary/device_id_plugin.git
dev_dependencies
:
dev_dependencies
:
flutter_test
:
flutter_test
:
sdk
:
flutter
sdk
:
flutter
flutter_lints
:
^
2
.0.0
flutter_lints
:
^
6
.0.0
# For information on the generic Dart part of this file, see the
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# following page: https://dart.dev/tools/pub/pubspec
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论