基于 Swift 与 Flutter 平台通道(Platform Channel)调用 iOS 原生服务的完整实战指南
跨平台移动开发前端UI组件OpenHarmony图形学【免费下载链接】flutter_flutter本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。项目地址https://gitcode.com/CPF-Flutter/flutter_flutter点击查看免费下载本文以 examples/platform_channel_swift 示例工程为核心系统讲解如何在 Flutter 应用中使用MethodChannel与EventChannel两类平台通道通过 Swift 调用 iOS 原生服务以电池电量与充电状态为例并完整覆盖 Dart 侧与 Swift 侧的配对实现、通道命名约定、错误处理、构建运行方式与flutter_driver自动化验证。读完本文你将掌握「Dart 发起调用 → Swift 处理并回传结果/持续事件流」的完整链路并能在自己的项目中复现这套两端协作的工程模式。一、示例工程定位Swift 版的“平台服务调用”教科书platform_channel_swift是 Flutter 官方仓库中用于演示「从 Flutter 调用平台特定服务」的示例工程。它与 examples/platform_channelObjective-C 版本功能等价区别在于 iOS 侧原生代码使用Swift编写适合偏爱 Swift 语法、或正在将老 Objective-C 插件迁移到 Swift 的开发者。工程实现的功能非常典型且易于验证MethodChannel方法通道从 Flutter 侧点击按钮发起一次「获取当前电池电量」的请求iOS 原生侧返回电量百分比EventChannel事件通道Flutter 侧订阅「充电状态变化」事件流iOS 原生侧在电池状态变化时持续推送charging/discharging事件。examples/platform_channel_swift/ ├── lib/ │ └── main.dart # Flutter/Dart 侧通道定义与 UI ├── ios/ │ ├── Flutter/ # Debug.xcconfig / Release.xcconfig / AppFrameworkInfo.plist │ ├── Runner/ │ │ ├── AppDelegate.swift # Swift 侧通道注册与原生实现 │ │ ├── Runner-Bridging-Header.h │ │ ├── Info.plist │ │ └── ... │ ├── Runner.xcodeproj/ │ └── Runner.xcworkspace/ # 可直接用 Xcode 打开的工作区 ├── test_driver/ │ ├── button_tap.dart # flutter_driver 测试入口 │ └── button_tap_test.dart # 端到端驱动测试 └── pubspec.yaml工程依赖非常简单见 pubspec.yaml运行时仅依赖flutterSDK开发时依赖flutter_test、flutter_driver与testuses-material-design: true用于启用 Material 组件。二、Dart 侧定义通道、发起调用、订阅事件流示例的 Dart 侧全部集中在 lib/main.dart核心代码只有几十行却完整覆盖了平台通道的两大类用法。2.1 通道的声明与命名约定static const MethodChannel methodChannel MethodChannel(samples.flutter.io/battery); static const EventChannel eventChannel EventChannel(samples.flutter.io/charging);两个关键点通道名channel name是 Dart 与原生两侧的唯一握手标识必须完全一致。这里分别使用samples.flutter.io/battery与samples.flutter.io/charging通道对象用static const声明一次即可MethodChannel与EventChannel的构造默认采用StandardMethodCodec见 platform_channel.dart#L293-L305Dart 与 Swift/Objective-C 两端因此可以互通标准类型int、String、Map、List等。2.2 MethodChannel一次请求一次应答Futurevoid _getBatteryLevel() async { String batteryLevel; try { final int? result await methodChannel.invokeMethod(getBatteryLevel); batteryLevel Battery level: $result%.; } on PlatformException { batteryLevel Failed to get battery level.; } setState(() { _batteryLevel batteryLevel; }); }这段代码演示了方法通道的标准姿势invokeMethodT(getBatteryLevel)向原生侧发起方法调用泛型T声明期望的返回类型这里为int?成功时把返回的电量百分比拼进 UI 文案原生侧抛出错误时Dart 侧捕获PlatformException并给出降级文案。在底层invokeMethod会走 platform_channel.dart 的_invokeMethod先用codec.encodeMethodCall将MethodCall(method, arguments)编码为二进制再经binaryMessenger.send发送到引擎返回结果通过codec.decodeEnvelope解码。如果平台上没有实现该通道的方法则会抛出MissingPluginException而OptionalMethodChannel会宽容地返回null见 OptionalMethodChannel。2.3 EventChannel订阅持续事件流override void initState() { super.initState(); eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); } void _onEvent(Object? event) { setState(() { _chargingStatus Battery status: ${event charging ? : dis}charging.; }); } void _onError(Object error) { setState(() { _chargingStatus Battery status: unknown.; }); }事件通道用于「原生侧持续推送、Dart 侧持续接收」的场景receiveBroadcastStream()返回一个broadcast 流监听回调_onEvent处理每个事件判断charging还是dischargingonError处理原生侧的错误事件。底层机制见 platform_channel.dart#L694-L740值得注意receiveBroadcastStream内部实际上复用了MethodChannel——当第一个监听者出现时0→1向原生发送listen方法当最后一个监听者取消时1→0发送cancel方法。也就是说EventChannel 是基于 MethodChannel 的上层封装原生侧只需实现onListen/onCancel两个回调。2.4 UI 与交互Text(_batteryLevel, key: const Key(Battery level label)), Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton(onPressed: _getBatteryLevel, child: const Text(Refresh)), ), Text(_chargingStatus),界面由一个带Key(Battery level label)的电量标签、一个「Refresh」按钮点击触发_getBatteryLevel和一个充电状态标签组成。注意那个Key是专门留给自动化测试定位控件用的详见第五部分。三、Swift 侧注册插件、实现方法回调与事件流示例的 iOS 原生侧全部在 ios/Runner/AppDelegate.swift是 Swift 中实现平台通道的标准范本。3.1 枚举集中管理通道常量enum ChannelName { static let battery samples.flutter.io/battery static let charging samples.flutter.io/charging } enum BatteryState { static let charging charging static let discharging discharging } enum MyFlutterErrorCode { static let unavailable UNAVAILABLE }把通道名、事件取值、错误码集中为枚举常量避免魔法字符串在 Dart 与 Swift 两侧漂移这是官方示例刻意示范的工程化习惯。3.2 AppDelegate 同时扮演插件注册者与流处理器main objc class AppDelegate: FlutterAppDelegate, FlutterStreamHandler, FlutterPluginRegistrant { private var eventSink: FlutterEventSink? override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) - Bool { pluginRegistrant self return super.application(application, didFinishLaunchingWithOptions: launchOptions) } func register(with registry: FlutterPluginRegistry) { GeneratedPluginRegistrant.register(with: registry) let registrar registry.registrar(forPlugin: battery) // ... 通道注册 } }要点拆解类声明同时遵循FlutterStreamHandler事件通道的流处理器与FlutterPluginRegistrant自定义插件注册两个协议pluginRegistrant self让引擎在启动时回调本类的register(with:)方法register(with:)中先调用GeneratedPluginRegistrant.register(with:)完成第三方插件的自动注册再通过registry.registrar(forPlugin: battery)拿到一个FlutterPluginRegistrar用它来创建通道registrar.messenger()即与 Dart 通信的FlutterBinaryMessengerSwift 示例需要 Runner-Bridging-Header.h 引入GeneratedPluginRegistrant.h以实现 Swift 与 Objective-C 生成的插件注册代码桥接。3.3 MethodChannel 的原生实现let batteryChannel FlutterMethodChannel(name: ChannelName.battery, binaryMessenger: registrar!.messenger()) batteryChannel.setMethodCallHandler({ [weak self] (call: FlutterMethodCall, result: FlutterResult) - Void in guard call.method getBatteryLevel else { result(FlutterMethodNotImplemented) return } self?.receiveBatteryLevel(result: result) })setMethodCallHandler注册方法回调根据call.method分发不同方法这里只有getBatteryLevel未识别的方法必须回传FlutterMethodNotImplemented否则 Dart 侧会因无响应而挂起使用[weak self]避免闭包循环引用。真正的电量读取逻辑private func receiveBatteryLevel(result: FlutterResult) { let device UIDevice.current device.isBatteryMonitoringEnabled true guard device.batteryState ! .unknown else { result(FlutterError(code: MyFlutterErrorCode.unavailable, message: Battery info unavailable, details: nil)) return } result(Int(device.batteryLevel * 100)) }错误处理非常规范当设备电池状态不可知如模拟器时通过FlutterError(code:message:details:)返回带错误码UNAVAILABLE的错误Dart 侧会将其捕获为PlatformException正常时返回Int(device.batteryLevel * 100)表示百分比。3.4 EventChannel 的原生实现public func onListen(withArguments arguments: Any?, eventSink: escaping FlutterEventSink) - FlutterError? { self.eventSink eventSink UIDevice.current.isBatteryMonitoringEnabled true sendBatteryStateEvent() NotificationCenter.default.addObserver( self, selector: #selector(AppDelegate.onBatteryStateDidChange), name: UIDevice.batteryStateDidChangeNotification, object: nil) return nil } objc private func onBatteryStateDidChange(notification: NSNotification) { sendBatteryStateEvent() } private func sendBatteryStateEvent() { guard let eventSink eventSink else { return } switch UIDevice.current.batteryState { case .full, .charging: eventSink(BatteryState.charging) case .unplugged: eventSink(BatteryState.discharging) default: eventSink(FlutterError(code: MyFlutterErrorCode.unavailable, message: Charging status unavailable, details: nil)) } } public func onCancel(withArguments arguments: Any?) - FlutterError? { NotificationCenter.default.removeObserver(self) eventSink nil return nil }这是事件通道的原生侧标准实现onListen保存eventSink事件回传管道立即推送一次当前状态并注册UIDevice.batteryStateDidChangeNotification通知电池状态变化时sendBatteryStateEvent通过eventSink把charging/discharging字符串推给 Dart 侧异常时向事件流注入FlutterErrorDart 侧会收到流错误onCancel移除通知观察者、置空eventSink与 Dart 侧cancel调用配对保证资源释放。四、底层链路从 Dart 调用到引擎与原生回调把两端代码拼起来一条完整的调用链路是Dart: methodChannel.invokeMethod(getBatteryLevel) → codec.encodeMethodCall 编码 → BinaryMessenger.send(channelName, bytes) # 框架层 → Flutter 引擎C路由到 iOS 平台 → Swift: FlutterMethodChannel.setMethodCallHandler 收到 FlutterMethodCall → 调用 UIDevice 原生 API → result(Int) 回传 → 引擎回投 → Dart 侧 codec.decodeEnvelope 解码在引擎侧通道的接收与编码实现在 engine/src/flutter/shell/platform/darwin/common/framework/Source/FlutterChannels.mmFlutterMethodChannel在收到消息时用 codec 解码出FlutterMethodCall再分发给 handler并将FlutterError编码为错误信封、将FlutterMethodNotImplemented映射为nil回复见 FlutterChannels.mm#L297-L318FlutterEventChannel则把onListen/onCancel映射为通道上的listen/cancel方法调用对应 FlutterChannels.mm#L429。这套「channel 名 codec 编解码」的机制就是平台通道跨语言协作的本质。本仓库作为 Flutter SDK 与 Engine 的 OpenHarmony 适配版本其 engine/src/flutter 下保留了完整的 Darwin/iOS 平台实现上述源码即是 Swift 示例运行时的真实底层依赖。五、构建、运行与自动化测试5.1 构建与运行README 核心操作原文档给出的运行方式examples/platform_channel_swift/README.md非常简单直接二选一即可命令行方式在工程根目录执行flutter build # 构建应用 flutter run # 运行应用到已连接的 iOS 设备/模拟器Xcode 方式用 Xcode 打开ios/Runner.xcworkspace工作区文件位于 ios/Runner.xcworkspace/contents.xcworkspacedata其内容即为标准的 Xcode 工程引用直接构建并运行项目。工程还包含标准的 iOS 配置Debug/Release 构建配置ios/Flutter/Debug.xcconfig、ios/Flutter/Release.xcconfig均#include Generated.xcconfigInfo.plist 配置了应用名PlatformChannel与常规 iOS 场景清单。5.2 用 flutter_driver 做端到端验证工程自带驱动测试用于自动化验证平台通道是否真实打通test_driver/button_tap.dart调用enableFlutterDriverExtension()并启动应用是flutter drive的入口test_driver/button_tap_test.dart连接FlutterDriver通过find.byValueKey(Battery level label)定位电量标签、find.text(Refresh)定位按钮点击后循环读取标签文本直到电量文本不再包含unknown且以%结尾以此断言「Dart 调用 → Swift 原生 → 回传结果」整条链路成功test(tap on the button, verify result, () async { final SerializableFinder batteryLevelLabel find.byValueKey(Battery level label); expect(batteryLevelLabel, isNotNull); final SerializableFinder button find.text(Refresh); await driver.waitFor(button); await driver.tap(button); String? batteryLevel; while (batteryLevel null || batteryLevel.contains(unknown)) { batteryLevel await driver.getText(batteryLevelLabel); } expect(batteryLevel.contains(%), isTrue); });运行方式为在工程根目录执行flutter drive --drivertest_driver/button_tap.dart --targettest_driver/button_tap_test.dart具体驱动命令可参考flutter drive工具用法。六、与 Objective-C 版及其他平台实现的对照原文档明确指出本工程的 Objective-C 等价版本位于 examples/platform_channel。两个版本在 Dart 侧代码几乎一致platform_channel的main.dart额外区分了NO_BATTERY错误码见 examples/platform_channel/lib/main.dart差异集中在 iOS 原生侧对比维度platform_channel_swift本文platform_channelObjective-CiOS 原生语言SwiftAppDelegate.swiftObjective-CAppDelegate.m通道定义枚举常量统一管理registerWithRegistry:内直接写字符串方法处理setMethodCallHandler闭包 guard分发Block 回调 isEqualToString:判断事件流类遵循FlutterStreamHandler类遵循FlutterStreamHandler支持平台仅 iOSAndroid、iOS、OHOS、Windows见其 README值得注意的是在本仓库中Objective-C 版 examples/platform_channel 还包含ohos/目录OpenHarmony 工程骨架而 Swift 版示例聚焦 iOS 单一平台这也体现了 Flutter 示例工程的两种组织风格——单一平台精讲与多平台覆盖。七、从示例到实践可复用的工程要点通道名必须两端一致且唯一建议像示例那样用反向域名风格samples.flutter.io/battery避免冲突同一通道名在 Dart 与 Swift 两侧各定义一次错误语义要完整方法调用失败用FlutterError(code:message:details:)Dart 侧捕获为PlatformException未实现的方法回传FlutterMethodNotImplemented事件流要配对生命周期Swift 侧onListen注册系统通知、onCancel移除通知并释放eventSink防止内存泄漏Dart 侧在initState订阅、按需取消UI 控件加Key为自动化测试find.byValueKey留好定位锚点状态不可知要有兜底示例对UIDeviceBatteryStateUnknown模拟器常见返回UNAVAILABLEDart 侧显示降级文案保证任何环境下应用都不崩溃。八、延伸阅读本仓库官方文档中关于访问平台与第三方服务的权威说明阅读 docs 目录下的文档以及框架侧平台通道的完整 API 定义 packages/flutter/lib/src/services/platform_channel.dart包含MethodChannel、OptionalMethodChannel、EventChannel与各类MethodCodec想深入引擎层机制可研读 iOS 平台框架源码 engine/src/flutter/shell/platform/darwin/common/framework/Source/FlutterChannels.mm 及其头文件FlutterChannels.h更多 Flutter 调用原生服务的官方示例可对比 examples/platform_channelObjective-C 多平台版与 examples/platform_view原生视图嵌入等工程。赞分享跨平台移动开发前端UI组件OpenHarmony图形学【免费下载链接】flutter_flutter本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。项目地址https://gitcode.com/CPF-Flutter/flutter_flutter点击查看免费下载相关推荐Flutter 平台通道实战在 examples/platform_channel 示例中调用 iOS、Android 与桌面端原生服务Flutter 平台通道实战在 examples/platform_channel 示例中调用 iOS、Android 与桌面端原生服务 本指南围绕 Flut前端跨平台移动开发UI组件桌面应用Flutter 通过 Swift 调用 iOS 原生服务platform_channel_swift 示例项目实战与源码解析Flutter 通过 Swift 调用 iOS 原生服务platform_channel_swift 示例项目实战与源码解析 导读 platform_chan前端跨平台移动开发UI组件桌面应用Valdi iOS Swift 原生集成实战用 recommendFriendsCallback 打通 Swift 服务与 TypeScript 组件Valdi iOS Swift 原生集成实战用 recommendFriendsCallback 打通 Swift 服务与 TypeScript 组件 本篇是跨平台UI组件前端移动开发上一篇Sails.js findOne Blueprint Action 实战解析按主键查询单条记录与实时订阅下一篇pyVideoTrans 技术架构与实现原理模块化多线程流水线的视频翻译配音引擎深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

元器件降额通用性准则:电压/温度/电流三维协同设计方法

元器件降额通用性准则:电压/温度/电流三维协同设计方法

简介:本资源是面向电子硬件工程师、可靠性设计人员及嵌入式系统开发者的专业技术文档,聚焦元器件降额设计这一保障设备长期稳定与安全运行的核心实践。文档系统梳理了降额的基本定义(如应力比、额定值)、五类关键依据(…

2026/10/18 17:16:18 阅读更多 →
基于MediaPipe和传统机器学习的手势识别

基于MediaPipe和传统机器学习的手势识别

一、项目介绍手势识别是一种常见的计算机视觉应用,可以通过摄像头获取手部图像,再根据手部的关键点位置判断当前手势。本次项目使用 OpenCV 获取摄像头画面,使用 MediaPipe 检测手部关键点,然后将关键点的三维坐标转换成机器学习模…

2026/10/17 10:31:15 阅读更多 →
Excel多表关联神器实测:告别VLOOKUP低效操作,快速合并跨表数据

Excel多表关联神器实测:告别VLOOKUP低效操作,快速合并跨表数据

做数据分析或者报表的人,应该都有过这样的经历:Excel表越堆越多,需要的数据散落在好几个文件里。每次要做月报,先打开销售表,再打开客户表,对着工号或者订单编号一个一个VLOOKUP,辛辛苦苦拉出来…

2026/10/17 15:23:57 阅读更多 →

最新新闻

推荐一个适合学习AI Agent开发的AI智能体开源项目:用TaoToken统一Key跑通DeepAgent实战

推荐一个适合学习AI Agent开发的AI智能体开源项目:用TaoToken统一Key跑通DeepAgent实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 23:07:17 阅读更多 →
4步部署i茅台自动预约系统campus-imaotai:新手友好的实操指南

4步部署i茅台自动预约系统campus-imaotai:新手友好的实操指南

4步部署i茅台自动预约系统campus-imaotai:新手友好的实操指南 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法) 项目地址: h…

2026/10/18 23:07:17 阅读更多 →
FlyEnv 本地开发环境与 AI 协同能力深度评测:从 MCP 配置到 TaoToken 统一 Key 的落地实践

FlyEnv 本地开发环境与 AI 协同能力深度评测:从 MCP 配置到 TaoToken 统一 Key 的落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 23:07:17 阅读更多 →
什么是联邦学习?用 TaoToken 统一 Key 跑通横向联邦 MNIST 实验

什么是联邦学习?用 TaoToken 统一 Key 跑通横向联邦 MNIST 实验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 23:07:17 阅读更多 →
170、Agent技术社区与开源项目

170、Agent技术社区与开源项目

170、Agent技术社区与开源项目 昨天半夜在排查一个LangGraph的状态流问题,顺手翻了翻GitHub上一个Agent项目的issue区,看到一个老哥把messages列表在节点里直接append了,结果整个对话历史在并行分支里串了线。这种问题放在传统编程里就是共享可变状态,但放在Agent的图编排…

2026/10/18 23:07:17 阅读更多 →
SpringBoot+Thymeleaf实战:快速构建用户管理CRUD系统

SpringBoot+Thymeleaf实战:快速构建用户管理CRUD系统

写这段代码的时候,我特意用一个最朴素的后台管理页面做载体:用户信息管理。数据库一张表,页面三张,接口四种。线上跑通之后,我才觉得这套经典组合确实值得展开聊聊。SpringBoot负责把所有配置吞掉,Thymelea…

2026/10/18 23:06:16 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →