提交 883b112b authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 f3019c68
{
"dart.flutterSdkPath": "~/flutter"
}
html,
body,
h1,
h2,
h3,
h4,
h5,
h6,
p,
div,
table,
tr,
td,
tbody,
tfoot,
th,
dl,
dt,
dd,
ol,
ul,
li,
a,
sub,
sup,
strong,
b,
em,
i,
code,
pre,
img,
section,
article,
input,
textarea,
span,
blockquote {
margin: 0;
padding: 0;
margin-block: 0;
outline: none;
}
* {
-webkit-touch-callout: none;
}
input,
textarea,
span {
outline: none;
resize: none;
}
a,
a:hover {
text-decoration: none;
border: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
outline: none;
}
input[type=radio],
input[type=checkbox] {
display: none;
}
sub,
pre,
code {
user-select: none;
-webkit-user-select: none;
}
line {
border-bottom: 2px solid #AB1941;
font-weight: normal;
cursor: pointer;
}
light {
font-weight: normal;
cursor: pointer;
}
light.c-feff00 {
background-color: #feff00;
}
light.c-feff00::selection {
background-color: #feff00;
}
light.c-00ff00 {
background-color: #00ff00;
}
light.c-00ff00::selection {
background-color: #00ff00;
}
light.c-00ffff {
background-color: #00ffff;
}
light.c-00ffff::selection {
background-color: #00ffff;
}
light.c-ff00ff {
background-color: #ff00ff;
}
light.c-ff00ff::selection {
background-color: #ff00ff;
}
light.c-d2b3fa {
background-color: #d2b3fa;
}
light.c-d2b3fa::selection {
background-color: #d2b3fa;
}
light.c-ff4500 {
background-color: #ff4500;
}
light.c-ff4500::selection {
background-color: #ff4500;
}
html,
body,
h1,
h2,
h3,
h4,
h5,
h6,
p,
div,
table,
tr,
td,
tbody,
tfoot,
th,
dl,
dt,
dd,
ol,
ul,
li,
a,
sub,
sup,
strong,
b,
em,
i,
code,
pre,
img,
section,
article,
input,
textarea,
span,
blockquote {
margin: 0;
padding: 0;
margin-block: 0;
outline: none;
}
* {
-webkit-touch-callout: none;
}
input,
textarea,
span {
outline: none;
resize: none;
}
a,
a:hover {
text-decoration: none;
border: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
outline: none;
}
input[type=radio],
input[type=checkbox] {
display: none;
}
sub,
pre,
code {
user-select: none;
-webkit-user-select: none;
}
line {
border-bottom: 2px solid #AB1941;
font-weight: normal;
cursor: pointer;
}
light {
font-weight: normal;
cursor: pointer;
}
light.c-feff00 {
background-color: #feff00;
}
light.c-feff00::selection {
background-color: #feff00;
}
light.c-00ff00 {
background-color: #00ff00;
}
light.c-00ff00::selection {
background-color: #00ff00;
}
light.c-00ffff {
background-color: #00ffff;
}
light.c-00ffff::selection {
background-color: #00ffff;
}
light.c-ff00ff {
background-color: #ff00ff;
}
light.c-ff00ff::selection {
background-color: #ff00ff;
}
light.c-d2b3fa {
background-color: #d2b3fa;
}
light.c-d2b3fa::selection {
background-color: #d2b3fa;
}
light.c-ff4500 {
background-color: #ff4500;
}
light.c-ff4500::selection {
background-color: #ff4500;
}
pre code.hljs {
display: block;
overflow-x: auto;
padding: 1em
}
code.hljs {
padding: 3px 5px
}
/*!
Theme: GitHub
Description: Light theme as seen on github.com
Author: github.com
Maintainer: @Hirse
Updated: 2021-05-15
Outdated base version: https://github.com/primer/github-syntax-light
Current colors taken from GitHub's CSS
*/
.hljs {
color: #24292e;
background: #ffffff
}
.hljs-doctag,
.hljs-keyword,
.hljs-meta .hljs-keyword,
.hljs-template-tag,
.hljs-template-variable,
.hljs-type,
.hljs-variable.language_ {
/* prettylights-syntax-keyword */
color: #d73a49
}
.hljs-title,
.hljs-title.class_,
.hljs-title.class_.inherited__,
.hljs-title.function_ {
/* prettylights-syntax-entity */
color: #6f42c1
}
.hljs-attr,
.hljs-attribute,
.hljs-literal,
.hljs-meta,
.hljs-number,
.hljs-operator,
.hljs-variable,
.hljs-selector-attr,
.hljs-selector-class,
.hljs-selector-id {
/* prettylights-syntax-constant */
color: #005cc5
}
.hljs-regexp,
.hljs-string,
.hljs-meta .hljs-string {
/* prettylights-syntax-string */
color: #032f62
}
.hljs-built_in,
.hljs-symbol {
/* prettylights-syntax-variable */
color: #e36209
}
.hljs-comment,
.hljs-code,
.hljs-formula {
/* prettylights-syntax-comment */
color: #6a737d
}
.hljs-name,
.hljs-quote,
.hljs-selector-tag,
.hljs-selector-pseudo {
/* prettylights-syntax-entity-tag */
color: #22863a
}
.hljs-subst {
/* prettylights-syntax-storage-modifier-import */
color: #24292e
}
.hljs-section {
/* prettylights-syntax-markup-heading */
color: #005cc5;
font-weight: bold
}
.hljs-bullet {
/* prettylights-syntax-markup-list */
color: #735c0f
}
.hljs-emphasis {
/* prettylights-syntax-markup-italic */
color: #24292e;
font-style: italic
}
.hljs-strong {
/* prettylights-syntax-markup-bold */
color: #24292e;
font-weight: bold
}
.hljs-addition {
/* prettylights-syntax-markup-inserted */
color: #22863a;
background-color: #f0fff4
}
.hljs-deletion {
/* prettylights-syntax-markup-deleted */
color: #b31d28;
background-color: #ffeef0
}
.hljs-char.escape_,
.hljs-link,
.hljs-params,
.hljs-property,
.hljs-punctuation,
.hljs-tag {
/* purposely ignored */
pre code.hljs {
display: block;
overflow-x: auto;
padding: 1em
}
code.hljs {
padding: 3px 5px
}
/*!
Theme: GitHub
Description: Light theme as seen on github.com
Author: github.com
Maintainer: @Hirse
Updated: 2021-05-15
Outdated base version: https://github.com/primer/github-syntax-light
Current colors taken from GitHub's CSS
*/
.hljs {
color: #24292e;
background: #ffffff
}
.hljs-doctag,
.hljs-keyword,
.hljs-meta .hljs-keyword,
.hljs-template-tag,
.hljs-template-variable,
.hljs-type,
.hljs-variable.language_ {
/* prettylights-syntax-keyword */
color: #d73a49
}
.hljs-title,
.hljs-title.class_,
.hljs-title.class_.inherited__,
.hljs-title.function_ {
/* prettylights-syntax-entity */
color: #6f42c1
}
.hljs-attr,
.hljs-attribute,
.hljs-literal,
.hljs-meta,
.hljs-number,
.hljs-operator,
.hljs-variable,
.hljs-selector-attr,
.hljs-selector-class,
.hljs-selector-id {
/* prettylights-syntax-constant */
color: #005cc5
}
.hljs-regexp,
.hljs-string,
.hljs-meta .hljs-string {
/* prettylights-syntax-string */
color: #032f62
}
.hljs-built_in,
.hljs-symbol {
/* prettylights-syntax-variable */
color: #e36209
}
.hljs-comment,
.hljs-code,
.hljs-formula {
/* prettylights-syntax-comment */
color: #6a737d
}
.hljs-name,
.hljs-quote,
.hljs-selector-tag,
.hljs-selector-pseudo {
/* prettylights-syntax-entity-tag */
color: #22863a
}
.hljs-subst {
/* prettylights-syntax-storage-modifier-import */
color: #24292e
}
.hljs-section {
/* prettylights-syntax-markup-heading */
color: #005cc5;
font-weight: bold
}
.hljs-bullet {
/* prettylights-syntax-markup-list */
color: #735c0f
}
.hljs-emphasis {
/* prettylights-syntax-markup-italic */
color: #24292e;
font-style: italic
}
.hljs-strong {
/* prettylights-syntax-markup-bold */
color: #24292e;
font-weight: bold
}
.hljs-addition {
/* prettylights-syntax-markup-inserted */
color: #22863a;
background-color: #f0fff4
}
.hljs-deletion {
/* prettylights-syntax-markup-deleted */
color: #b31d28;
background-color: #ffeef0
}
.hljs-char.escape_,
.hljs-link,
.hljs-params,
.hljs-property,
.hljs-punctuation,
.hljs-tag {
/* purposely ignored */
}
\ No newline at end of file
PODS:
- audio_session (0.0.1):
- Flutter
- Bugly (2.6.1)
- connectivity_plus (0.0.1):
- Flutter
- ReachabilitySwift
......@@ -9,6 +10,9 @@ PODS:
- Flutter (1.0.0)
- flutter_app_update (0.0.1):
- Flutter
- flutter_bugly (0.0.1):
- Bugly
- Flutter
- flutter_inapp_purchase (0.0.1):
- Flutter
- flutter_inappwebview_ios (0.0.1):
......@@ -47,13 +51,6 @@ PODS:
- Flutter
- ScreenProtectorKit (~> 1.3.1)
- ScreenProtectorKit (1.3.1)
- Sentry/HybridSDK (8.21.0):
- SentryPrivate (= 8.21.0)
- sentry_flutter (7.19.0):
- Flutter
- FlutterMacOS
- Sentry/HybridSDK (= 8.21.0)
- SentryPrivate (8.21.0)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
......@@ -73,6 +70,7 @@ DEPENDENCIES:
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- Flutter (from `Flutter`)
- flutter_app_update (from `.symlinks/plugins/flutter_app_update/ios`)
- flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
- flutter_inapp_purchase (from `.symlinks/plugins/flutter_inapp_purchase/ios`)
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
......@@ -84,19 +82,17 @@ DEPENDENCIES:
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- screen_protector (from `.symlinks/plugins/screen_protector/ios`)
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
- tobias (from `.symlinks/plugins/tobias/ios`)
SPEC REPOS:
trunk:
- Bugly
- flutter_sound_core
- OrderedSet
- ReachabilitySwift
- ScreenProtectorKit
- Sentry
- SentryPrivate
- WechatOpenSDK-XCFramework
EXTERNAL SOURCES:
......@@ -110,6 +106,8 @@ EXTERNAL SOURCES:
:path: Flutter
flutter_app_update:
:path: ".symlinks/plugins/flutter_app_update/ios"
flutter_bugly:
:path: ".symlinks/plugins/flutter_bugly/ios"
flutter_inapp_purchase:
:path: ".symlinks/plugins/flutter_inapp_purchase/ios"
flutter_inappwebview_ios:
......@@ -132,8 +130,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/permission_handler_apple/ios"
screen_protector:
:path: ".symlinks/plugins/screen_protector/ios"
sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite:
......@@ -142,34 +138,33 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/tobias/ios"
SPEC CHECKSUMS:
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
audio_session: 9bdd3bf46960d4322cb8c3cb6138295dcfe84eee
Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
connectivity_plus: 481668c94744c30c53b8895afb39159d1e619bdf
device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_app_update: 65f61da626cb111d1b24674abc4b01728d7723bc
flutter_inapp_purchase: 5c6a1ac3f11b11d0c8c0321c0c41c1f05805e4c8
flutter_inappwebview_ios: 97215cf7d4677db55df76782dbd2930c5e1c1ea0
flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900
flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9
flutter_bugly: 12197049262a692eab0bd2834d465a5647d920c2
flutter_inapp_purchase: 722da12971a50f306f37e62fc1aaf576b1cbecf6
flutter_inappwebview_ios: 25b61a1b550d1068e4ddaf490fc1d03c2ce6828d
flutter_sound: 49be32081884d275fe91d48262f4b1fcd86e10d3
flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d
fluwx: 3c7b6df42f83d444d4538f3eaeae079f12d30c37
image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
flutter_tts: b88dbc8655d3dc961bc4a796e4e16a4cc1795833
fluwx: 70e62e0330c46b988a1c79ce9731f0d4bc4b26fb
image_picker_ios: 85f2b3c9fb98c09d63725c4d12ebd585b56ec35d
just_audio: 6c031bb61297cf218b4462be616638e81c058e97
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
package_info_plus: 566e1b7a2f3900e4b0020914ad3fc051dcc95596
path_provider_foundation: 608fcb11be570ce83519b076ab6a1fffe2474f05
permission_handler_apple: 3787117e48f80715ff04a3830ca039283d6a4f29
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
screen_protector: 6f92086bd2f2f4b54f54913289b9d1310610140b
screen_protector: 3d90d44ac886b25335aebd93230b454aef45794a
ScreenProtectorKit: 83a6281b02c7a5902ee6eac4f5045f674e902ae4
Sentry: ebc12276bd17613a114ab359074096b6b3725203
sentry_flutter: 88ebea3f595b0bc16acc5bedacafe6d60c12dcd5
SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
tobias: 22f69183b14af82a2ac8ff698af084c352744e5f
shared_preferences_foundation: 0b09b969fb36da5551c0bc4a2dbd9d0ff9387478
sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
tobias: 50b529c2501d277c83fef9976803a001eb58a057
WechatOpenSDK-XCFramework: acdeeda129efbef9532bca8a10c24e1b4b8c7d69
PODFILE CHECKSUM: 293dca100fbb3eb6a866f640cf85127844630abc
COCOAPODS: 1.11.2
COCOAPODS: 1.16.2
......@@ -37,8 +37,10 @@ class LoginController extends GetxController {
/// 测试账号
if (kDebugMode) {
phoneInput.text = '18810760819';
passwordInput.text = '1234567m';
phoneInput.text = '13811534871';
passwordInput.text = 'wpf123456*';
// phoneInput.text = '18810760819';
// passwordInput.text = '1234567m';
// phoneInput.text = '17311837355';
// passwordInput.text = '12345678';
}
......@@ -128,7 +130,8 @@ class LoginController extends GetxController {
}
final result = await AccountAPI.login(
phone: phoneInput.text,
password: EncryptUtil.encodeMd5(EncryptUtil.encodeMd5(passwordInput.text)),
password:
EncryptUtil.encodeMd5(EncryptUtil.encodeMd5(passwordInput.text)),
code: codeInput.text,
type: type);
......
差异被折叠。
......@@ -6,21 +6,21 @@ class UserStore extends GetxController {
// 是否登录
bool _isLogin = false;
// token
String _token = '';
// 获取token
String get token => _token;
// 刷新token
String _accessToken = '';
// 获取刷新token
String get accessToken => _accessToken;
// 是否登录
bool get isLogin => _isLogin;
// 是否有token
bool get hasToken => _token.isNotEmpty;
// 用户信息模型
UserModel _info = UserModel();
// 获取用户信息模型
UserModel get info => _info;
// 是否需要登录
......@@ -34,6 +34,7 @@ class UserStore extends GetxController {
_token = StorageService.to.getString(kLocalToken);
}
/// 登录
Future<void> login(UserModel value) async {
_token = value.token ?? '';
_accessToken = value.accessToken ?? '';
......@@ -48,16 +49,18 @@ class UserStore extends GetxController {
update();
}
/// 设置token
Future<void> setToken(String value) async {
await StorageService.to.setString(kLocalToken, value);
_token = value;
}
/// 设置刷新token
Future<void> setAccessToken(String value) async {
await StorageService.to.setString(kLocalAccessToken, value);
_accessToken = value;
}
/// 设置用户信息
Future<void> setInfo(UserModel value) async {
await StorageService.to
.setString(kLocalUserInfo, jsonEncode(value.toJson()));
......@@ -65,7 +68,7 @@ class UserStore extends GetxController {
_info = value;
}
// 登出
/// 登出
Future<void> logout() async {
await StorageService.to.remove(kLocalToken);
await StorageService.to.remove(kLocalAccessToken);
......
......@@ -50,7 +50,7 @@ abstract class AssetsPicker {
// maxHeight: maxHeight,
);
}
/// 展示设置弹窗
static _showSettingDialog(BuildContext context,String content) {
showDialog(
context: context,
......
part of utils;
/// 打印类
abstract class Console {
static final _log = Logger(filter: _LogFilter());
......
......@@ -3,7 +3,7 @@ part of utils;
// 服务器地址
// const String kServerUrl = 'http://192.168.11.88:81';
// const String kServerUrl = 'http://8.141.148.247:7421';
const String kServerUrl = 'http://1507.superge.cn:81';
const String kServerUrl = 'https://ebook-app.ezijing.com';
const String kHtmlBaseServer = 'http://150.158.138.40:9200';
const String kLocalToken = 'local_token';
const String kLocalAccessToken = 'local_access_token';
......
......@@ -15,7 +15,7 @@ class OssTool {
Client.init(ossEndpoint: 'oss-cn-beijing.aliyuncs.com', bucketName:bucketName,authGetter: _authGetter);
}
// 获取临时凭证
/// 获取临时凭证
Future<Auth> _authGetter() async {
final result = await CommonAPI.oss();
return Auth(
......@@ -26,7 +26,7 @@ class OssTool {
);
}
// 本地文件上传
/// 本地文件上传
Future<Response<dynamic>> putObjectFile(String filePath) async {
List<String> parts = filePath.split('/');
String fileName = parts.last;
......@@ -38,7 +38,7 @@ class OssTool {
return resp;
}
// 批量本地文件上传
/// 批量本地文件上传
Future<List<Response>> putObjectFiles(List<String> filePaths){
return Client().putObjectFiles(
filePaths.map((e){
......
part of utils;
class SignTool {
/// 创建签名
static String createSign(Map<String, dynamic> params) {
Map<String, dynamic> tempParams = keySort(params);
List<String> tempArr = [];
......
......@@ -58,13 +58,13 @@ class SqlManager {
return _database;
}
// 关闭数据库
/// 关闭数据库
static Future<void> closeDatabase() async {
await _database?.close();
}
// 查询划线高亮笔记
/// 查询划线高亮笔记
static Future<Map<String, dynamic>> queryLocalNote({required int bookId,required int chapterId}) async {
Database? db = await SqlManager.getCurrentDatabase();
......@@ -89,7 +89,7 @@ class SqlManager {
return returnMap;
}
// 添加划线高亮笔记
/// 添加划线高亮笔记
static Future<int> addLocalNote(Map<String, dynamic> data) async {
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.insert(
......@@ -100,7 +100,7 @@ class SqlManager {
return result??0;
}
// 删除划线高亮笔记
/// 删除划线高亮笔记
static Future<int> delLocalNote({required int noteId,required int id}) async {
Database? db = await SqlManager.getCurrentDatabase();
if(noteId == 0){
......@@ -124,7 +124,7 @@ class SqlManager {
}
// 修改划线高亮笔记
/// 修改划线高亮笔记
static Future<int> updateLocalNote({required int notesId,required int id,required Map<String, dynamic> data}) async {
Database? db = await SqlManager.getCurrentDatabase();
if(notesId ==0){
......@@ -148,7 +148,7 @@ class SqlManager {
}
// 查询所有没有上传的数据
/// 查询所有没有上传的数据
static Future<List<Map<String, dynamic>>> queryNoUploadData() async {
Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query(
......@@ -164,7 +164,7 @@ class SqlManager {
return results ??[];
}
// 将所有 upload 为 0 的数据的 upload 字段值更新为 1
/// 将所有 upload 为 0 的数据的 upload 字段值更新为 1
static Future<void> updateUploadStatus() async {
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.update(
......@@ -175,7 +175,7 @@ class SqlManager {
);
Console.log('Sql---------------更新数据----------------$result');
}
// 将上传成功的id数据的notes_id 更新为服务器对应数值 并设置upload 为1
/// 将上传成功的id数据的notes_id 更新为服务器对应数值 并设置upload 为1
static Future<void> updateNotesId(List<Map<String,dynamic>> data) async {
Database? db = await SqlManager.getCurrentDatabase();
// 构建批量更新的SQL语句
......@@ -205,7 +205,7 @@ class SqlManager {
db?.delete(kNoteTable);
db?.delete(kReadTable);
}
// 根据 book_id 查询当前读到的 章节
/// 根据 book_id 查询当前读到的 章节
static Future<String> queryReadHistoryByBookId(int bookId) async {
try {
Database? db = await SqlManager.getCurrentDatabase();
......@@ -226,7 +226,7 @@ class SqlManager {
}
// 根据 book_id 写入当前读到的 章节
/// 根据 book_id 写入当前读到的 章节
static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async {
Database? db = await SqlManager.getCurrentDatabase();
......@@ -256,7 +256,7 @@ class SqlManager {
// 插入数据
/// 插入数据
static Future<bool> insertData(Map<String, dynamic> data) async {
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.insert(
......@@ -271,13 +271,13 @@ class SqlManager {
}
// 查询所有数据
/// 查询所有数据
static Future<List<Map<String, dynamic>>?> queryAllData() async {
Database? db = await SqlManager.getCurrentDatabase();
return await db?.query('members_book_notes');
}
// 根据 ID 查询数据
/// 根据 ID 查询数据
static Future<Map<String, dynamic>?> queryDataById(int id) async {
Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query(
......@@ -288,7 +288,7 @@ class SqlManager {
return results?.first??{};
}
// 更新数据
/// 更新数据
static Future<void> updateData(int id, Map<String, dynamic> newData) async {
Database? db = await SqlManager.getCurrentDatabase();
await db?.update(
......@@ -299,7 +299,7 @@ class SqlManager {
);
}
// 删除数据
/// 删除数据
static Future<void> deleteData(int id) async {
Database? db = await SqlManager.getCurrentDatabase();
await db?.delete(
......
......@@ -2,6 +2,7 @@ part of utils;
/// Toast工具类
class Toast {
/// 展示toast
static void show(String msg, {int duration = 2000}) {
if (msg == null) {
return;
......@@ -13,6 +14,7 @@ class Toast {
);
}
/// 取消toast
static void cancelToast() {
dismissAllToast();
}
......
......@@ -2,10 +2,12 @@ part of utils;
abstract class Tools {
/// 取消焦点
static void unfocus() {
WidgetsBinding.instance.focusManager.primaryFocus?.unfocus();
}
/// 格式化日期
static String dateFromMS(
int timestamp, {
String pattern = 'yyyy-MM-dd',
......@@ -29,6 +31,7 @@ abstract class Tools {
return DateFormat(pattern).format(dateTime);
}
/// 格式化时间
static String formatDuration(Duration duration) {
String twoDigits(int n) => n.toString().padLeft(2, '0');
String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
......@@ -36,26 +39,28 @@ abstract class Tools {
return "${duration.inHours}:$twoDigitMinutes:$twoDigitSeconds";
}
/// 获取存储目录
static Future<String> getDirectory() async {
// getTemporaryDirectory
final directory = await getTemporaryDirectory();
return directory!.path;
}
// 语音文件名称
/// 语音文件名称
static String generateVoiceFileName(){
DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyyMMddHHmmss').format(now);
return 'voice_$formattedDate.mp4';
}
/// 清理数据
static Future<void> clearData() async {
await SqlManager.clear();
ClearCache().clearApplicationCache();
Console.log('-------------清除数据-------------------');
}
// 判断当前网络状态
/// 判断当前网络状态
static Future<bool> checkCurrentNetStatus() async {
final connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.none){
......
......@@ -29,6 +29,7 @@ class RequiredValidator extends Validator<String?> {
bool isValid(String? value) => (value ?? '').isNotEmpty;
}
/// 邮箱验证
class EmailValidator extends Validator<String?> {
final Pattern _pattern =
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
......@@ -42,6 +43,7 @@ class EmailValidator extends Validator<String?> {
}
}
/// 密码验证
class PasswordValidator extends Validator<String?> {
final Pattern _pattern = r'(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$';
......@@ -55,6 +57,7 @@ class PasswordValidator extends Validator<String?> {
}
}
/// 是否一致
class EqualValidator extends Validator<String?> {
final TextEditingController input;
......@@ -83,19 +86,20 @@ class AmountValidator extends Validator<String?> {
class ValidatorTool {
// 验证手机号
/// 验证手机号
static bool isValidPhoneNumber(String value) {
RegExp phonePattern = RegExp(r'^1[3-9]\d{9}$');
return phonePattern.hasMatch(value);
}
// 密码
/// 密码
static bool isValidPassword(String value) {
RegExp passwordPattern = RegExp(r'^((?=.*\d)(?=.*[A-Z])(?=.*[a-z]))|((?=.*\d)(?=.*[A-Z])(?=.*[\W_]))|((?=.*\d)(?=.*[a-z])(?=.*[\W_]))|((?=.*[A-Z])(?=.*[a-z])(?=.*[\W_]))[a-zA-Z\d\W_]{8,12}$');
// 密码必须是数字、字母、特殊符号三种及以上8-12位的组合
return passwordPattern.hasMatch(value);
}
/// 验证码位数
static bool isValidCode(String value) {
RegExp passwordPattern = RegExp(r'^\d{6}$');
return passwordPattern.hasMatch(value);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论