垂直包装在滚动条窗口小部件中的PageView窗口小部件



我正在尝试实现一个垂直排列在一列中的图像列表。我使用PageViewWidget来利用PageChange监听器来指示我当前所在的页面。但是我也在WebView中实现了这一点,所以我需要将其封装在ScrollBar中。尽管Scrollbar正在相应地显示和移动,但如果我使用ScrollBar,它是不可拖动的或不会自动滚动的。有解决办法吗?

您必须为Scrollbar小部件传递controllerPageView小部件的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,
      

您可以设置其他属性,如thicknesshoverthickness,以仅添加滚动条的厚度。有关更多详细信息,请参阅此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'),
)
],
),
);
}
}

最新更新