我正在尝试实现一个垂直排列在一列中的图像列表。我使用PageView
Widget来利用PageChange
监听器来指示我当前所在的页面。但是我也在WebView中实现了这一点,所以我需要将其封装在ScrollBar
中。尽管Scrollbar
正在相应地显示和移动,但如果我使用ScrollBar
,它是不可拖动的或不会自动滚动的。有解决办法吗?
您必须为Scrollbar
小部件传递controller
,PageView
小部件的controller
相同。
- 定义页面控制器
final PageController pageController = PageController(initialPage: 0);
- 将
pageController
传递给Scrollbar
小部件的controller
属性。return Scrollbar( controller: pageController, isAlwaysShown: true, // This forces the scrollbar to be visible always child: PageView( scrollDirection: Axis.vertical, controller: pageController,
您可以设置其他属性,如thickness
和hoverthickness
,以仅添加滚动条的厚度。有关更多详细信息,请参阅此youtube视频和文档。
工作演示。也可以在这里作为飞镖垫:
/// Flutter code sample for PageView
// Here is an example of [PageView]. It creates a centered [Text] in each of the three pages
// which scroll horizontally.
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
/// This is the main application widget.
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const MyStatelessWidget(),
),
);
}
}
/// This is the stateless widget that the main application instantiates.
class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final PageController pageController = PageController(initialPage: 0);
return Scrollbar(
controller: pageController,
isAlwaysShown: true,
thickness: 10,
showTrackOnHover: true,
hoverThickness: 15,
radius: Radius.circular(0),
child: PageView(
scrollDirection: Axis.vertical,
controller: pageController,
children: const <Widget>[
Center(
child: Text('First Page'),
),
Center(
child: Text('Second Page'),
),
Center(
child: Text('Third Page'),
)
],
),
);
}
}