Flutter字母列表滚动视图插件alphabet_list_scroll_view的使用
Flutter字母列表滚动视图插件alphabet_list_scroll_view的使用
Alphabet List Scroll View 是一个可自定义的列表视图,带有A-Z侧边栏滚动条,可以快速跳转到选定字符的项目。通过拖动字母来快速滚动浏览列表。
API
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
strList | List | - | 字符串列表 |
itemBuilder | itemBuilder(context, index) | - | 与ListView.builder中的itemBuilder相似 |
highlightTextStyle | TextStyle | false | 高亮显示聚焦的字母框 |
normalTextStyle | Color | Colors.black | 设置聚焦的字母框的颜色 |
showPreview | bool | true | 在屏幕上显示预览 |
keyboardUsage | bool | true | 字母列表将被包装在滚动视图中 |
indexedHeight | double Function(int) | 查询具有索引的小部件的高度 | |
headerWidgetList | List | headers | 头部小部件列表 |
AlphabetScrollListHeader
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
widgetList | List | [] | 小部件列表 |
icon | Icon | 在侧边字母列表和预览中显示的图标 | |
indexedHeaderHeight | double Function(int) | 查询具有索引的头部高度 |
示例图片
完整示例代码
import 'package:alphabet_list_scroll_view/alphabet_list_scroll_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
void main() => runApp(MainApp());
// 随机生成名字
String getRandomName() {
final List<String> preFix = ['Aa', 'bo', 'Ce', 'Do', 'Ha', 'Tu', 'Zu'];
final List<String> surFix = ['sad', 'bad', 'lad', 'nad', 'kat', 'pat', 'my'];
preFix.shuffle();
surFix.shuffle();
return '${preFix.first}${surFix.first}';
}
class User {
final String name;
final String company;
final bool favourite;
User(this.name, this.company, this.favourite);
}
class MainApp extends StatefulWidget {
[@override](/user/override)
_MainAppState createState() => _MainAppState();
}
class _MainAppState extends State<MainApp> {
List<User> userList = [];
List<String> strList = [];
List<Widget> favouriteList = [];
List<Widget> normalList = [];
TextEditingController searchController = TextEditingController();
[@override](/user/override)
void initState() {
// 初始化用户列表
for (var i = 0; i < 26; i++) {
userList.add(User(getRandomName(), getRandomName(), false));
}
for (var i = 0; i < 4; i++) {
userList.add(User(getRandomName(), getRandomName(), true));
}
// 按名字排序
userList.sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
filterList();
searchController.addListener(() {
filterList();
});
super.initState();
}
// 过滤列表
filterList() {
List<User> users = [];
users.addAll(userList);
favouriteList = [];
normalList = [];
strList = [];
if (searchController.text.isNotEmpty) {
users.retainWhere((user) => user.name.toLowerCase().contains(searchController.text.toLowerCase()));
}
users.forEach((user) {
if (user.favourite) {
favouriteList.add(
Slidable(
actionPane: SlidableDrawerActionPane(),
actionExtentRatio: 0.25,
secondaryActions: <Widget>[
IconSlideAction(
iconWidget: Icon(Icons.star),
onTap: () {},
),
IconSlideAction(
iconWidget: Icon(Icons.more_horiz),
onTap: () {},
),
],
child: ListTile(
leading: Stack(
children: <Widget>[
CircleAvatar(
backgroundImage: NetworkImage("https://placeimg.com/200/200/people"),
),
Container(
height: 40,
width: 40,
child: Center(
child: Icon(
Icons.star,
color: Colors.yellow[100],
),
))
],
),
title: Text(user.name),
subtitle: Text(user.company),
),
),
);
} else {
normalList.add(
Slidable(
actionPane: SlidableDrawerActionPane(),
actionExtentRatio: 0.25,
secondaryActions: <Widget>[
IconSlideAction(
iconWidget: Icon(Icons.star),
onTap: () {},
),
IconSlideAction(
iconWidget: Icon(Icons.more_horiz),
onTap: () {},
),
],
child: ListTile(
leading: CircleAvatar(
backgroundImage: NetworkImage("https://placeimg.com/200/200/people"),
),
title: Text(user.name),
subtitle: Text(user.company),
),
),
);
strList.add(user.name);
}
});
setState(() {});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: AlphabetListScrollView(
strList: strList, // 字符串列表
highlightTextStyle: TextStyle( // 高亮文本样式
color: Colors.yellow,
),
showPreview: true, // 显示预览
itemBuilder: (context, index) {
return normalList[index]; // 构建每个列表项
},
indexedHeight: (i) {
return 80; // 每个列表项的高度
},
keyboardUsage: true, // 是否启用键盘操作
headerWidgetList: <AlphabetScrollListHeader>[
AlphabetScrollListHeader(widgetList: [
Padding(
padding: const EdgeInsets.all(16.0),
child: TextFormField(
controller: searchController, // 搜索控制器
decoration: InputDecoration(
border: OutlineInputBorder(),
suffix: Icon(
Icons.search,
color: Colors.grey,
),
labelText: "Search",
),
),
)
], icon: Icon(Icons.search), indexedHeaderHeight: (index) => 80),
AlphabetScrollListHeader(
widgetList: favouriteList, // 收藏列表
icon: Icon(Icons.star),
indexedHeaderHeight: (index) {
return 80; // 收藏列表项的高度
}),
],
),
));
}
}
更多关于Flutter字母列表滚动视图插件alphabet_list_scroll_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter字母列表滚动视图插件alphabet_list_scroll_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 alphabet_list_scroll_view
插件的 Flutter 代码示例。这个插件通常用于创建一个字母列表滚动视图,常用于联系人列表等场景。
首先,确保你已经在 pubspec.yaml
文件中添加了 alphabet_list_scroll_view
依赖:
dependencies:
flutter:
sdk: flutter
alphabet_list_scroll_view: ^最新版本号 # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示了如何使用 alphabet_list_scroll_view
:
import 'package:flutter/material.dart';
import 'package:alphabet_list_scroll_view/alphabet_list_scroll_view.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Alphabet List Scroll View Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AlphabetListViewDemo(),
);
}
}
class AlphabetListViewDemo extends StatefulWidget {
@override
_AlphabetListViewDemoState createState() => _AlphabetListViewDemoState();
}
class _AlphabetListViewDemoState extends State<AlphabetListViewDemo> {
final List<String> contacts = List<String>.generate(
26,
(index) => 'Contact ${String.fromCharCode(65 + index)}',
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Alphabet List Scroll View Demo'),
),
body: AlphabetListScrollView(
// 数据源
items: contacts,
// 获取每个项目的首字母
getSectionIdentifier: (String item) => item[0].toUpperCase(),
// 构建每个项目的 Widget
itemBuilder: (BuildContext context, String item) {
return ListTile(
title: Text(item),
);
},
// 构建每个字母索引的 Widget
sectionHeaderBuilder: (BuildContext context, String section) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
section,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
);
},
),
);
}
}
代码解释:
-
依赖导入:
import 'package:alphabet_list_scroll_view/alphabet_list_scroll_view.dart';
-
数据准备:
final List<String> contacts = List<String>.generate( 26, (index) => 'Contact ${String.fromCharCode(65 + index)}', );
这里我们生成了一个包含26个联系人的列表,每个联系人的名字以字母A到Z开头。
-
AlphabetListScrollView的使用:
AlphabetListScrollView( items: contacts, getSectionIdentifier: (String item) => item[0].toUpperCase(), itemBuilder: (BuildContext context, String item) { return ListTile( title: Text(item), ); }, sectionHeaderBuilder: (BuildContext context, String section) { return Padding( padding: const EdgeInsets.all(8.0), child: Text( section, style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), ); }, )
items
:数据源列表。getSectionIdentifier
:一个函数,用于获取每个项目的首字母作为索引。itemBuilder
:一个函数,用于构建每个项目的Widget。sectionHeaderBuilder
:一个函数,用于构建每个字母索引的Widget。
这个示例展示了如何创建一个简单的字母列表滚动视图,其中每个字母作为索引,每个索引下有一个或多个联系人。你可以根据实际需求进一步自定义和扩展这个示例。