flutter - 在 Flutter 的 PageView 模块中没有正确设置 PageController。弹出职位非空错误
问题描述
我开始使用 Flutter 框架进行编程,并立即注意到出现了一个奇怪的问题(有关更多信息,请参见下文)。
问题发生在以下情况:返回MainScreen
并尝试PageView
通过按下按钮从 中的屏幕切换来更改索引后PageView
,我收到此错误:
[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: 'package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 110 pos 12: '_positions.isNotEmpty': ScrollController not attached to any scroll views.
这是我的主屏幕:
class MainScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => MainScreenState();
}
class MainScreenState extends State<MainScreen> {
PageController _controller;
void _onLoad() {
_controller = PageController();
ShareBloc.getInstance().pageViewIndexStream.listen((index) {
_controller.animateToPage(index,
duration: Duration(milliseconds: 200), curve: Curves.easeInOut);
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_onLoad();
return PageView(
controller: _controller,
physics: NeverScrollableScrollPhysics(),
children: [
FirstScreen(),
SecondScreen(),
],
);
}
}
这是我的RxDart
Sharable
文件:
import 'package:rxdart/rxdart.dart';
class ShareBloc {
static ShareBloc _instance;
BehaviorSubject<dynamic> _subjectCounter;
static ShareBloc getInstance() {
if (_instance == null) _instance = ShareBloc();
return _instance;
}
ShareBloc() {
_subjectCounter = new BehaviorSubject<dynamic>();
}
Stream<dynamic> get getStream => pageViewIndexStream.stream;
void onShare(dynamic data) {
_subjectCounter.sink.add(data);
}
void dispose() {
if (_subjectCounter != null) {
_subjectCounter.close();
_instance = null;
}
}
}
有人可以告诉我我在这里做错了什么吗?
解决方案
为我解决此问题的正确方法是包装此部分:
ShareBloc.getInstance().pageViewIndexStream.listen((index) {
_controller.animateToPage(index,
duration: Duration(milliseconds: 200), curve: Curves.easeInOut);
});
和:
ShareBloc.getInstance().pageViewIndexStream.listen((index) {
if (_controller.hasClients) { // <-- this is the fix!
_controller.animateToPage(index,
duration: Duration(milliseconds: 200), curve: Curves.easeInOut);
}
});
推荐阅读
- javascript - JavaScript 中的回文
- ruby-on-rails - 在 Rails 中将 pdf 上传到亚马逊
- spring - 如果在数据库事务之后的方法中发生异常,则在 Spring 中回滚事务
- dart - Flutter Share 包导致无用错误
- c# - Xamarin.Form FlowListView - 刷新列表时出现 NullReferenceException
- amazon-web-services - AWS SQS 触发 Step Functions
- ios - 可用于日期键的 Swift 编码
- rspec - 在 page.execute_script 中使用包含文本
- machine-learning - 适合短期预测的算法
- excel - 未进行任何更改时,工作簿在关闭时提示更改