Flutter自定义Widget选择插件widgetpicker的使用
Flutter自定义Widget选择插件widgetpicker的使用
WidgetPicker 是一个基于 NumberPicker 的分支,用于通过相同的用户界面支持分类选择。
示例
以下是一个简单的示例,展示如何使用 WidgetPicker 插件。更多示例可以在 example 中查看。
完整示例代码
import 'package:flutter/material.dart';
import 'package:widgetpicker/widgetpicker.dart';
void main() {
runApp(new ExampleApp());
}
class ExampleApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'WidgetPicker Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
title: Text('Widgetpicker example'),
),
body: _WidgetExample(),
),
);
}
}
class _WidgetExample extends StatefulWidget {
[@override](/user/override)
_WidgetExampleState createState() => _WidgetExampleState();
}
class _WidgetExampleState extends State<_WidgetExample> {
String _currentSelection = "Grape"; // 当前选中的值
String _currentHorizontalSelection = "Grape"; // 水平方向的当前选中值
List<String> _options = ["Apple", "Banana", "Grape", "Cherry", "Peach"]; // 可选项列表
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
children: <Widget>[
SizedBox(height: 16), // 空白间距
Text('默认模式', style: Theme.of(context).textTheme.headline6), // 默认模式标题
WidgetPicker(
value: _currentSelection, // 当前选中的值
options: _options, // 可选项列表
haptics: true, // 是否启用触觉反馈
onChanged: (value) => setState(() => _currentSelection = value), // 值改变时更新状态
),
SizedBox(height: 32), // 空白间距
Row(
mainAxisAlignment: MainAxisAlignment.center, // 居中对齐
children: [
IconButton(
icon: Icon(Icons.remove), // 减号图标
onPressed: () => setState(() {
int index = _options.indexOf(_currentSelection); // 获取当前选中的索引
if (index > 0) {
_currentSelection = _options[index - 1]; // 更新为前一项
}
}),
),
Text('当前选择: $_currentSelection'), // 显示当前选中的值
IconButton(
icon: Icon(Icons.add), // 加号图标
onPressed: () => setState(() {
int index = _options.indexOf(_currentSelection); // 获取当前选中的索引
if (index < _options.length - 1) {
_currentSelection = _options[index + 1]; // 更新为后一项
}
}),
),
),
Divider(color: Colors.grey, height: 32), // 分割线
SizedBox(height: 16), // 空白间距
Text('水平模式', style: Theme.of(context).textTheme.headline6), // 水平模式标题
WidgetPicker(
value: _currentHorizontalSelection, // 当前选中的水平值
options: _options, // 可选项列表
itemHeight: 100, // 每个选项的高度
axis: Axis.horizontal, // 设置为水平方向
onChanged: (value) =>
setState(() => _currentHorizontalSelection = value), // 值改变时更新状态
decoration: BoxDecoration( // 装饰器
borderRadius: BorderRadius.circular(16), // 圆角
border: Border.all(color: Colors.black26), // 边框
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center, // 居中对齐
children: [
IconButton(
icon: Icon(Icons.remove), // 减号图标
onPressed: () => setState(() {
int index = _options.indexOf(_currentSelection); // 获取当前选中的索引
if (index > 0) {
_currentSelection = _options[index - 1]; // 更新为前一项
}
}),
),
Text('当前水平选择: $_currentHorizontalSelection'), // 显示当前水平选中的值
IconButton(
icon: Icon(Icons.add), // 加号图标
onPressed: () => setState(() {
int index = _options.indexOf(_currentSelection); // 获取当前选中的索引
if (index < _options.length - 1) {
_currentSelection = _options[index + 1]; // 更新为后一项
}
}),
),
],
),
],
);
}
}
更多关于Flutter自定义Widget选择插件widgetpicker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义Widget选择插件widgetpicker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
widgetpicker
是一个用于 Flutter 的自定义 Widget 选择插件,它允许用户从一组预定义的 Widget 中选择一个并将其嵌入到应用中。这个插件特别适用于需要在运行时动态选择 Widget 的场景。
安装 widgetpicker
首先,你需要在 pubspec.yaml
文件中添加 widgetpicker
的依赖:
dependencies:
flutter:
sdk: flutter
widgetpicker: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 widgetpicker
1. 导入包
在你的 Dart 文件中导入 widgetpicker
包:
import 'package:widgetpicker/widgetpicker.dart';
2. 创建 WidgetPicker
WidgetPicker
是一个 StatefulWidget
,你可以通过传递一组 Widget
来创建它。用户可以从这组 Widget 中选择一个。
class MyWidgetPicker extends StatefulWidget {
[@override](/user/override)
_MyWidgetPickerState createState() => _MyWidgetPickerState();
}
class _MyWidgetPickerState extends State<MyWidgetPicker> {
Widget? selectedWidget;
final List<Widget> widgets = [
Text('Widget 1'),
Text('Widget 2'),
Text('Widget 3'),
// 添加更多 Widget
];
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
children: [
WidgetPicker(
widgets: widgets,
onSelected: (Widget widget) {
setState(() {
selectedWidget = widget;
});
},
),
SizedBox(height: 20),
if (selectedWidget != null) selectedWidget!,
],
);
}
}
3. 使用 WidgetPicker
在 WidgetPicker
中,你可以传递一组 Widget
,并在用户选择一个 Widget
时通过 onSelected
回调来更新 UI。
4. 自定义 WidgetPicker
WidgetPicker
提供了多个可自定义的选项,例如:
widgets
: 要选择的 Widget 列表。onSelected
: 当用户选择一个 Widget 时的回调。initialIndex
: 初始选择的 Widget 索引。builder
: 自定义选择器的外观。
WidgetPicker(
widgets: widgets,
onSelected: (Widget widget) {
setState(() {
selectedWidget = widget;
});
},
initialIndex: 1,
builder: (BuildContext context, Widget widget, bool isSelected) {
return Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: isSelected ? Colors.blue : Colors.grey[200],
borderRadius: BorderRadius.circular(5),
),
child: widget,
);
},
)
完整示例
以下是一个完整的示例,展示了如何使用 widgetpicker
:
import 'package:flutter/material.dart';
import 'package:widgetpicker/widgetpicker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('WidgetPicker Example')),
body: MyWidgetPicker(),
),
);
}
}
class MyWidgetPicker extends StatefulWidget {
[@override](/user/override)
_MyWidgetPickerState createState() => _MyWidgetPickerState();
}
class _MyWidgetPickerState extends State<MyWidgetPicker> {
Widget? selectedWidget;
final List<Widget> widgets = [
Text('Widget 1'),
Text('Widget 2'),
Text('Widget 3'),
// 添加更多 Widget
];
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
children: [
WidgetPicker(
widgets: widgets,
onSelected: (Widget widget) {
setState(() {
selectedWidget = widget;
});
},
),
SizedBox(height: 20),
if (selectedWidget != null) selectedWidget!,
],
);
}
}