Flutter可重排序列表插件reorderable_items_view的使用
Flutter可重排序列表插件reorderable_items_view的使用
Info
此插件主要基于 ReorderableListView
编写。它结合了 <a href="https://api.flutter.dev/flutter/material/ReorderableListView-class.html">ReorderableListView</a>
和 <a href="https://pub.dev/packages/flutter_staggered_grid_view">flutter_staggered_grid_view</a>
,以实现交错GridView的可拖拽功能。
Usage
要使用此插件,在你的 pubspec.yaml
文件中添加 reorderableitemsview
作为依赖项。
dependencies:
reorderableitemsview: ^版本号
Example Staggered GridView
以下是一个交错GridView的示例:
import 'package:flutter/material.dart';
import 'package:reorderableitemsview/reorderableitemsview.dart';
class GridPageView extends StatefulWidget {
@override
_GridPageViewState createState() => _GridPageViewState();
}
class _GridPageViewState extends State<GridPageView> {
List<StaggeredTileExtended> _listStaggeredTileExtended = [
StaggeredTileExtended.count(2, 2),
StaggeredTileExtended.count(2, 1),
StaggeredTileExtended.count(1, 2),
StaggeredTileExtended.count(1, 1),
StaggeredTileExtended.count(2, 2),
StaggeredTileExtended.count(1, 2),
StaggeredTileExtended.count(1, 1),
StaggeredTileExtended.count(3, 1),
StaggeredTileExtended.count(1, 1),
StaggeredTileExtended.count(4, 1),
];
List<Widget> _tiles = [
_Example01Tile(Key("a"),Colors.green, Icons.widgets),
_Example01Tile(Key("b"),Colors.lightBlue, Icons.wifi),
_Example01Tile(Key("c"),Colors.amber, Icons.panorama_wide_angle),
_Example01Tile(Key("d"),Colors.brown, Icons.map),
_Example01Tile(Key("e"),Colors.deepOrange, Icons.send),
_Example01Tile(Key("f"),Colors.indigo, Icons.airline_seat_flat),
_Example01Tile(Key("g"),Colors.red, Icons.bluetooth),
_Example01Tile(Key("h"),Colors.pink, Icons.battery_alert),
_Example01Tile(Key("i"),Colors.purple, Icons.desktop_windows),
_Example01Tile(Key("j"),Colors.blue, Icons.radio),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("交错GridView Demo"),
),
body: ReorderableItemsView(
onReorder: (int oldIndex, int newIndex) {
setState(() {
_tiles.insert(newIndex, _tiles.removeAt(oldIndex));
});
},
children: _tiles,
crossAxisCount: 4,
isGrid: true,
staggeredTiles: _listStaggeredTileExtended,
longPressToDrag: false,
),
);
}
}
class _Example01Tile extends StatelessWidget {
_Example01Tile(Key key, this.backgroundColor, this.iconData): super(key: key);
final Color backgroundColor;
final IconData iconData;
@override
Widget build(BuildContext context) {
return new Card(
color: backgroundColor,
child: new InkWell(
onTap: () {},
child: new Center(
child: new Padding(
padding: EdgeInsets.all(4.0),
child: new Icon(
iconData,
color: Colors.white,
),
),
),
),
);
}
}
Example ListView
以下是一个普通ListView的示例:
import 'package:flutter/material.dart';
import 'package:reorderableitemsview/reorderableitemsview.dart';
class ListPageView extends StatefulWidget {
@override
_ListPageViewState createState() => _ListPageViewState();
}
class _ListPageViewState extends State<ListPageView> {
List<Widget> _tiles = [
_Example01Tile(Key("a"),Colors.green, Icons.widgets),
_Example01Tile(Key("b"),Colors.lightBlue, Icons.wifi),
_Example01Tile(Key("c"),Colors.amber, Icons.panorama_wide_angle),
_Example01Tile(Key("d"),Colors.brown, Icons.map),
_Example01Tile(Key("e"),Colors.deepOrange, Icons.send),
_Example01Tile(Key("f"),Colors.indigo, Icons.airline_seat_flat),
_Example01Tile(Key("g"),Colors.red, Icons.bluetooth),
_Example01Tile(Key("h"),Colors.pink, Icons.battery_alert),
_Example01Tile(Key("i"),Colors.purple, Icons.desktop_windows),
_Example01Tile(Key("j"),Colors.blue, Icons.radio),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("ListView Demo"),
),
body: ReorderableItemsView(
onReorder: (int oldIndex, int newIndex) {
setState(() {
_tiles.insert(newIndex, _tiles.removeAt(oldIndex));
});
},
feedBackWidgetBuilder: (context, index, child) {
return Container(
child: child,
);
},
children: _tiles,
longPressToDrag: false,
),
);
}
}
class _Example01Tile extends StatelessWidget {
_Example01Tile(Key key, this.backgroundColor, this.iconData): super(key: key);
final Color backgroundColor;
final IconData iconData;
@override
Widget build(BuildContext context) {
return new Card(
color: backgroundColor,
child: new InkWell(
onTap: () {},
child: new Center(
child: new Padding(
padding: EdgeInsets.all(4.0),
child: new Icon(
iconData,
color: Colors.white,
),
),
),
),
);
}
}
Options
以下是 ReorderableItemsView
的参数选项:
[@required](/user/required) this.children, // List<Widget>
[@required](/user/required) this.onReorder, // Callback onReorder(int oldIndex, int newIndex)
this.scrollController, // ScrollController
this.scrollDirection = Axis.vertical, // Axis Ignored in GridView
this.padding,
this.staggeredTiles, // Only used in GridView, check gridview example above
this.crossAxisCount = 3, // Only used in GridView
this.isGrid = false, // if true renders as gridview
this.reverse = false,
this.longPressToDrag = true,
this.mainAxisSpacing = 0.0, // Only used in GridView
this.crossAxisSpacing = 0.0, // Only used in GridView
this.feedBackWidgetBuilder,
更多关于Flutter可重排序列表插件reorderable_items_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter可重排序列表插件reorderable_items_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用reorderable_items_view
插件来实现可重排序列表的示例代码。reorderable_items_view
插件本身并不是Flutter官方插件,但假设它是一个提供类似功能的第三方插件。由于具体的第三方插件可能有所不同,这里我会给出一个概念性的示例,展示如何实现类似功能。如果reorderable_items_view
插件的API与这个示例有所不同,请参考该插件的官方文档进行调整。
通常,Flutter提供了内置的ReorderableListView
来实现可重排序列表。这里我会先展示如何使用ReorderableListView
,然后假设reorderable_items_view
插件有类似的API,提供一个概念性的示例。
使用Flutter内置的ReorderableListView
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Reorderable List Example'),
),
body: ReorderableListViewExample(),
),
);
}
}
class ReorderableListViewExample extends StatefulWidget {
@override
_ReorderableListViewExampleState createState() => _ReorderableListViewExampleState();
}
class _ReorderableListViewExampleState extends State<ReorderableListViewExample> {
final List<String> items = List<String>.generate(10, (i) => "Item $i");
@override
Widget build(BuildContext context) {
return ReorderableListView(
items: items,
onReorder: (int oldIndex, int newIndex) {
setState(() {
final String item = items.removeAt(oldIndex);
items.insert(newIndex, item);
});
},
buildItem: (context, index) {
return ListTile(
key: ValueKey('item_${items[index]}'),
title: Text('${items[index]}'),
);
},
);
}
}
假设使用reorderable_items_view
插件的概念性示例
如果reorderable_items_view
插件的API类似于内置的ReorderableListView
,那么使用它可能会是这样的:
import 'package:flutter/material.dart';
import 'package:reorderable_items_view/reorderable_items_view.dart'; // 假设的包路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Reorderable Items View Example'),
),
body: ReorderableItemsViewExample(),
),
);
}
}
class ReorderableItemsViewExample extends StatefulWidget {
@override
_ReorderableItemsViewExampleState createState() => _ReorderableItemsViewExampleState();
}
class _ReorderableItemsViewExampleState extends State<ReorderableItemsViewExample> {
final List<String> items = List<String>.generate(10, (i) => "Item $i");
@override
Widget build(BuildContext context) {
return ReorderableItemsView<String>( // 假设的组件名
items: items,
onReorder: (int oldIndex, int newIndex) {
setState(() {
final String item = items.removeAt(oldIndex);
items.insert(newIndex, item);
});
},
itemBuilder: (context, index, item) {
return ListTile(
key: ValueKey('item_$item'),
title: Text(item),
);
},
);
}
}
注意事项
- 实际插件的使用:由于
reorderable_items_view
不是Flutter官方插件,实际使用时请参考该插件的官方文档和示例代码。 - API差异:如果
reorderable_items_view
的API与ReorderableListView
有很大差异,请确保按照插件的API文档进行调整。 - 依赖管理:确保在
pubspec.yaml
文件中正确添加了对reorderable_items_view
插件的依赖,并运行flutter pub get
来安装它。
希望这个示例能帮助你理解如何在Flutter中实现可重排序列表。如果你使用的是特定的第三方插件,请参考其官方文档进行实现。