LocalSend 教程:本地文件传输工具的源码结构与入口指南
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
LocalSend 是一款开源的 AirDrop 替代方案,让同一局域网里的手机、电脑和平板不注册、不走云端,就能互传文件和消息。这篇 LocalSend 教程从使用场景讲起,再带你过一遍源码结构,最后告诉你入口文件和关键配置藏在哪里。
LocalSend 能做什么:四个常见场景
- 手机传照片到电脑:拍完照直接发到旁边的电脑上,不绕道网盘或聊天软件,也不用插数据线。
- 办公网内协作:同一个 Wi-Fi 下,同事之间互发几十上百兆的文件,速度只受局域网带宽限制。
- 临时传一句话:除了文件,也可以发一段简单文本,相当于局域网内的即时消息。
- 数据不出局域网:没有账号体系,设备之间直连传输,适合对隐私敏感的场景。
下面这张截图展示的是电脑端和手机端同时打开 LocalSend 时的接收界面,每台设备都有一个随机生成的代号(比如 "Fine Pear"),双方凭代号互相发现并建立连接。
快速看懂仓库结构:目录各管一摊
打开仓库根目录,你会看到几个平行的代码区和一些文档、脚本。按"谁在干活"来理解,比逐个目录罗列更快建立印象:
app/—— 你能装到设备上的那个应用本体,基于 Flutter 开发,界面、页面、状态管理都在app/lib/里;各平台(android、ios、linux、macos、windows)的原生外壳代码也放在各自的子目录中。packages/—— 核心能力层。packages/core是 Rust 写的传输核心,涵盖设备发现、HTTP 服务、加密、多播与 WebRTC 等;packages/localsend_isolates把 Rust 通过 flutter_rust_bridge 暴露给 Dart,并在 Dart isolate 中跑网络任务,避免卡 UI。cli/—— Rust 写的命令行版本,在终端里完成发现设备、收发消息这类操作。server/—— 独立的服务端组件,带 Dockerfile,适合自托管场景。support/—— 文档和构建脚本的集中地,support/docs/下有项目文档和依赖关系图,support/scripts/存放各平台的编译脚本。fastlane/—— 应用商店的元数据与截图,改商店描述时看这里。- 根目录的
README.md、CHANGELOG.md、CONTRIBUTING.md分别是项目介绍、更新记录与贡献指南,第一次接触建议先翻前两个。
桌面版的"发送"页长这样:左侧是接收/发送/设置三个入口,选中文件后在"附近设备"列表里挑目标即可。
找到启动入口:main.dart 里发生了什么
应用入口在app/lib/main.dart(注意不是app/main.dart,老文档里常写错位置)。整个main()的逻辑分两步:先调preInit(args)完成依赖注入容器和各类配置的初始化,初始化失败就展示一个错误界面;成功后用runApp挂载LocalSendApp。
Future<void> main(List<String> args) async { final RefenaContainer container; try { container = await preInit(args); } catch (e, stackTrace) { showInitErrorApp(error: e, stackTrace: stackTrace); return; } runApp(RefenaScope.withContainer( container: container, child: TranslationProvider(child: const LocalSendApp()), )); }这段代码说明了两点:一是初始化被包在 try/catch 里,出错不会白屏;二是界面被翻译提供者和主题系统层层包裹,LocalSendApp的build方法里还能看到语言列表、深浅色主题和首屏HomePage的装配过程。想追"界面到底怎么来的",顺着LocalSendApp往下看HomePage即可。
看懂关键配置:版本与依赖落在哪两个文件
Dart 侧看app/pubspec.yaml:
version: 1.18.2+64—— 当前应用版本与构建号。environment里flutter: ^3.41.0、sdk: ^3.11.0—— 规定了开发所需的 Flutter 和 Dart 最低版本,环境对不上时先查这里。dependencies中值得留意的有slang(多语言方案,对应app/assets/i18n/下各语言 JSON)、window_manager/tray_manager(桌面窗口与托盘)、routerino(路由)。assets声明了assets/img/和assets/CHANGELOG.md,说明内置更新日志也来自资源目录。
Rust 侧看根目录的Cargo.toml,它定义了整个 workspace,成员就是上面提到的cli、packages/core、packages/localsend_isolates/rust、server。根目录还有rust-toolchain.toml锁定 Rust 工具链版本,pubspec.yaml则是 Dart 侧的 workspace 根配置。改依赖前先弄清它属于哪一侧,能少走弯路。
传输进行中的界面如下:右侧窗口列出每个文件的完成状态,底部有总量与实时速度,是理解收发流程时对照源码的好材料。
新手下一步:跑起来、改起来
- 先读文档:根目录
README.md了解功能全貌,support/docs/下有更细的文档和依赖层级图。 - 把仓库拿到本地:
git clone https://gitcode.com/GitHub_Trending/lo/localsend。 - 跟读入口:按
app/lib/main.dart→preInit(位于app/lib/config/init.dart)→HomePage的顺序读一遍,半小时就能摸清主流程骨架。 - 动手修改:从
app/lib/pages/settings/里的设置项改起,反馈直接、风险小;想碰传输逻辑再深入packages/core。 - 提交前看规则:
CONTRIBUTING.md写明了开发环境与贡献流程,动代码之前读一遍。
小结
LocalSend 用 Flutter 做界面、Rust 做核心,把"局域网互传"这件小事做成了多平台、可自托管、代码可读性不错的开源项目。掌握上面这条"场景 → 目录 → 入口 → 配置"的阅读路径,你就能在这个仓库里自如导航;想更深入或参与贡献,README.md和CONTRIBUTING.md是你最好的起点。
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考