Flutter分屏布局插件split_pane的使用
Flutter分屏布局插件split_pane的使用
split_pane
是一个用于实现 Material Design 分屏布局的 Flutter 插件。通过该插件,开发者可以轻松地创建具有固定或灵活布局的分屏组件。
特性
- 固定布局
- 灵活布局
- 指定规格的动画(不支持)
- 无障碍功能(不支持)
- 相对于自定义中心/显示特性的灵活布局(不支持)
- API 质量(主题、继承数据等)(不支持)
使用方法
以下是一个简单的示例,展示了如何使用 split_pane
插件来创建一个基本的分屏布局。
import 'package:split_pane/split_pane.dart';
Widget build(BuildContext context) {
return SplitPane(
primary: Placeholder(), // 主面板
secondary: Placeholder(), // 辅助面板
);
}
完整示例
下面是一个更完整的示例,展示了如何使用 split_pane
插件来创建一个具有旋转按钮和切换面板位置功能的分屏布局。
import 'package:example/pane.dart';
import 'package:example/rotate_button.dart';
import 'package:example/switch_pane_button.dart';
import 'package:example/theme.dart';
import 'package:flutter/material.dart';
import 'package:split_pane/split_pane.dart';
void main() => runApp(const ExampleApp());
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
theme: theme,
home: HomePage(),
debugShowCheckedModeBanner: false,
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with SingleTickerProviderStateMixin {
late final SplitController _controller;
Axis _direction = Axis.horizontal;
PaneLocation _paneLocation = PaneLocation.trailing;
[@override](/user/override)
void initState() {
super.initState();
_controller = SplitController(vsync: this);
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
child: ListenableBuilder(
listenable: _controller,
builder: (context, _) {
return SplitPane(
controller: _controller,
direction: _direction,
primaryPaneLocation: _paneLocation,
primary: Pane(
child: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
spacing: 8.0,
children: [
RotateButton(onPressed: _onRotate), // 旋转按钮
SwitchPaneButton(
paneLocation: _paneLocation,
direction: _direction,
onPressed: _onSwitchPane, // 切换面板按钮
),
],
),
),
),
secondary: ClipRect(
child: Pane(
child: Center(
child: Text(sizeAsString), // 显示当前尺寸
),
),
),
);
},
),
),
);
}
void _onRotate() {
setState(() => _direction =
_direction == Axis.horizontal ? Axis.vertical : Axis.horizontal); // 切换方向
}
String get sizeAsString {
final position = _controller.position;
if (_controller.isAbsolute) {
final dp = position.toStringAsFixed(0);
return '$dp dp';
} else {
final percent = (position * 100).toStringAsFixed(0);
return '$percent%';
}
}
void _onSwitchPane() {
setState(() {
_paneLocation = switch (_paneLocation) {
PaneLocation.leading => PaneLocation.trailing,
PaneLocation.trailing => PaneLocation.leading,
};
});
}
}
更多关于Flutter分屏布局插件split_pane的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter分屏布局插件split_pane的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
split_pane
是一个用于 Flutter 的分屏布局插件,它允许你在应用中创建可拖动的分隔栏,从而将界面分成多个可调整大小的区域。这个插件非常适合需要同时显示多个视图或面板的应用场景,例如代码编辑器、文件管理工具等。
安装
首先,你需要在 pubspec.yaml
文件中添加 split_pane
插件的依赖:
dependencies:
flutter:
sdk: flutter
split_pane: ^0.2.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
split_pane
插件提供了 SplitPane
小部件,你可以通过它来创建分屏布局。以下是一个简单的示例,展示如何使用 SplitPane
将屏幕分成左右两个部分:
import 'package:flutter/material.dart';
import 'package:split_pane/split_pane.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SplitPaneExample(),
);
}
}
class SplitPaneExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Split Pane Example'),
),
body: SplitPane(
initialWeights: [0.3, 0.7], // 初始权重,左右比例为3:7
children: [
Container(
color: Colors.blue,
child: Center(child: Text('Left Pane')),
),
Container(
color: Colors.green,
child: Center(child: Text('Right Pane')),
),
],
),
);
}
}
参数说明
initialWeights
: 一个包含两个元素的列表,表示左右两个区域的初始权重。总和应为 1.0。children
: 一个包含两个子部件的列表,分别代表左右两个区域的内容。dividerColor
: 分隔栏的颜色。dividerSize
: 分隔栏的宽度或高度(取决于方向)。orientation
: 分屏的方向,可以是Axis.horizontal
(水平分屏)或Axis.vertical
(垂直分屏)。
垂直分屏示例
如果你想创建垂直分屏布局,只需将 orientation
参数设置为 Axis.vertical
:
SplitPane(
orientation: Axis.vertical,
initialWeights: [0.4, 0.6], // 初始权重,上下比例为4:6
children: [
Container(
color: Colors.red,
child: Center(child: Text('Top Pane')),
),
Container(
color: Colors.yellow,
child: Center(child: Text('Bottom Pane')),
),
],
)
自定义分隔栏
你可以通过 dividerColor
和 dividerSize
参数来自定义分隔栏的外观:
SplitPane(
dividerColor: Colors.black,
dividerSize: 10.0,
initialWeights: [0.3, 0.7],
children: [
Container(
color: Colors.blue,
child: Center(child: Text('Left Pane')),
),
Container(
color: Colors.green,
child: Center(child: Text('Right Pane')),
),
],
)