Flutter UI组件库插件flutter_vant的使用
flutter_vant
是一个基于 Flutter 的 UI 组件库插件,它提供了丰富的组件,帮助开发者快速构建美观且功能强大的移动应用界面。本文将通过一个完整的示例代码展示如何使用 flutter_vant
插件来创建一个简单的应用。
安装 flutter_vant
在使用 flutter_vant
之前,首先需要将其添加到项目的依赖中。在 pubspec.yaml
文件中添加以下内容:
dependencies:
flutter_vant: ^1.0.0
然后运行 flutter pub get
来安装依赖。
示例代码
以下是一个完整的示例代码,展示了如何使用 flutter_vant
插件来创建一个包含多个组件的简单应用。
import 'package:flutter/material.dart';
import 'package:flutter_vant/main.dart'; // 导入 flutter_vant 主包
// 导入各个组件的示例页面
import './view/button.dart';
import './view/cell.dart';
import './view/icon.dart';
import './view/image.dart';
import './view/loading.dart';
void main() {
runApp(const App()); // 启动应用
}
class App extends StatelessWidget {
const App({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: Home(), // 设置主页为 Home 页面
// home: ImageDemo(), // 可以直接跳转到某个组件示例
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
[@override](/user/override)
HomeState createState() => HomeState(); // 创建状态类
}
class HomeState extends State<Home> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Container(
alignment: Alignment.topLeft, // 对齐方式
color: VanColor.white, // 背景颜色
padding: const EdgeInsets.only(
top: 30,
right: 15,
bottom: 30,
left: 15,
),
child: SingleChildScrollView( // 使用单ChildScrollView允许滚动
child: _menu(), // 渲染菜单
),
),
);
}
// 渲染菜单项
Widget _menu() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start, // 左对齐
children: [
_title('基础组件'), // 分组标题
_cellBtn('Button 按钮', () { _router('button'); }), // 按钮示例
_cellBtn('Cell 单元格', () { _router('cell'); }), // 单元格示例
_cellBtn('Icon 图标', () { _router('icon'); }), // 图标示例
_cellBtn('Image 图片', () { _router('image'); }), // 图片示例
_title('反馈组件'), // 反馈组件分组标题
_cellBtn('Loading 加载', () { _router('loading'); }), // 加载动画示例
],
);
}
// 渲染按钮
Widget _cellBtn(String text, onPressed) {
return Padding(
padding: const EdgeInsets.only(top: 10), // 上方间距
child: VanButton(
mainAxisAlignment: MainAxisAlignment.start, // 按钮左对齐
backgroundColor: VanColor.gray1, // 按钮背景色
fontColor: VanColor.black, // 字体颜色
round: true, // 圆角按钮
text: text, // 按钮文本
width: double.infinity, // 按钮宽度占满父容器
onPressed: onPressed, // 点击事件
),
);
}
// 渲染标题
Widget _title(text) {
return Container(
padding: const EdgeInsets.only(
top: 15,
left: 20, // 左侧内边距
),
child: Text(
text, // 标题文本
style: const TextStyle(
fontSize: 14, // 字体大小
color: VanColor.gray6, // 文字颜色
),
),
);
}
// 路由跳转方法
_router(String path) {
var map = {
'button': const ButtonDemo(), // 按钮示例页面
'cell': const CellDemo(), // 单元格示例页面
'icon': const IconDemo(), // 图标示例页面
'image': const ImageDemo(), // 图片示例页面
'loading': const LoadingDemo(), // 加载动画示例页面
};
var wdt = map[path] ?? Container(); // 默认返回空容器
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => wdt, // 构建目标页面
),
);
}
}
更多关于Flutter UI组件库插件flutter_vant的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter UI组件库插件flutter_vant的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_vant
是一个基于 Flutter 的 UI 组件库,灵感来源于 Vant(一个轻量级的移动端 Vue 组件库)。它提供了丰富的组件,帮助开发者快速构建美观且功能完善的移动应用界面。
安装 flutter_vant
首先,你需要在 pubspec.yaml
文件中添加 flutter_vant
依赖:
dependencies:
flutter:
sdk: flutter
flutter_vant: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 flutter_vant
组件
flutter_vant
提供了多种常用的 UI 组件,如按钮、表单、对话框、标签栏等。以下是一些常见组件的使用示例。
1. 按钮 (Button)
import 'package:flutter/material.dart';
import 'package:flutter_vant/flutter_vant.dart';
class ButtonExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Button Example")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
VanButton(
text: "Primary Button",
type: ButtonType.primary,
onPressed: () {
print("Primary Button Pressed");
},
),
SizedBox(height: 20),
VanButton(
text: "Danger Button",
type: ButtonType.danger,
onPressed: () {
print("Danger Button Pressed");
},
),
],
),
),
);
}
}
2. 表单 (Form)
import 'package:flutter/material.dart';
import 'package:flutter_vant/flutter_vant.dart';
class FormExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Form Example")),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: VanForm(
child: Column(
children: [
VanField(
label: "Username",
placeholder: "Enter your username",
),
VanField(
label: "Password",
placeholder: "Enter your password",
obscureText: true,
),
SizedBox(height: 20),
VanButton(
text: "Submit",
type: ButtonType.primary,
onPressed: () {
print("Form Submitted");
},
),
],
),
),
),
);
}
}
3. 对话框 (Dialog)
import 'package:flutter/material.dart';
import 'package:flutter_vant/flutter_vant.dart';
class DialogExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Dialog Example")),
body: Center(
child: VanButton(
text: "Show Dialog",
type: ButtonType.primary,
onPressed: () {
VanDialog.show(
context,
title: "提示",
message: "这是一个对话框示例",
showCancelButton: true,
onConfirm: () {
print("Confirmed");
},
onCancel: () {
print("Cancelled");
},
);
},
),
),
);
}
}
4. 标签栏 (TabBar)
import 'package:flutter/material.dart';
import 'package:flutter_vant/flutter_vant.dart';
class TabBarExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("TabBar Example")),
body: VanTabBar(
items: [
VanTabBarItem(text: "Tab 1"),
VanTabBarItem(text: "Tab 2"),
VanTabBarItem(text: "Tab 3"),
],
onTap: (index) {
print("Tab $index tapped");
},
),
);
}
}
自定义主题
flutter_vant
允许你自定义主题颜色,以适应你的应用设计风格。
import 'package:flutter/material.dart';
import 'package:flutter_vant/flutter_vant.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Vant Example',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Home Page")),
body: Center(
child: VanButton(
text: "Custom Theme Button",
type: ButtonType.primary,
onPressed: () {
print("Custom Theme Button Pressed");
},
),
),
);
}
}