diff --git a/lib/utils/image_upload.dart b/lib/utils/image_upload.dart new file mode 100644 index 0000000..cdef451 --- /dev/null +++ b/lib/utils/image_upload.dart @@ -0,0 +1,52 @@ +import 'dart:io'; +import 'package:flutter_picgo/model/uploaded.dart'; +import 'package:flutter_picgo/resources/table_name_keys.dart'; +import 'package:flutter_picgo/utils/shared_preferences.dart'; +import 'package:flutter_picgo/utils/sql.dart'; +import 'package:flutter_picgo/utils/strategy/image_upload_strategy.dart'; + +/// 图像上传类 +class ImageUpload { + ImageUploadStrategy _strategy; + + ImageUpload(this._strategy); + + Future delete(Uploaded uploaded) { + return _strategy.delete(uploaded); + } + + Future upload(File file, String renameImage) { + return _strategy.upload(file, renameImage); + } + + /// 获取默认图床类型 + Future getDefaultPB() async { + var sp = await SpUtil.getInstance(); + String pbType = sp.getDefaultPB(); + return pbType; + } + + /// 设置默认图床 + Future setDefaultPB(String type) async { + var sp = await SpUtil.getInstance(); + if (sp.getDefaultPB() != type) { + sp.setDefaultPB(type); + } + } + + /// 保存图床配置 + Future savePBConfig(String type, String config) async { + var sql = Sql.setTable(TABLE_NAME_PBSETTING); + int raw = await sql.rawUpdate('config = ? WHERE type = ?', [config, type]); + return raw; + } + + /// 获取当前图床配置 + Future getPBConfig(String type) async { + var sql = Sql.setTable(TABLE_NAME_PBSETTING); + var pbsettingRow = await sql.getBySql('type = ?', [type]); + if (pbsettingRow != null && pbsettingRow.length > 0) { + return pbsettingRow.first["config"]; + } + } +} diff --git a/lib/utils/strategy/github_image_upload.dart b/lib/utils/strategy/github_image_upload.dart new file mode 100644 index 0000000..03b32db --- /dev/null +++ b/lib/utils/strategy/github_image_upload.dart @@ -0,0 +1,17 @@ +import 'package:flutter_picgo/model/uploaded.dart'; +import 'dart:io'; + +import 'package:flutter_picgo/utils/strategy/image_upload_strategy.dart'; + +class GithubImageUpload implements ImageUploadStrategy { + + @override + Future delete(Uploaded uploaded) async { + return null; + } + + @override + Future upload(File file, String renameImage) { + return null; + } +} diff --git a/lib/utils/strategy/image_upload_strategy.dart b/lib/utils/strategy/image_upload_strategy.dart new file mode 100644 index 0000000..8822629 --- /dev/null +++ b/lib/utils/strategy/image_upload_strategy.dart @@ -0,0 +1,11 @@ +import 'dart:io'; +import 'package:flutter_picgo/model/uploaded.dart'; + +abstract class ImageUploadStrategy { + + /// 上传照片,根据策略来实现上传的图片 + Future upload(File file, String renameImage); + + Future delete(Uploaded uploaded); + +} \ No newline at end of file