Flutter容器组件插件the_containers的使用
Flutter 容器组件插件 the_containers 的使用
TheContainers
TheContainers 是一组容器,简化了布局工作。它们是 Row、Column、Container 和 AnimatedContainer 的可替换版本,并允许在子元素之间设置自定义间距。
SeparatedRow 和 SeparatedColumn
SeparatedRow 和 SeparatedColumn 是 Row 和 Column 的替代品。它们允许通过设置 separatorSize
或 separator
属性来添加子元素之间的间距。
ContainerRow 和 ContainerColumn
ContainerRow 和 ContainerColumn 是可以作为行或列使用的 Container。除了所有与 Container 相关的属性外,还可以设置 separatorSize
或 separator
属性。
AnimatedContainerRow 和 AnimatedContainerColumn
AnimatedContainerRow 和 AnimatedContainerColumn 是可以作为行或列使用的 AnimatedContainer。除了所有与 AnimatedContainer 相关的属性外,还可以设置 separatorSize
或 separator
属性。
示例代码
// 忽略文件级别的公共成员 API 文档
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:the_containers/the_containers.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'TheContainers Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
// 枚举类型用于选择不同的标签页类型
enum TabType {
separatedRow,
separatedColumn,
containerRow,
containerColumn,
animatedContainerRow,
animatedContainerColumn;
// 获取标签页名称
String get tabName => name[0].toUpperCase() + name.substring(1);
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _itemCount = 3;
late final Timer _timer;
double _padding = 16;
[@override](/user/override)
void initState() {
super.initState();
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
if (mounted) {
setState(() {
_padding = _padding > 16 ? 4 : 32;
});
}
});
}
[@override](/user/override)
void dispose() {
_timer.cancel();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
final tabs = TabType.values.map((e) => Tab(text: e.tabName)).toList();
final children = TabType.values.map(_getTabView).toList();
return DefaultTabController(
length: tabs.length,
child: Scaffold(
appBar: AppBar(
title: const Text('TheContainers Demo'),
bottom: TabBar(
isScrollable: true,
tabAlignment: TabAlignment.center,
tabs: tabs,
),
),
body: TabBarView(
children: children,
),
),
);
}
// 返回一个居中的滚动视图
Widget _getTabContainer({
required Axis scrollDirection,
required Widget child,
}) {
return Center(
child: SingleChildScrollView(
scrollDirection: scrollDirection,
child: child,
),
);
}
// 根据标签页类型返回相应的视图
Widget _getTabView(TabType tabType) {
final children = List.generate(
_itemCount,
(index) => Container(
color: Colors.deepPurple[100 * (index + 1)],
height: 100,
width: 100,
child: Center(
child: Text(
'Item $index',
style: const TextStyle(fontSize: 20),
),
),
),
);
return switch (tabType) {
TabType.separatedRow => _getTabContainer(
scrollDirection: Axis.horizontal,
child: SeparatedRow(
separatorSize: 16,
children: children,
),
),
TabType.separatedColumn => _getTabContainer(
scrollDirection: Axis.vertical,
child: SeparatedColumn(
separatorSize: 16,
children: children,
),
),
TabType.containerRow => _getTabContainer(
scrollDirection: Axis.horizontal,
child: ContainerRow(
separatorSize: 16,
color: Colors.green[300],
padding: EdgeInsets.all(_padding),
children: children,
),
),
TabType.containerColumn => _getTabContainer(
scrollDirection: Axis.vertical,
child: ContainerColumn(
separatorSize: 16,
color: Colors.green[300],
padding: EdgeInsets.all(_padding),
children: children,
),
),
TabType.animatedContainerRow => _getTabContainer(
scrollDirection: Axis.horizontal,
child: AnimatedContainerRow(
duration: const Duration(milliseconds: 300),
separatorSize: 16,
color: Colors.green[300],
padding: EdgeInsets.all(_padding),
children: children,
),
),
TabType.animatedContainerColumn => _getTabContainer(
scrollDirection: Axis.vertical,
child: AnimatedContainerColumn(
duration: const Duration(milliseconds: 300),
separatorSize: 16,
color: Colors.green[300],
padding: EdgeInsets.all(_padding),
children: children,
),
),
};
}
}
更多关于Flutter容器组件插件the_containers的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter容器组件插件the_containers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用the_containers
插件的详细示例。the_containers
是一个提供多种容器组件的Flutter插件,可以帮助开发者快速创建具有不同布局和外观的UI。
首先,确保你已经在pubspec.yaml
文件中添加了the_containers
依赖:
dependencies:
flutter:
sdk: flutter
the_containers: ^最新版本号 # 替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,让我们看一些如何使用the_containers
提供的组件的代码示例。
示例代码
1. 使用CardContainer
CardContainer
提供了一个带有阴影和圆角的卡片容器。
import 'package:flutter/material.dart';
import 'package:the_containers/the_containers.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('CardContainer 示例'),
),
body: Center(
child: CardContainer(
elevation: 10,
shadowColor: Colors.grey.withOpacity(0.5),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
),
child: Container(
width: 200,
height: 100,
color: Colors.blue,
child: Center(
child: Text(
'Card Container',
style: TextStyle(color: Colors.white),
),
),
),
),
),
),
);
}
}
2. 使用GradientContainer
GradientContainer
提供了一个带有线性渐变的容器。
import 'package:flutter/material.dart';
import 'package:the_containers/the_containers.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('GradientContainer 示例'),
),
body: Center(
child: GradientContainer(
gradient: LinearGradient(
colors: [Colors.red, Colors.blue],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
child: Container(
width: 200,
height: 100,
child: Center(
child: Text(
'Gradient Container',
style: TextStyle(color: Colors.white),
),
),
),
),
),
),
);
}
}
3. 使用ShadowContainer
ShadowContainer
提供了一个带有阴影效果的容器。
import 'package:flutter/material.dart';
import 'package:the_containers/the_containers.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('ShadowContainer 示例'),
),
body: Center(
child: ShadowContainer(
elevation: 20,
shadowColor: Colors.black.withOpacity(0.3),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
child: Container(
width: 200,
height: 100,
color: Colors.green,
child: Center(
child: Text(
'Shadow Container',
style: TextStyle(color: Colors.white),
),
),
),
),
),
),
);
}
}
这些示例展示了如何使用the_containers
插件提供的不同容器组件来构建具有不同外观和布局的UI。你可以根据需要调整这些组件的属性,以实现所需的效果。