一个使用 Go + Flutter 构建的现代化 Linux 代码编辑器
| 项目名称 |
cs-code-editor |
| 目标平台 |
Linux 桌面 |
| UI风格 |
现代化设计 |
| 应用类型 |
代码编辑器 |
| 运行模式 |
单机独立运行 |
| 组件 |
技术 |
说明 |
| 前端UI |
Flutter 3.x |
跨平台UI框架,Dart语言 |
| 后端核心 |
Go |
编译为共享库(.so),通过FFI调用 |
| 编辑器组件 |
re_editor / flutter_code_editor |
Flutter原生代码编辑器 |
| 通信方式 |
FFI (Foreign Function Interface) |
Flutter直接调用Go函数 |
cs-code-editor/
├── go_core/ # Go后端核心
│ ├── core.go # 导出给Flutter的API
│ ├── internal/
│ │ ├── fs/ # 文件系统操作
│ │ │ ├── watcher.go # 文件监控
│ │ │ └── operations.go # 文件CRUD
│ │ ├── editor/ # 编辑器核心逻辑
│ │ │ ├── buffer.go # 文本缓冲区
│ │ │ └── syntax.go # 语法解析
│ │ ├── terminal/ # 终端支持
│ │ │ └── pty.go # PTY处理
│ │ ├── search/ # 搜索引擎
│ │ │ └── ripgrep.go # 集成ripgrep
│ │ └── config/ # 配置管理
│ │ └── settings.go
│ ├── go.mod
│ └── go.sum
├── lib/ # Flutter前端
│ ├── main.dart
│ ├── app.dart
│ ├── screens/
│ │ ├── home/
│ │ │ └── home_screen.dart
│ │ └── settings/
│ │ └── settings_screen.dart
│ ├── widgets/
│ │ ├── editor/
│ │ │ ├── code_editor.dart
│ │ │ ├── line_numbers.dart
│ │ │ └── minimap.dart
│ │ ├── sidebar/
│ │ │ ├── file_tree.dart
│ │ │ └── search_panel.dart
│ │ ├── terminal/
│ │ │ └── terminal_widget.dart
│ │ └── common/
│ │ ├── tabs.dart
│ │ └── status_bar.dart
│ ├── services/
│ │ ├── ffi_bridge.dart # FFI绑定层
│ │ └── file_service.dart
│ ├── models/
│ │ ├── file_item.dart
│ │ └── editor_state.dart
│ ├── providers/ # 状态管理
│ │ ├── editor_provider.dart
│ │ └── theme_provider.dart
│ └── theme/
│ ├── app_theme.dart
│ └── syntax_themes.dart
├── linux/ # Linux平台配置
│ └── CMakeLists.txt
├── pubspec.yaml # Flutter依赖
├── build.yaml # 构建配置
└── README.md
┌─────────────────────────────────────────────────┐
│ Flutter UI │
│ (Dart - 编辑器界面、文件树、终端、设置面板) │
└─────────────────────┬───────────────────────────┘
│ FFI调用
▼
┌─────────────────────────────────────────────────┐
│ Go Core (libcore.so) │
│ - 文件系统操作 │
│ - 文本搜索 (ripgrep) │
│ - 终端PTY管理 │
│ - 配置持久化 │
└─────────────────────────────────────────────────┘
// go_core/core.go
package main
import "C"
// 文件操作
//export OpenFile
func OpenFile(path *C.char) *C.char
//export SaveFile
func SaveFile(path *C.char, content *C.char) C.int
//export DeleteFile
func DeleteFile(path *C.char) C.int
// 目录操作
//export ListDirectory
func ListDirectory(path *C.char) *C.char
//export CreateDirectory
func CreateDirectory(path *C.char) C.int
// 搜索
//export SearchInDirectory
func SearchInDirectory(dir *C.char, pattern *C.char) *C.char
// 文件监控
//export WatchDirectory
func WatchDirectory(path *C.char)
//export StopWatch
func StopWatch()
func main() {}
// lib/services/ffi_bridge.dart
import 'dart:ffi' as ffi;
import 'dart:io';
class FfiBridge {
static final ffi.DynamicLibrary _lib = ffi.DynamicLibrary.open(
Platform.isLinux ? 'libcore.so' : 'libcore.dylib',
);
// 文件操作
static String openFile(String path);
static int saveFile(String path, String content);
// 目录操作
static String listDirectory(String path);
// 搜索
static String searchInDirectory(String dir, String pattern);
}
# 开发环境
cd go_core && go build -buildmode=c-shared -o libcore.so
cd .. && flutter run -d linux
# 发布构建
flutter build linux --release
github.com/creack/pty - PTY终端支持
github.com/fsnotify/fsnotify - 文件监控
github.com/samber/lo - 工具函数
flutter_riverpod - 状态管理
re_editor 或 flutter_code_editor - 代码编辑器
flutter_highlight - 语法高亮
file_selector - 文件选择对话框
window_manager - 窗口管理