Flutter可滚动列表插件scrollable_list的使用
Flutter可滚动列表插件scrollable_list的使用
特性
- 有效的滚动,并且带有活动标签指示。
开始使用
- 安装此包以在底部栏中滚动主内容。
安装
- 添加依赖项:
dependencies:
scrollable_list: ^0.0.2+1
- 导入包:
import 'package:scrollable_list/scrollable_list.dart';
如何使用
- 创建底部菜单列表,包含标题、图标和唯一ID。
- 创建页面内容列表,包含标题、内容和唯一ID。
- 使用
CommonList
结构创建列表。 - 必须为相关的菜单和页面控件使用相同的唯一ID以便于滚动。
截图
示例
class ScrollablePage extends StatelessWidget {
final String title;
ScrollablePage({Key? key, this.title = ""}) : super(key: key);
// 这里我们有用于页面主体的CommonList列表
// 每个common list都有标签、内容、图标和主要部件
final list = <CommonList>[
CommonList(uniqueID: 1, content: "首页", label: "首页", mainWidget: const Content()),
CommonList(uniqueID: 2, content: "搜索页", label: "搜索", mainWidget: const Content()),
CommonList(uniqueID: 3, content: "个人资料页", label: "个人资料", mainWidget: const Content()),
CommonList(uniqueID: 4, content: "设置页", label: "设置", mainWidget: const Content()),
];
// 这里我们有用于底部的CommonList列表
// 可以为每个对象添加图像元素
final bottomList = [
CommonList(uniqueID: 1, content: "", label: "首页", image: "assets/images/home.png", icon: Icons.home),
CommonList(uniqueID: 2, content: "", label: "搜索", icon: Icons.search_rounded, image: "assets/images/search.png"),
CommonList(uniqueID: 3, content: "", label: "个人资料", height: 23, image: "assets/images/user.png", icon: Icons.person),
CommonList(uniqueID: 4, content: "", label: "设置", image: "assets/images/settings.png", icon: Icons.settings),
];
final ScrollController controller = ScrollController();
[@override](/user/override)
Widget build(BuildContext context) {
// 这里我们需要将主体内容和底部内容传递给页面
return SafeArea(
child: ScrollableWidget(
scrollController: controller,
bodyContent: list,
bottomContent: bottomList,
appbar: CustomAppbar(title: title),
selectedColor: Colors.blue,
unSelectedColor: Colors.black38,
),
);
}
}
更多关于Flutter可滚动列表插件scrollable_list的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter可滚动列表插件scrollable_list的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,ScrollableList
并不是一个内置的组件,但你可以使用 ListView
或 CustomScrollView
来实现可滚动列表的功能。ListView
是最常用的可滚动列表组件,它提供了多种构造函数来满足不同的需求。
以下是一些常见的 ListView
使用示例:
1. 使用 ListView.builder
构建动态列表
ListView.builder
适用于需要动态生成大量列表项的场景。它只会构建当前可见的列表项,从而提高了性能。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('ListView.builder Example')),
body: ListView.builder(
itemCount: 100, // 列表项的数量
itemBuilder: (context, index) {
return ListTile(
title: Text('Item $index'),
);
},
),
),
);
}
}
2. 使用 ListView.separated
构建带分隔符的列表
ListView.separated
允许你在列表项之间添加分隔符。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('ListView.separated Example')),
body: ListView.separated(
itemCount: 100,
separatorBuilder: (context, index) => Divider(), // 分隔符
itemBuilder: (context, index) {
return ListTile(
title: Text('Item $index'),
);
},
),
),
);
}
}
3. 使用 ListView.custom
构建自定义列表
ListView.custom
允许你使用 SliverChildDelegate
来完全自定义列表项的构建方式。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('ListView.custom Example')),
body: ListView.custom(
childrenDelegate: SliverChildBuilderDelegate(
(context, index) {
return ListTile(
title: Text('Item $index'),
);
},
childCount: 100,
),
),
),
);
}
}
4. 使用 CustomScrollView
构建复杂的滚动视图
CustomScrollView
允许你将多个可滚动的小部件(如 SliverList
、SliverGrid
等)组合在一起。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('CustomScrollView Example')),
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
title: Text('SliverAppBar'),
background: Image.network(
'https://picsum.photos/200/300',
fit: BoxFit.cover,
),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return ListTile(
title: Text('Item $index'),
);
},
childCount: 100,
),
),
],
),
),
);
}
}