'_positions.isNotEmpty':ScrollController未附加到任何滚动视图 [英] '_positions.isNotEmpty': ScrollController not attached to any scroll views
问题描述
我在滚动视图控制器中遇到错误.这是错误:
I am getting an error in scroll view controller. Here is error:
flutter: 'package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 149 pos 12: '_positions.isNotEmpty': ScrollController not attached to any scroll views.
我使用了以下代码,并且希望由此生成:
I used following code and I hope due to this it is generating:
return ListView(
controller: _mealScrollController,
children: <Widget>[
Container(
height: screenSize.height * 0.35,
),
WorkWidget(workTime: workTime.morning),
WorkWidget(workTime: workTime.morning),
WorkWidget(workTime: workTime.noon),
WorkWidget(workTime: workTime.evening),
WorkWidget(workTime: workTime.lateevening),
WorkWidget(workTime: workTime.night),
WorkWidget(workTime: workTime.midnight),
Container(
child: Center(
child: RotateWidget(
child: Icon(
Icons.refresh,
size: AppSize.medium,
),
onTap: widget.callBack,
),
),
),
],
);
推荐答案
从您提供的日志来看,错误似乎来自 scroll_controller.dart
,而不是由 List< Widget>
在ListView内.
Judging from the logs you've given, it seems that the error came from scroll_controller.dart
and wasn't caused by List<Widget>
inside ListView.
如果在构建中初始化之前调用ScrollController,我只能复制此行为.如果您可以提供有关如何使用ScrollController的完整的最低限度的复制信息,我们可以看一下.
I can only replicate this behavior if ScrollController is called before being initialized in build. If you can provide a complete minimal repro on how you're using ScrollController, we can take a look at it.
这是一个可以复制行为的示例.
Here's a sample that can replicate the behavior.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var _scrollController = ScrollController();
@override
void initState() {
super.initState();
// Calling _scrollController first without being initialized in the build
// will cause this error: "ScrollController not attached to any scroll views."
debugPrint('This will cause an error ${_scrollController.position.atEdge}');
// I suggest using a listener if you're trying to
// trigger functions on scroll change
_scrollController.addListener(() {
if (_scrollController.position.atEdge) {
if (_scrollController.position.pixels == 0)
print('List scroll at top');
else {
print('List scroll at bottom');
}
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: LayoutBuilder(builder: (context, constraints) {
return ListView.builder(
controller: _scrollController,
itemCount: 10,
itemBuilder: (context, index) {
return Container(
height: constraints.maxHeight * 0.2,
color: index % 2 == 0 ? Colors.blueAccent : Colors.redAccent);
},
);
}),
);
}
}
这篇关于'_positions.isNotEmpty':ScrollController未附加到任何滚动视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!