我正在尝试利用 iOS 功能,当点击状态栏时,滚动视图会滚动到顶部。
我正在使用 ListView,根据文档,主要属性决定了此行为,但我需要使用 ScrollController 初始化 ListView,并引发错误:
'package:flutter/src/widgets/scroll_view.dart': 断言失败:第 62 行 pos 15: '!(controller != null && Primary == true)'
我有一个选项卡式应用程序,每个选项卡上都有一个 ListView,因此我需要显式创建 ScrollController 对象并使用它们来初始化 ListView 对象。
PrimaryScrollController 小部件可能允许我将 ScrollController 指定为主要的,但我找不到任何使用它的示例。更具体地说,我不明白 PrimaryScrollController 的 child 属性需要是什么。PrimaryScrollController 的使用示例将非常有帮助。
PrimaryScrollController 使用 ScrollView 标识屏幕上小部件的控制器。即使没有将 ScrollController 设置为 ListView 的控制器。
下面是从 ListView 底部滚动到顶部的示例。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
),
);
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sample Scroll'),
),
body: Center(
/// No controller configured
child: ListView.builder(
itemCount: 20,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Container(
height: 50.0,
padding: EdgeInsets.all(16.0),
child: Text('Item $index'),
),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
var controller = PrimaryScrollController.of(context);
controller!.animateTo(controller.position.minScrollExtent,
duration: Duration(seconds: 2), curve: Curves.ease);
},
child: Icon(Icons.add),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用ScrollController,则需要配置在ListView上。
class _MyHomePageState extends State<MyHomePage> {
var scrollController = ScrollController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sample Scroll'),
),
body: Center(
child: ListView.builder(
/// Configure ListView controller
controller: scrollController,
itemCount: 20,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Container(
height: 50.0,
padding: EdgeInsets.all(16.0),
child: Text('Item $index'),
),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
scrollController.animateTo(scrollController.position.minScrollExtent,
duration: Duration(seconds: 2), curve: Curves.ease);
},
child: Icon(Icons.add),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6914 次 |
| 最近记录: |