You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:win_text_editor/frame/widgets/file_explorer_pane.dart';
|
|
|
|
import 'package:win_text_editor/frame/widgets/tab_manager.dart';
|
|
|
|
import 'package:win_text_editor/frame/widgets/tab_view.dart';
|
|
|
|
import 'package:win_text_editor/menus/app_menu.dart';
|
|
|
|
import 'package:win_text_editor/frame/providers/file_provider.dart';
|
|
|
|
import 'package:win_text_editor/frame/widgets/console_panel.dart';
|
|
|
|
|
|
|
|
class AppScaffold extends StatelessWidget {
|
|
|
|
const AppScaffold({super.key});
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return MultiProvider(
|
|
|
|
providers: [
|
|
|
|
ChangeNotifierProvider(create: (_) => FileProvider()),
|
|
|
|
ChangeNotifierProvider(create: (_) => TabManager()),
|
|
|
|
],
|
|
|
|
child: Scaffold(
|
|
|
|
backgroundColor: Colors.grey[100],
|
|
|
|
body: Column(
|
|
|
|
children: [
|
|
|
|
const AppMenu(),
|
|
|
|
Expanded(
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
// 左侧文件树 - 传递双击事件回调
|
|
|
|
Consumer<TabManager>(
|
|
|
|
builder: (context, tabManager, child) {
|
|
|
|
return FileExplorerPane(
|
|
|
|
onFileDoubleTap: (path) => tabManager.handleFileDoubleTap(path),
|
|
|
|
onFolderDoubleTap: (path) => tabManager.handleFolderDoubleTap(path),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
),
|
|
|
|
// 主内容区
|
|
|
|
Expanded(
|
|
|
|
child: Consumer<TabManager>(
|
|
|
|
builder:
|
|
|
|
(_, manager, __) =>
|
|
|
|
TabView(tabs: manager.tabs, currentTabId: manager.activeTabId),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
const ConsolePanel(),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|