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

chore: update

上级 f3019c68
{
"dart.flutterSdkPath": "~/flutter"
}
PODS: PODS:
- audio_session (0.0.1): - audio_session (0.0.1):
- Flutter - Flutter
- Bugly (2.6.1)
- connectivity_plus (0.0.1): - connectivity_plus (0.0.1):
- Flutter - Flutter
- ReachabilitySwift - ReachabilitySwift
...@@ -9,6 +10,9 @@ PODS: ...@@ -9,6 +10,9 @@ PODS:
- Flutter (1.0.0) - Flutter (1.0.0)
- flutter_app_update (0.0.1): - flutter_app_update (0.0.1):
- Flutter - Flutter
- flutter_bugly (0.0.1):
- Bugly
- Flutter
- flutter_inapp_purchase (0.0.1): - flutter_inapp_purchase (0.0.1):
- Flutter - Flutter
- flutter_inappwebview_ios (0.0.1): - flutter_inappwebview_ios (0.0.1):
...@@ -47,13 +51,6 @@ PODS: ...@@ -47,13 +51,6 @@ PODS:
- Flutter - Flutter
- ScreenProtectorKit (~> 1.3.1) - ScreenProtectorKit (~> 1.3.1)
- 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): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
...@@ -73,6 +70,7 @@ DEPENDENCIES: ...@@ -73,6 +70,7 @@ DEPENDENCIES:
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_app_update (from `.symlinks/plugins/flutter_app_update/ios`) - 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_inapp_purchase (from `.symlinks/plugins/flutter_inapp_purchase/ios`)
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`) - flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
...@@ -84,19 +82,17 @@ DEPENDENCIES: ...@@ -84,19 +82,17 @@ DEPENDENCIES:
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- screen_protector (from `.symlinks/plugins/screen_protector/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`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`) - sqflite (from `.symlinks/plugins/sqflite/darwin`)
- tobias (from `.symlinks/plugins/tobias/ios`) - tobias (from `.symlinks/plugins/tobias/ios`)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- Bugly
- flutter_sound_core - flutter_sound_core
- OrderedSet - OrderedSet
- ReachabilitySwift - ReachabilitySwift
- ScreenProtectorKit - ScreenProtectorKit
- Sentry
- SentryPrivate
- WechatOpenSDK-XCFramework - WechatOpenSDK-XCFramework
EXTERNAL SOURCES: EXTERNAL SOURCES:
...@@ -110,6 +106,8 @@ EXTERNAL SOURCES: ...@@ -110,6 +106,8 @@ EXTERNAL SOURCES:
:path: Flutter :path: Flutter
flutter_app_update: flutter_app_update:
:path: ".symlinks/plugins/flutter_app_update/ios" :path: ".symlinks/plugins/flutter_app_update/ios"
flutter_bugly:
:path: ".symlinks/plugins/flutter_bugly/ios"
flutter_inapp_purchase: flutter_inapp_purchase:
:path: ".symlinks/plugins/flutter_inapp_purchase/ios" :path: ".symlinks/plugins/flutter_inapp_purchase/ios"
flutter_inappwebview_ios: flutter_inappwebview_ios:
...@@ -132,8 +130,6 @@ EXTERNAL SOURCES: ...@@ -132,8 +130,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/permission_handler_apple/ios" :path: ".symlinks/plugins/permission_handler_apple/ios"
screen_protector: screen_protector:
:path: ".symlinks/plugins/screen_protector/ios" :path: ".symlinks/plugins/screen_protector/ios"
sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios"
shared_preferences_foundation: shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin" :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite: sqflite:
...@@ -142,34 +138,33 @@ EXTERNAL SOURCES: ...@@ -142,34 +138,33 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/tobias/ios" :path: ".symlinks/plugins/tobias/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
audio_session: 4f3e461722055d21515cf3261b64c973c062f345 audio_session: 9bdd3bf46960d4322cb8c3cb6138295dcfe84eee
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 connectivity_plus: 481668c94744c30c53b8895afb39159d1e619bdf
device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_app_update: 65f61da626cb111d1b24674abc4b01728d7723bc flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9
flutter_inapp_purchase: 5c6a1ac3f11b11d0c8c0321c0c41c1f05805e4c8 flutter_bugly: 12197049262a692eab0bd2834d465a5647d920c2
flutter_inappwebview_ios: 97215cf7d4677db55df76782dbd2930c5e1c1ea0 flutter_inapp_purchase: 722da12971a50f306f37e62fc1aaf576b1cbecf6
flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900 flutter_inappwebview_ios: 25b61a1b550d1068e4ddaf490fc1d03c2ce6828d
flutter_sound: 49be32081884d275fe91d48262f4b1fcd86e10d3
flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d flutter_tts: b88dbc8655d3dc961bc4a796e4e16a4cc1795833
fluwx: 3c7b6df42f83d444d4538f3eaeae079f12d30c37 fluwx: 70e62e0330c46b988a1c79ce9731f0d4bc4b26fb
image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425 image_picker_ios: 85f2b3c9fb98c09d63725c4d12ebd585b56ec35d
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa just_audio: 6c031bb61297cf218b4462be616638e81c058e97
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 package_info_plus: 566e1b7a2f3900e4b0020914ad3fc051dcc95596
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c path_provider_foundation: 608fcb11be570ce83519b076ab6a1fffe2474f05
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6 permission_handler_apple: 3787117e48f80715ff04a3830ca039283d6a4f29
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
screen_protector: 6f92086bd2f2f4b54f54913289b9d1310610140b screen_protector: 3d90d44ac886b25335aebd93230b454aef45794a
ScreenProtectorKit: 83a6281b02c7a5902ee6eac4f5045f674e902ae4 ScreenProtectorKit: 83a6281b02c7a5902ee6eac4f5045f674e902ae4
Sentry: ebc12276bd17613a114ab359074096b6b3725203 shared_preferences_foundation: 0b09b969fb36da5551c0bc4a2dbd9d0ff9387478
sentry_flutter: 88ebea3f595b0bc16acc5bedacafe6d60c12dcd5 sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe tobias: 50b529c2501d277c83fef9976803a001eb58a057
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
tobias: 22f69183b14af82a2ac8ff698af084c352744e5f
WechatOpenSDK-XCFramework: acdeeda129efbef9532bca8a10c24e1b4b8c7d69 WechatOpenSDK-XCFramework: acdeeda129efbef9532bca8a10c24e1b4b8c7d69
PODFILE CHECKSUM: 293dca100fbb3eb6a866f640cf85127844630abc PODFILE CHECKSUM: 293dca100fbb3eb6a866f640cf85127844630abc
COCOAPODS: 1.11.2 COCOAPODS: 1.16.2
...@@ -37,8 +37,10 @@ class LoginController extends GetxController { ...@@ -37,8 +37,10 @@ class LoginController extends GetxController {
/// 测试账号 /// 测试账号
if (kDebugMode) { if (kDebugMode) {
phoneInput.text = '18810760819'; phoneInput.text = '13811534871';
passwordInput.text = '1234567m'; passwordInput.text = 'wpf123456*';
// phoneInput.text = '18810760819';
// passwordInput.text = '1234567m';
// phoneInput.text = '17311837355'; // phoneInput.text = '17311837355';
// passwordInput.text = '12345678'; // passwordInput.text = '12345678';
} }
...@@ -128,7 +130,8 @@ class LoginController extends GetxController { ...@@ -128,7 +130,8 @@ class LoginController extends GetxController {
} }
final result = await AccountAPI.login( final result = await AccountAPI.login(
phone: phoneInput.text, phone: phoneInput.text,
password: EncryptUtil.encodeMd5(EncryptUtil.encodeMd5(passwordInput.text)), password:
EncryptUtil.encodeMd5(EncryptUtil.encodeMd5(passwordInput.text)),
code: codeInput.text, code: codeInput.text,
type: type); type: type);
......
差异被折叠。
...@@ -6,21 +6,21 @@ class UserStore extends GetxController { ...@@ -6,21 +6,21 @@ class UserStore extends GetxController {
// 是否登录 // 是否登录
bool _isLogin = false; bool _isLogin = false;
// token
String _token = ''; String _token = '';
// 获取token
String get token => _token; String get token => _token;
// 刷新token
String _accessToken = ''; String _accessToken = '';
// 获取刷新token
String get accessToken => _accessToken; String get accessToken => _accessToken;
// 是否登录
bool get isLogin => _isLogin; bool get isLogin => _isLogin;
// 是否有token
bool get hasToken => _token.isNotEmpty; bool get hasToken => _token.isNotEmpty;
// 用户信息模型
UserModel _info = UserModel(); UserModel _info = UserModel();
// 获取用户信息模型
UserModel get info => _info; UserModel get info => _info;
// 是否需要登录 // 是否需要登录
...@@ -34,6 +34,7 @@ class UserStore extends GetxController { ...@@ -34,6 +34,7 @@ class UserStore extends GetxController {
_token = StorageService.to.getString(kLocalToken); _token = StorageService.to.getString(kLocalToken);
} }
/// 登录
Future<void> login(UserModel value) async { Future<void> login(UserModel value) async {
_token = value.token ?? ''; _token = value.token ?? '';
_accessToken = value.accessToken ?? ''; _accessToken = value.accessToken ?? '';
...@@ -48,16 +49,18 @@ class UserStore extends GetxController { ...@@ -48,16 +49,18 @@ class UserStore extends GetxController {
update(); update();
} }
/// 设置token
Future<void> setToken(String value) async { Future<void> setToken(String value) async {
await StorageService.to.setString(kLocalToken, value); await StorageService.to.setString(kLocalToken, value);
_token = value; _token = value;
} }
/// 设置刷新token
Future<void> setAccessToken(String value) async { Future<void> setAccessToken(String value) async {
await StorageService.to.setString(kLocalAccessToken, value); await StorageService.to.setString(kLocalAccessToken, value);
_accessToken = value; _accessToken = value;
} }
/// 设置用户信息
Future<void> setInfo(UserModel value) async { Future<void> setInfo(UserModel value) async {
await StorageService.to await StorageService.to
.setString(kLocalUserInfo, jsonEncode(value.toJson())); .setString(kLocalUserInfo, jsonEncode(value.toJson()));
...@@ -65,7 +68,7 @@ class UserStore extends GetxController { ...@@ -65,7 +68,7 @@ class UserStore extends GetxController {
_info = value; _info = value;
} }
// 登出 /// 登出
Future<void> logout() async { Future<void> logout() async {
await StorageService.to.remove(kLocalToken); await StorageService.to.remove(kLocalToken);
await StorageService.to.remove(kLocalAccessToken); await StorageService.to.remove(kLocalAccessToken);
......
...@@ -50,7 +50,7 @@ abstract class AssetsPicker { ...@@ -50,7 +50,7 @@ abstract class AssetsPicker {
// maxHeight: maxHeight, // maxHeight: maxHeight,
); );
} }
/// 展示设置弹窗
static _showSettingDialog(BuildContext context,String content) { static _showSettingDialog(BuildContext context,String content) {
showDialog( showDialog(
context: context, context: context,
......
part of utils; part of utils;
/// 打印类
abstract class Console { abstract class Console {
static final _log = Logger(filter: _LogFilter()); static final _log = Logger(filter: _LogFilter());
......
...@@ -3,7 +3,7 @@ part of utils; ...@@ -3,7 +3,7 @@ part of utils;
// 服务器地址 // 服务器地址
// const String kServerUrl = 'http://192.168.11.88:81'; // const String kServerUrl = 'http://192.168.11.88:81';
// const String kServerUrl = 'http://8.141.148.247:7421'; // 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 kHtmlBaseServer = 'http://150.158.138.40:9200';
const String kLocalToken = 'local_token'; const String kLocalToken = 'local_token';
const String kLocalAccessToken = 'local_access_token'; const String kLocalAccessToken = 'local_access_token';
......
...@@ -15,7 +15,7 @@ class OssTool { ...@@ -15,7 +15,7 @@ class OssTool {
Client.init(ossEndpoint: 'oss-cn-beijing.aliyuncs.com', bucketName:bucketName,authGetter: _authGetter); Client.init(ossEndpoint: 'oss-cn-beijing.aliyuncs.com', bucketName:bucketName,authGetter: _authGetter);
} }
// 获取临时凭证 /// 获取临时凭证
Future<Auth> _authGetter() async { Future<Auth> _authGetter() async {
final result = await CommonAPI.oss(); final result = await CommonAPI.oss();
return Auth( return Auth(
...@@ -26,7 +26,7 @@ class OssTool { ...@@ -26,7 +26,7 @@ class OssTool {
); );
} }
// 本地文件上传 /// 本地文件上传
Future<Response<dynamic>> putObjectFile(String filePath) async { Future<Response<dynamic>> putObjectFile(String filePath) async {
List<String> parts = filePath.split('/'); List<String> parts = filePath.split('/');
String fileName = parts.last; String fileName = parts.last;
...@@ -38,7 +38,7 @@ class OssTool { ...@@ -38,7 +38,7 @@ class OssTool {
return resp; return resp;
} }
// 批量本地文件上传 /// 批量本地文件上传
Future<List<Response>> putObjectFiles(List<String> filePaths){ Future<List<Response>> putObjectFiles(List<String> filePaths){
return Client().putObjectFiles( return Client().putObjectFiles(
filePaths.map((e){ filePaths.map((e){
......
part of utils; part of utils;
class SignTool { class SignTool {
/// 创建签名
static String createSign(Map<String, dynamic> params) { static String createSign(Map<String, dynamic> params) {
Map<String, dynamic> tempParams = keySort(params); Map<String, dynamic> tempParams = keySort(params);
List<String> tempArr = []; List<String> tempArr = [];
......
...@@ -58,13 +58,13 @@ class SqlManager { ...@@ -58,13 +58,13 @@ class SqlManager {
return _database; return _database;
} }
// 关闭数据库 /// 关闭数据库
static Future<void> closeDatabase() async { static Future<void> closeDatabase() async {
await _database?.close(); await _database?.close();
} }
// 查询划线高亮笔记 /// 查询划线高亮笔记
static Future<Map<String, dynamic>> queryLocalNote({required int bookId,required int chapterId}) async { static Future<Map<String, dynamic>> queryLocalNote({required int bookId,required int chapterId}) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
...@@ -89,7 +89,7 @@ class SqlManager { ...@@ -89,7 +89,7 @@ class SqlManager {
return returnMap; return returnMap;
} }
// 添加划线高亮笔记 /// 添加划线高亮笔记
static Future<int> addLocalNote(Map<String, dynamic> data) async { static Future<int> addLocalNote(Map<String, dynamic> data) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.insert( final result = await db?.insert(
...@@ -100,7 +100,7 @@ class SqlManager { ...@@ -100,7 +100,7 @@ class SqlManager {
return result??0; return result??0;
} }
// 删除划线高亮笔记 /// 删除划线高亮笔记
static Future<int> delLocalNote({required int noteId,required int id}) async { static Future<int> delLocalNote({required int noteId,required int id}) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
if(noteId == 0){ if(noteId == 0){
...@@ -124,7 +124,7 @@ class SqlManager { ...@@ -124,7 +124,7 @@ class SqlManager {
} }
// 修改划线高亮笔记 /// 修改划线高亮笔记
static Future<int> updateLocalNote({required int notesId,required int id,required Map<String, dynamic> data}) async { static Future<int> updateLocalNote({required int notesId,required int id,required Map<String, dynamic> data}) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
if(notesId ==0){ if(notesId ==0){
...@@ -148,7 +148,7 @@ class SqlManager { ...@@ -148,7 +148,7 @@ class SqlManager {
} }
// 查询所有没有上传的数据 /// 查询所有没有上传的数据
static Future<List<Map<String, dynamic>>> queryNoUploadData() async { static Future<List<Map<String, dynamic>>> queryNoUploadData() async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query( List<Map<String, dynamic>>? results = await db?.query(
...@@ -164,7 +164,7 @@ class SqlManager { ...@@ -164,7 +164,7 @@ class SqlManager {
return results ??[]; return results ??[];
} }
// 将所有 upload 为 0 的数据的 upload 字段值更新为 1 /// 将所有 upload 为 0 的数据的 upload 字段值更新为 1
static Future<void> updateUploadStatus() async { static Future<void> updateUploadStatus() async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.update( final result = await db?.update(
...@@ -175,7 +175,7 @@ class SqlManager { ...@@ -175,7 +175,7 @@ class SqlManager {
); );
Console.log('Sql---------------更新数据----------------$result'); Console.log('Sql---------------更新数据----------------$result');
} }
// 将上传成功的id数据的notes_id 更新为服务器对应数值 并设置upload 为1 /// 将上传成功的id数据的notes_id 更新为服务器对应数值 并设置upload 为1
static Future<void> updateNotesId(List<Map<String,dynamic>> data) async { static Future<void> updateNotesId(List<Map<String,dynamic>> data) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
// 构建批量更新的SQL语句 // 构建批量更新的SQL语句
...@@ -205,7 +205,7 @@ class SqlManager { ...@@ -205,7 +205,7 @@ class SqlManager {
db?.delete(kNoteTable); db?.delete(kNoteTable);
db?.delete(kReadTable); db?.delete(kReadTable);
} }
// 根据 book_id 查询当前读到的 章节 /// 根据 book_id 查询当前读到的 章节
static Future<String> queryReadHistoryByBookId(int bookId) async { static Future<String> queryReadHistoryByBookId(int bookId) async {
try { try {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
...@@ -226,7 +226,7 @@ class SqlManager { ...@@ -226,7 +226,7 @@ class SqlManager {
} }
// 根据 book_id 写入当前读到的 章节 /// 根据 book_id 写入当前读到的 章节
static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async { static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
...@@ -256,7 +256,7 @@ class SqlManager { ...@@ -256,7 +256,7 @@ class SqlManager {
// 插入数据 /// 插入数据
static Future<bool> insertData(Map<String, dynamic> data) async { static Future<bool> insertData(Map<String, dynamic> data) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.insert( final result = await db?.insert(
...@@ -271,13 +271,13 @@ class SqlManager { ...@@ -271,13 +271,13 @@ class SqlManager {
} }
// 查询所有数据 /// 查询所有数据
static Future<List<Map<String, dynamic>>?> queryAllData() async { static Future<List<Map<String, dynamic>>?> queryAllData() async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
return await db?.query('members_book_notes'); return await db?.query('members_book_notes');
} }
// 根据 ID 查询数据 /// 根据 ID 查询数据
static Future<Map<String, dynamic>?> queryDataById(int id) async { static Future<Map<String, dynamic>?> queryDataById(int id) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query( List<Map<String, dynamic>>? results = await db?.query(
...@@ -288,7 +288,7 @@ class SqlManager { ...@@ -288,7 +288,7 @@ class SqlManager {
return results?.first??{}; return results?.first??{};
} }
// 更新数据 /// 更新数据
static Future<void> updateData(int id, Map<String, dynamic> newData) async { static Future<void> updateData(int id, Map<String, dynamic> newData) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
await db?.update( await db?.update(
...@@ -299,7 +299,7 @@ class SqlManager { ...@@ -299,7 +299,7 @@ class SqlManager {
); );
} }
// 删除数据 /// 删除数据
static Future<void> deleteData(int id) async { static Future<void> deleteData(int id) async {
Database? db = await SqlManager.getCurrentDatabase(); Database? db = await SqlManager.getCurrentDatabase();
await db?.delete( await db?.delete(
......
...@@ -2,6 +2,7 @@ part of utils; ...@@ -2,6 +2,7 @@ part of utils;
/// Toast工具类 /// Toast工具类
class Toast { class Toast {
/// 展示toast
static void show(String msg, {int duration = 2000}) { static void show(String msg, {int duration = 2000}) {
if (msg == null) { if (msg == null) {
return; return;
...@@ -13,6 +14,7 @@ class Toast { ...@@ -13,6 +14,7 @@ class Toast {
); );
} }
/// 取消toast
static void cancelToast() { static void cancelToast() {
dismissAllToast(); dismissAllToast();
} }
......
...@@ -2,10 +2,12 @@ part of utils; ...@@ -2,10 +2,12 @@ part of utils;
abstract class Tools { abstract class Tools {
/// 取消焦点
static void unfocus() { static void unfocus() {
WidgetsBinding.instance.focusManager.primaryFocus?.unfocus(); WidgetsBinding.instance.focusManager.primaryFocus?.unfocus();
} }
/// 格式化日期
static String dateFromMS( static String dateFromMS(
int timestamp, { int timestamp, {
String pattern = 'yyyy-MM-dd', String pattern = 'yyyy-MM-dd',
...@@ -29,6 +31,7 @@ abstract class Tools { ...@@ -29,6 +31,7 @@ abstract class Tools {
return DateFormat(pattern).format(dateTime); return DateFormat(pattern).format(dateTime);
} }
/// 格式化时间
static String formatDuration(Duration duration) { static String formatDuration(Duration duration) {
String twoDigits(int n) => n.toString().padLeft(2, '0'); String twoDigits(int n) => n.toString().padLeft(2, '0');
String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60)); String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
...@@ -36,26 +39,28 @@ abstract class Tools { ...@@ -36,26 +39,28 @@ abstract class Tools {
return "${duration.inHours}:$twoDigitMinutes:$twoDigitSeconds"; return "${duration.inHours}:$twoDigitMinutes:$twoDigitSeconds";
} }
/// 获取存储目录
static Future<String> getDirectory() async { static Future<String> getDirectory() async {
// getTemporaryDirectory // getTemporaryDirectory
final directory = await getTemporaryDirectory(); final directory = await getTemporaryDirectory();
return directory!.path; return directory!.path;
} }
// 语音文件名称 /// 语音文件名称
static String generateVoiceFileName(){ static String generateVoiceFileName(){
DateTime now = DateTime.now(); DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyyMMddHHmmss').format(now); String formattedDate = DateFormat('yyyyMMddHHmmss').format(now);
return 'voice_$formattedDate.mp4'; return 'voice_$formattedDate.mp4';
} }
/// 清理数据
static Future<void> clearData() async { static Future<void> clearData() async {
await SqlManager.clear(); await SqlManager.clear();
ClearCache().clearApplicationCache(); ClearCache().clearApplicationCache();
Console.log('-------------清除数据-------------------'); Console.log('-------------清除数据-------------------');
} }
// 判断当前网络状态 /// 判断当前网络状态
static Future<bool> checkCurrentNetStatus() async { static Future<bool> checkCurrentNetStatus() async {
final connectivityResult = await (Connectivity().checkConnectivity()); final connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.none){ if (connectivityResult == ConnectivityResult.none){
......
...@@ -29,6 +29,7 @@ class RequiredValidator extends Validator<String?> { ...@@ -29,6 +29,7 @@ class RequiredValidator extends Validator<String?> {
bool isValid(String? value) => (value ?? '').isNotEmpty; bool isValid(String? value) => (value ?? '').isNotEmpty;
} }
/// 邮箱验证
class EmailValidator extends Validator<String?> { class EmailValidator extends Validator<String?> {
final Pattern _pattern = 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,}))$'; 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?> { ...@@ -42,6 +43,7 @@ class EmailValidator extends Validator<String?> {
} }
} }
/// 密码验证
class PasswordValidator extends Validator<String?> { class PasswordValidator extends Validator<String?> {
final Pattern _pattern = r'(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$'; final Pattern _pattern = r'(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$';
...@@ -55,6 +57,7 @@ class PasswordValidator extends Validator<String?> { ...@@ -55,6 +57,7 @@ class PasswordValidator extends Validator<String?> {
} }
} }
/// 是否一致
class EqualValidator extends Validator<String?> { class EqualValidator extends Validator<String?> {
final TextEditingController input; final TextEditingController input;
...@@ -83,19 +86,20 @@ class AmountValidator extends Validator<String?> { ...@@ -83,19 +86,20 @@ class AmountValidator extends Validator<String?> {
class ValidatorTool { class ValidatorTool {
// 验证手机号 /// 验证手机号
static bool isValidPhoneNumber(String value) { static bool isValidPhoneNumber(String value) {
RegExp phonePattern = RegExp(r'^1[3-9]\d{9}$'); RegExp phonePattern = RegExp(r'^1[3-9]\d{9}$');
return phonePattern.hasMatch(value); return phonePattern.hasMatch(value);
} }
// 密码 /// 密码
static bool isValidPassword(String 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}$'); 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位的组合 // 密码必须是数字、字母、特殊符号三种及以上8-12位的组合
return passwordPattern.hasMatch(value); return passwordPattern.hasMatch(value);
} }
/// 验证码位数
static bool isValidCode(String value) { static bool isValidCode(String value) {
RegExp passwordPattern = RegExp(r'^\d{6}$'); RegExp passwordPattern = RegExp(r'^\d{6}$');
return passwordPattern.hasMatch(value); return passwordPattern.hasMatch(value);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论