- 新增模型目录占位文件与翻译类型拆分 - 调整路由配置与桌面端窗口初始化 - 移除多处冗余图表配置项 - 重构右侧面板注册表与三栏布局组件 - 添加智能AppBar、拖拽书签等新功能组件 - 优化安卓编译配置与多平台插件注册 - 新增翻译覆盖率测试与共享组件 - 格式化代码与修复静态分析警告
74 lines
2.2 KiB
Dart
74 lines
2.2 KiB
Dart
/// ============================================================
|
|
/// 闲言APP — 三栏布局组件
|
|
/// 创建时间: 2026-05-29
|
|
/// 更新时间: 2026-05-29
|
|
/// 作用: 超宽屏(>=1400px)三栏布局:左侧列表+中间详情+右侧辅助面板
|
|
/// 上次更新: 初始创建
|
|
/// ============================================================
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import 'split_divider.dart';
|
|
|
|
class TripleColumnView extends ConsumerStatefulWidget {
|
|
const TripleColumnView({
|
|
required this.leftPanel,
|
|
required this.centerPanel,
|
|
required this.rightPanel,
|
|
super.key,
|
|
});
|
|
|
|
final Widget leftPanel;
|
|
final Widget centerPanel;
|
|
final Widget rightPanel;
|
|
|
|
@override
|
|
ConsumerState<TripleColumnView> createState() => _TripleColumnViewState();
|
|
}
|
|
|
|
class _TripleColumnViewState extends ConsumerState<TripleColumnView> {
|
|
double _leftRatio = 0.25;
|
|
double _centerRatio = 0.40;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final width = MediaQuery.of(context).size.width;
|
|
final leftWidth = width * _leftRatio;
|
|
final centerWidth = width * _centerRatio;
|
|
|
|
return Row(
|
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
children: [
|
|
SizedBox(width: leftWidth, child: widget.leftPanel),
|
|
SplitDivider(
|
|
currentPosition: _leftRatio,
|
|
onPositionChanged: (newRatio) {
|
|
setState(() {
|
|
final delta = newRatio - _leftRatio;
|
|
_leftRatio = newRatio.clamp(0.15, 0.35);
|
|
_centerRatio = (_centerRatio - delta).clamp(0.25, 0.55);
|
|
});
|
|
},
|
|
minPosition: 0.15,
|
|
maxPosition: 0.35,
|
|
),
|
|
SizedBox(width: centerWidth, child: widget.centerPanel),
|
|
SplitDivider(
|
|
currentPosition: _leftRatio + _centerRatio,
|
|
onPositionChanged: (newRatio) {
|
|
setState(() {
|
|
final combinedRatio = newRatio;
|
|
_centerRatio =
|
|
(combinedRatio - _leftRatio).clamp(0.25, 0.55);
|
|
});
|
|
},
|
|
minPosition: _leftRatio + 0.25,
|
|
maxPosition: _leftRatio + 0.55,
|
|
),
|
|
Expanded(child: widget.rightPanel),
|
|
],
|
|
);
|
|
}
|
|
}
|