{"id":23893484,"url":"https://github.com/sanotsu/swmate","last_synced_at":"2025-04-10T12:52:33.713Z","repository":{"id":255818768,"uuid":"840102400","full_name":"Sanotsu/swmate","owner":"Sanotsu","description":"一个使用Flutter开发，支持诸多AI大模型API调用的智能工作生活助手应用。除了常规大模型应用，还有极简记账、随机菜品、猫狗之家、waifu图片、MAL动漫排行、BGM动漫资讯等。","archived":false,"fork":false,"pushed_at":"2024-10-17T08:41:25.000Z","size":12512,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-19T11:39:40.613Z","etag":null,"topics":["accounting","ai","ai-assistant","bangumi","cookbooks","flutter","food","llm-api","llm-application","llm-apps","myanimelist","waifu"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sanotsu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-09T01:26:52.000Z","updated_at":"2024-10-19T11:34:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"6ee84d97-fa1b-4ad6-9d91-c0c7252e9d93","html_url":"https://github.com/Sanotsu/swmate","commit_stats":null,"previous_names":["sanotsu/swmate"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sanotsu%2Fswmate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sanotsu%2Fswmate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sanotsu%2Fswmate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sanotsu%2Fswmate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sanotsu","download_url":"https://codeload.github.com/Sanotsu/swmate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248220557,"owners_count":21067337,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accounting","ai","ai-assistant","bangumi","cookbooks","flutter","food","llm-api","llm-application","llm-apps","myanimelist","waifu"],"created_at":"2025-01-04T14:19:44.745Z","updated_at":"2025-04-10T12:52:33.704Z","avatar_url":"https://github.com/Sanotsu.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SWMate\n\nSmart Work\u0026Life Mate\n\n使用 flutter 开发的一个“智能工作生活类助手”应用。主要包含：\n\n- 以简单参数调用各个云平台部署的在线大模型 API 为基底的“**AI 智能助手**”，(简称“工具”)。\n  - 2025-03-04 大模型 API 调用**只保留其 HTTP API 兼容 openAI API 结构的**平台和模型，不再兼容其他平台自己定义的 API 结构，具体如下(2025-03-31)：\n  - 对话模型：\n    - [阿里](https://help.aliyun.com/zh/model-studio/developer-reference/compatibility-of-openai-with-dashscope)\n    - [百度](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu)\n    - [腾讯](https://console.cloud.tencent.com/hunyuan/start)\n    - [智谱](https://open.bigmodel.cn/dev/api/normal-model/glm-4)\n    - [深度求索(DeepSeek)](https://api-docs.deepseek.com/zh-cn/)\n    - [火山引擎(火山方舟)](https://www.volcengine.com/docs/82379/1330310)\n    - [零一万物](https://platform.lingyiwanwu.com/docs/api-reference)\n    - [无问芯穹](https://docs.infini-ai.com/gen-studio/api/maas.html#/operations/chatCompletions)\n    - [硅基流动](https://docs.siliconflow.cn/cn/api-reference/chat-completions/chat-completions)\n  - 图片生成：\n    - 阿里云: [图像生成-通义万相 文生图 V2 版](https://help.aliyun.com/zh/model-studio/developer-reference/text-to-image-v2-api-reference)、[文生图 FLUX](https://help.aliyun.com/zh/model-studio/developer-reference/flux/)\n    - 智谱 AI: [CogView](https://open.bigmodel.cn/dev/api/image-model/cogview)\n    - 硅基流动: [创建图片生成请求](https://docs.siliconflow.cn/cn/api-reference/images/images-generations)\n  - 视频生成：\n    - 阿里云: [视频生成-通义万相](https://help.aliyun.com/zh/model-studio/developer-reference/video-generation-wanx/)\n    - 智谱 AI: [CogVideoX](https://open.bigmodel.cn/dev/api/videomodel/cogvideox)\n    - 硅基流动: [创建视频生成请求](https://docs.siliconflow.cn/cn/api-reference/videos/videos_submit)\n- 包含实用工具、图片动漫、摸鱼新闻、饮食健康等分类的“**生活日常工具**”，(简称“生活”)。\n  - 实用工具：极简记账、随机菜品、猫狗之家、英英词典\n  - 图片动漫：Bangumi 番组计划、MyAnimeList 排行榜、WAIFU 图片\n  - 摸鱼新闻：摸摸鱼、Readhub、每天 60 秒、NewsAPI 国际新闻、新浪中心滚动新闻\n  - 饮食健康：美国农业部(USDA)食品数据查询、Nutritionix 食品营养素查询、热量计算器\n\n目前只调试了 Android 手机部分。\n\n_2025-02-17_\n\n当然，如果对 [硅基流动平台](https://siliconflow.cn/zh-cn/models) 感兴趣，还能用下我的邀请码注册，那就更好了，谢谢：\n\n[https://cloud.siliconflow.cn/i/tRIcST68](https://cloud.siliconflow.cn/i/tRIcST68)\n\n该平台有很多不同的大模型 API 可以调用，比如最新的 DeepSeek、Qwen、Llama、stable-diffusion 等。\n很多轻量级的模型可以免费使用，一些小需求可以节约时间，不必频繁切换。\n\n# 更新说明\n\n查看 [CHANGELOG](CHANGELOG.md)，**新版本改动的模块和功能信息也在该 ChangeLog 中简述**。\n\n# 功能介绍\n\n## AI 智能助手\n\n目前简单包括了 智能助手、角色扮演、AI 绘图、AI 视频。\n\n- APP 启动首页就是 AI 助手，可以进行常规的聊天、问答、图像识别对话等。\n- 可以切换底部导航栏的“工具”标签，使用 AI 绘图、AI 视频等。\n\n### 智能助手\n\n智能助手，就是调用各个平台中的语言大模型 API，进行聊天、问答等；可以切换大模型类别(文本对话、图片理解等)使用特定功能。\n\n![助手页面](./_doc/screenshots/brief_version/对话页面.jpg)\n\n- 选定使用对话模型类别 -\u003e 选定指定平台部署的指定模型，输入框输入内容，点击“发送”图标，开始聊天\n- 简单的 LaTeX、代码高亮等应该是可以正常显示的；对话分支支持删除和切换\n- 长按消息体有更多选项(用户消息和 AI 响应消息略有不同)\n- 右上角有更多功能按钮，比如切换对话背景、手动添加模型\n- 如果平台有 DeepSeek R 系列深度思考(默认的)功能，返回中有 `reasoning_content` 字段，会显示在对话列表中当作思考内容。\n- 如果是使用火山方舟添加联网插件的应用，也可以查看联网搜索结果列表。\n- 除了打字文本输入，也支持 60 秒以内语音(转换文字)输入 _(这个组件后续有时间再优化一下)_\n  - 实际实现是先调用讯飞的语音转写 API，把语音转为了文字，再调用大模型的 API\n  - 直接发送语音就直接是转化后的文字，有可能会识别错，可以在页面中查看转化后的文本，发送文本\n  - 有保存原语音文件在设备本地应用缓存，所以点击可以听原语音\n\n### AI 角色扮演\n\n简单默认设置了 system prompt，可以自行配置一些栏位。\n\n![助手页面](./_doc/screenshots/brief_version/角色扮演.jpg)\n\n- 可以自行添加其他角色，简单的角色描述、性格特点、场景设定、偏好模型等配置\n- 还可以添加角色头像、聊天背景图\n- 在聊天页面，左下角可以展开查看角色头像；右上角有更多功能按钮，比如一次性和多个角色对话\n\n### AI 绘图/视频\n\n![图片视频生成](./_doc/screenshots/brief_version/助手工具.jpg)\n\n从“工具”页面进入的“简洁助手”，是之前缓存在 sqlite 的实现方式，功能少一些。\n\nAI 绘图/视频生成的结构和操作类似，所以放在一起说。\n\n- 同样是选择好平台部署的模型、尺寸，输入提示词后，点击“生成”按钮，等待生成结果。\n  - 部分模型可以选择参考图\n  - 文生图大部分是直接返回图片 url，所以在未返回前请勿退出\n  - 视频生成是先提交 task，再通过 taskId 获取结果。task 状态会保存在数据库，可以手动刷新查看生成进度\n    - 视频生成任务记录长按可删除，但已保存到设备的视频，删除任务时不会删除。\n  - 对于生成的图片和视频，默认会保存在本地(因为返回的 url 时效都比较短)\n- 可以查看 AI 绘图/视频的历史资源\n  - AI 绘图/视频生成成功之后，会默认保存在安卓设备指定路径，点击右上角媒体资源图标，即可进入管理页面\n  - 资源管理页面中，可以对资源进行简单预览、分享、删除等操作\n\n---\n\n### 补充说明\n\n![配置和其他工具](./_doc/screenshots/brief_version/导入配置等.jpg)\n\n高级助手、角色扮演的对话可以单独导出，也可以在设置页面和其他内容一起全量备份、覆写恢复。\n\n打包好的 apk 是直接使用我个人密钥的一些免费的大模型，都是比较基础的。可以自行导入平台模型和密钥使用自己的资源。\n\n- “导入”入口在“工具”模块右上角，点击“设置”图标，进入配置页面。\n- 如果想使用本应用支持的平台中更加强劲的模型，可自行去各个平台充值、获取密钥，再导入密钥和模型 json 文件\n  - **密钥只缓存在本地，事实上，除了调用 API 和加载图片、视频，都没有联网操作**\n  - 想用哪个平台、哪个模型，全都自己导入\n- 平台密钥和模型规格的**固定 json 结构**见下方\n\n---\n\n**_注意，平台密钥和平台模型规格要同时导入，否则无法正常使用。_**\n\n#### 平台密钥 json 结构\n\n导入平台的密钥的 key 一定要和这个文件中 key 一样，不然匹配不上：\n\n```json\n{\n  \"USER_ALIYUN_API_KEY\": \"sk-xxx\",\n  \"USER_BAIDU_API_KEY_V2\": \"xxx\",\n  \"USER_TENCENT_API_KEY\": \"xxx\",\n\n  \"USER_DEEPSEEK_API_KEY\": \"sk-xxx\",\n  \"USER_LINGYIWANWU_API_KEY\": \"xxx\",\n  \"USER_ZHIPU_API_KEY\": \"xxx\",\n\n  \"USER_SILICONCLOUD_API_KEY\": \"sk-xxx\",\n  \"USER_INFINI_GEN_STUDIO_API_KEY\": \"sk-xxx\",\n\n  // 火山方舟的预置推理接入点\n  \"USER_VOLCENGINE_API_KEY\": \"xxx\",\n  // 自定义推理接入点(比较简单的联网应用)\n  \"USER_VOLCESBOT_API_KEY\": \"xxx\",\n\n  // 讯飞, 语音转写需要\n  \"USER_XFYUN_APP_ID\": \"xxx\",\n  \"USER_XFYUN_API_KEY\": \"xxx\",\n  \"USER_XFYUN_API_SECRET\": \"xxx\",\n\n  // 生活工具中 NUTRITIONIX 食品数据查询需要\n  \"USER_NUTRITIONIX_APP_ID\": \"xxx\",\n  \"USER_NUTRITIONIX_APP_KEY\": \"xxx\",\n\n  // newsapi新闻需要\n  \"USER_NEWS_API_KEY\": \"xxx\"\n}\n```\n\n- 密钥可以不是所有平台都填，但填写的部分 key 一定要完全一致，否则识别不到就算有导入模型也用不了\n- 讯飞那几个是语音转写需要，NUTRITIONIX 是生活工具中 Nutritionix 平台的食品数据查询需要，现在默认是使用我的账号，没余额了估计就不能用了。\n\n#### 大模型规格 json 结构\n\n\u003cdetails\u003e\n\n\u003csummary\u003e大模型规格 json 结构\u003c/summary\u003e\n\n```json\n[\n  {\n    \"platform\": \"\u003c*代码中自定义的平台代号，枚举值\u003e\",\n    \"model\": \"\u003c*指定平台中使用的模型代号，必须与API文档中一致，会用于构建http请求\u003e\",\n    \"modelType\": \"\u003c*代码中自定义的模型类型代号，枚举值\u003e\",\n    \"name\": \"\u003c模型名称，用于显示，随意，可识别出即可\u003e\",\n    \"contextLength\": \"\u003c上下文长度\u003e\",\n    \"isFree\": false, // 是否免费\n    \"inputPrice\": 6, // 输入价格(对话模型)\n    \"outputPrice\": 6, // 输出价格(对话模型)\n    \"costPer\": 0.05, // 单次调用价格(绘图/视频模型)\n    \"gmtRelease\": \"\u003c平台中模型发布时间\u003e\"\n  },\n  {\n    \"platform\": \"lingyiwanwu\",\n    \"model\": \"yi-lightning\",\n    \"modelType\": \"cc\",\n    \"name\": \"yi-lightning\",\n    \"contextLength\": 16000,\n    \"isFree\": false,\n    \"inputPrice\": 0.99,\n    \"outputPrice\": 0.99,\n    \"gmtRelease\": \"2024-12-23\"\n  },\n  {\n    \"platform\": \"siliconCloud\",\n    \"model\": \"Pro/black-forest-labs/FLUX.1-schnell\",\n    \"modelType\": \"tti\",\n    \"name\": \"Pro/FLUX.1-schnell\",\n    \"isFree\": false,\n    \"costPer\": 0.05,\n    \"gmtRelease\": \"2024-08-01\"\n  }\n  // ……\n]\n```\n\n\u003c/details\u003e\n\n---\n\n2025-03-07 已经简化，必要栏位只需要**平台、模型名、模型类型**即可。\n\n```json\n[\n  {\n    \"platform\": \"\u003c*代码中自定义的平台代号，枚举值\u003e\",\n    \"model\": \"\u003c*指定平台中使用的模型代号，必须与API文档中一致，会用于构建http请求\u003e\",\n    \"modelType\": \"\u003c*代码中自定义的模型类型代号，枚举值\u003e\"\n  },\n  {\n    \"platform\": \"aliyun\",\n    \"model\": \"deepseek-r1\",\n    \"modelType\": \"reasoner\"\n  },\n  {\n    \"platform\": \"aliyun\",\n    \"model\": \"deepseek-v3\",\n    \"modelType\": \"cc\"\n  }\n  // ……\n]\n```\n\n- platform 枚举值:\n\n```ts\nenum ApiPlatform {\n  aliyun, // 阿里云百炼\n  baidu, // 百度千帆\n  tencent, // 腾讯混元\n\n  deepseek, // 深度求索\n  lingyiwanwu, // 零一万物\n  zhipu, // 智谱 AI\n\n  siliconCloud, // 硅基流动\n  infini, // 无问芯穹的 genStudio\n\n  // 2025-03-24 火山引擎默认调用和关联应用(比如配置了联网搜索)使用的url不一样\n  // 避免出现冲突，分成两个且互不包含\n  volcengine,\n  volcesBot,\n}\n```\n\n- modelType 枚举值:\n\n```ts\nenum LLModelType {\n  cc, // 文本对话\n  reasoner, // 深度思考\n  vision, // 图片解读\n  tti, // 文本生图\n  iti, // 图片生图\n  image, // 图片生成(文生图生通用)\n  ttv, // 文生视频\n  itv, // 图生视频\n  video, // 视频生成(文生图生通用)\n}\n```\n\n后续我会放一些整理好的各个平台我常用的大模型规格 json 文件在项目的 **[\\_cus_model_jsons](./_cus_model_jsons)** 文件夹中，可以参考使用。\n\n### TODO\n\n2025-03-04 时想到的：\n\n- [ ] AI 工具部分:\n  - [ ] 高级请求参数配置(temperature、max_tokens 等比较常用但暂没支持用户配置)\n    - [x] AI 助手模块(对话模块)的更多参数配置\n  - [ ] 测试低成本让少量模型可联网搜索\n    - [x] 火山方舟大模型联网应用最简单，其他设置联网搜索后 API 参数变化很大\n  - [x] 对话消息展示的 Markdown 格式结合 LaTeX\n  - [x] AI 助手可编辑某个输入对话的消息，并记录对话分支\n  - [ ] 静默继续流式输出(助手模块切换到其他页面时输出继续而不是终止)\n  - [x] 添加角色卡功能，可少量预设，支持用户自行导入\n  - [ ] 一键保存整个对话为 Markdown 文件？\n  - [ ] 多 Agent 的群聊、角色扮演？\n  - [ ] 免费云端数据库用于数据存储？\n  - [ ] 是否简单使用 Nodejs 编写一个后端？\n- [ ] 生活工具部分:\n  - [ ] 一个简单的文本记事本(ToDo)?\n\n## 生活日常工具\n\n![生活工具](./_doc/screenshots/brief_version/生活工具.jpg)\n\n生活工具模块有很多实用小工具，大部分是我个人感兴趣或者能找到免费 API 服务的东西。\n\n### 极简记账\n\n极度简单的支出流水账记录，虽然名字是记账，但实际上就是一些流水账，然后简单的统计图表。\n\n![8极简记账](./_doc/screenshots/8极简记账.jpg)\n\n- 图 1：每天的支出收入信息。\n  - 默认是显示当前月份的数据，**上下滚动会切换月份**。\n  - 右上角“搜索”按钮，可以对所有的记录进行**关键字搜索**，可以看到相关关键字条目的记录，但不会进行相关统计。\n  - **_长按_** 主页的收支记录项次，可以对其进行**删除**。\n  - **_双击_** 主页的收支记录项次，可以对其进行**修改**。\n- 图 2：点击右上角“加号”按钮，可以**添加**一条新的支出记录。\n- 图 3 和图 4：点击右上角“条状图”按钮，可以进入统计图表页面。\n  - 目前仅支持简单的按月和按年的柱状图和分类饼图显示。\n  - 点击月份和年份下拉按钮，可以切换月份和年份。\n\n### 随机菜品\n\n_这个其实是之前(2024-04-09)就单独开发好的 app 了，功能融合，就直接复制到这里来。_\n\n给不知道每天吃什么的选择困难症患者，指一条参考选项：随机选择一道菜。\n\n如果你关于吃什么，已经习惯了：**随便、不知道、好麻烦、你做主、看运气** 等说法，不妨试一试。\n\n当然，最后是点外卖还是自己做甚至选了依旧不吃，还是看自己的决定。\n\n**1. 使用说明**\n\n如下图：\n\n- 主体是一个转盘，可以选择餐次和重新生成随机菜品。\n- 点击转盘即可开始旋转，3 秒后停止，显示结果，旋转时按钮都不可点击。\n- 点击选中结果可以跳转到该菜品详情页。\n- 如果菜品详情有视频地址，可以打开对应 url；如果菜谱有上传图片(仅支持单张本地图片和使用相机拍照)，可以缩放查看。\n\n![随机菜品1](./_doc/screenshots/9-1随机菜品1.jpg)\n\n- 当然核心还是菜品的数量，默认是文字列表显示，仅仅为了节约流量。\n- 点击上方“grid”图标(第一个)可以切换到有预览图的卡片列表，如果图片大注意流量消耗。\n- 在列表中点击某一个可以进入详情页(如上)，长按可以删除指定菜品。\n- 点击上方“upload”图标(第二个)可以导入菜品 json 文件(格式见下面相关内容，其中图片时本地图片的地址则暂未考虑)。\n- 当然，也可以自行一个个手动添加菜品。\n\n![随机菜品2](./_doc/screenshots/9-2随机菜品2.jpg)\n\n**2. 导入的菜品 json 文件格式示例**\n\n```json\n[\n  {\n    \"dish_name\": \"回锅肉\",\n    \"description\": \"此菜色味俱佳，肉鲜而香，是四川省家喻户晓的传统菜，地方风味很强。\",\n    \"tags\": \"川菜,家常菜,肉菜,麻辣鲜香\",\n    \"meal_categories\": \"午餐,晚餐,夜宵\",\n    \"images\": [\n      \"http://www.djy.gov.cn/dyjgb_rmzfwz/uploads/20191014154045sde1q1ajz3d.jpg\",\n      \"https://i3.meishichina.com/atta/recipe/2019/04/18/20190418155556766674398811368081.jpg?x-oss-process=style/p800\"\n    ],\n    \"videos\": [\"https://www.bilibili.com/video/BV1eA4m1L7QY/\"],\n    \"recipe\": [\n      \"原料：\\n猪肉500克，蒜苗150克，化猪油40克，盐1克，郫县豆瓣50克，甜酱25克，红白酱油25克，生姜15克，葱20克，花椒10余粒。\",\n      \"作法：\\n1. 把带皮的肥瘦相连的猪肉洗干净。\",\n      \"2. 锅内放开水置旺火上，下猪肉和葱、姜、花椒；将熟肉煮熟不煮𤆵；在煮肉过程中撇去汤面浮沫。蒜苗洗净切2.6厘米(约八分)长节。豆瓣剁细。\",\n      \"3. 将捞起的猪肉敞干水汽，在还有余热时切成约0.3厘米(约一分)厚的连皮肉片。\",\n      \"4. 炒锅置中火上，放入猪肉，油烧至五成热时下肉片，同事放微量盐炒均匀；炒至肉片出油时铲在锅边，相继放豆瓣、甜酱在油中炒出香味即与肉共同炒匀，然后放蒜苗合炒；蒜苗炒熟但不要炒蔫，再放酱油炒匀起锅即成。\",\n      \"附 注：\\n1.在肉汤中加适量新鲜蔬菜同煮，可增加一样汤菜。\",\n      \"2.根据爱好，菜内可加豆豉炒。\",\n      \"3.如无红酱油可用白糖代替。\"\n    ],\n    \"recipe_picture\": \"https://demo.image.com\" // 菜谱只支持单张图片\n  },\n  { …… }\n]\n```\n\n在`_dishes/HowToCook`中有整理一些菜品的 json 文件，可用直接导入使用。菜品数据来源于 github 的 [Anduin2017/HowToCook](https://github.com/Anduin2017/HowToCook)。\n\n### 其他生活助手功能\n\n查看 [CHANGELOG](CHANGELOG.md) 查看更多。\n\n## 用户设置\n\n目前其实没有用户这个概念，除了调用 API 和一些网络图片，都没有需要联网的东西。\n\n这个模块目前仅有一个\"备份恢复\"功能，存储方式因为各种原因不一致：\n\n- 简洁助手的对话记录、自定义模型列表、极简记账的账单条目、随机菜品的菜品列表等，都是本地 sqlite 存储的\n- 高级助手的对话记录使用 objectbox 存储\n- 角色扮演的对话记录使用文件存储\n- API Key 是缓存，不会备份出来\n\n备份就是把各种存储中的数据导出成 json 文件并压缩，恢复就是把压缩包的 json 存入数据库中。\n\n**注意**：\n\n- 恢复会清空当前数据库中的数据，请谨慎操作。\n  - 更新或卸载前，推荐先全量备份。\n- 0.4.0 之前的版本数据库表结构和现在不一样，所以不能恢复。\n\n# 其他说明\n\n## 开发环境\n\n在一个 Windows 7 中使用 Visual Box 7 安装的 Ubuntu20.04 LTS 虚拟机中使用 VSCode 进行开发。\n\n2025-03-20 使用最新 flutter 版本：\n\n```sh\n$ flutter --version\nFlutter 3.29.2 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision c236373904 (7 天前) • 2025-03-13 16:17:06 -0400\nEngine • revision 18b71d647a\nTools • Dart 3.7.2 • DevTools 2.42.3\n```\n\n\u003cdetails\u003e\n\n\u003csummary\u003e关于使用讯飞云语音转文字的相关说明\u003c/summary\u003e\n\n之前使用 audio_waveforms 录制语音和展示波形，但是录制的格式不支持讯飞云语音转文字的 pcm（pcm_s16le），wav，speex(speex-wb)。  \n所以使用 ffmpeg_kit_flutter 把 m4a 转换为 pcm 格式，然后给讯飞云转文字。\n\n但是新版本 flutter3.29 之后，ffmpeg_kit_flutter 启动运行会[项目报错](https://github.com/arthenica/ffmpeg-kit/issues/1110)。  \n准备替换为 record 库，直接录制 wav、 pcm 格式，然后给讯飞云转文字。但是识别效果极差，完全不对，且 VoiceWaveBubble 无法正常使用。\n\n虽然 ffmpeg_kit_flutter 已经是 DISCONTINUED 状态，2025-04-01 之后该库部分二进制文件也会被删除，之后就无法使用。\n但还是继续使用 audio_waveforms 录制 m4a 格式，然后使用 ffmpeg_kit_flutter 转换为 pcm 格式给讯飞云转文字。\n\n之后再找找其他方式。\n\n\u003c/details\u003e\n\n---\n\n\u003cdetails\u003e\n\n\u003csummary\u003e旧版本flutter历史\u003c/summary\u003e\n\n2024-11-04 使用最新 flutter 版本：\n\n```sh\n$ flutter --version\nFlutter 3.24.4 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 603104015d (11 天前) • 2024-10-24 08:01:25 -0700\nEngine • revision db49896cf2\nTools • Dart 3.5.4 • DevTools 2.37.3\n```\n\n2024-05-27 使用最新 flutter 版本：\n\n```sh\n$ flutter --version\nFlutter 3.22.1 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision a14f74ff3a (4 天前) • 2024-05-22 11:08:21 -0500\nEngine • revision 55eae6864b\nTools • Dart 3.4.1 • DevTools 2.34.3\n```\n\n\u003c/details\u003e\n\n## 仅 Android\n\n**手里没有 IOS 等其他设备，所以相关内容为 0**。\n\n开发机是小米 6(Android 13)，是 16:9 的 1080P 完整屏幕，和目前主流手记的分辨率和长 K 宽比都不一样，几乎肯定在其他的设备有一些显示上的差距，可以反馈或自行修改。\n\n虽然我日常主力机为努比亚 Z60 Ultra(Android 14)，但它和我之前的 Z50 Ultra 一样，[**无法实机开发调试**](https://github.com/flutter/flutter/issues/144999)，所以只有最后打包成 app 后进行使用测试，截图即使用此机器。\n\n安卓平板能跑(在我唯一的平板荣耀平板 5 中安装过)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanotsu%2Fswmate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsanotsu%2Fswmate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanotsu%2Fswmate/lists"}