Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 未处理的异常ScrollController未附加到任何滚动视图_Flutter_Exception_Scrollview - Fatal编程技术网

Flutter 未处理的异常ScrollController未附加到任何滚动视图

Flutter 未处理的异常ScrollController未附加到任何滚动视图,flutter,exception,scrollview,Flutter,Exception,Scrollview,我总是犯这样的错误,不明白为什么会发生这种情况。该应用程序启动得非常好,但当我尝试登录时,它会阻塞并抛出此错误。有人能告诉我我做错了什么吗 E/flutter ( 3070): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: 'package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 110 pos 12: '_posi

我总是犯这样的错误,不明白为什么会发生这种情况。该应用程序启动得非常好,但当我尝试登录时,它会阻塞并抛出此错误。有人能告诉我我做错了什么吗

E/flutter ( 3070): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: 'package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 110 pos 12: '_positions.isNotEmpty': ScrollController not attached to any scroll views.
[38;5;244mE/flutter ( 3070): #0      _AssertionError._doThrowNew  (dart:core-patch/errors_patch.dart:42:39)[39;49m
[38;5;244mE/flutter ( 3070): #1      _AssertionError._throwNew  (dart:core-patch/errors_patch.dart:38:5)[39;49m
[38;5;244mE/flutter ( 3070): #2      ScrollController.position[39;49m
[38;5;244mE/flutter ( 3070): #3      PageController.animateToPage[39;49m
[38;5;248mE/flutter ( 3070): #4      _PreviewMobilePortraitState.initState.<anonymous closure>[39;49m
[38;5;244mE/flutter ( 3070): #5      _rootRunUnary  (dart:async/zone.dart:1134:38)[39;49m
[38;5;244mE/flutter ( 3070): #6      _CustomZone.runUnary  (dart:async/zone.dart:1031:19)[39;49m
[38;5;244mE/flutter ( 3070): #7      _CustomZone.runUnaryGuarded  (dart:async/zone.dart:933:7)[39;49m
[38;5;244mE/flutter ( 3070): #8      _CustomZone.bindUnaryCallbackGuarded.<anonymous closure>  (dart:async/zone.dart:970:26)[39;49m
[38;5;244mE/flutter ( 3070): #9      _rootRunUnary  (dart:async/zone.dart:1138:13)[39;49m
[38;5;244mE/flutter ( 3070): #10     _CustomZone.runUnary  (dart:async/zone.dart:1031:19)[39;49m
[38;5;244mE/flutter ( 3070): #11     _CustomZone.bindUnaryCallback.<anonymous closure>  (dart:async/zone.dart:954:26)[39;49m
[38;5;244mE/flutter ( 3070): #12     _Timer._runTimers  (dart:isolate-patch/timer_impl.dart:384:19)[39;49m
[38;5;244mE/flutter ( 3070): #13     _Timer._handleMessage  (dart:isolate-patch/timer_impl.dart:418:5)[39;49m
[38;5;244mE/flutter ( 3070): #14     _RawReceivePortImpl._handleMessage  (dart:isolate-patch/isolate_patch.dart:174:12)[39;49m
E/flatter(3070):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:“package:flatter/src/widgets/scroll\u controller.dart”:失败的断言:第110行位置12:“\u positions.isNotEmpty”:ScrollController未附加到任何滚动视图。
[38;5;244mE/颤振(3070):#0#断言错误。(省道:核心补丁/错误(省道:42:39)[39;49米
[38;5;244mE/颤振(3070):#1#断言错误。(飞镖:核心补丁/错误补丁。飞镖:38:5)[39;49米
[38;5;244mE/颤振(3070):#2控制器。位置[39;49m
[38;5;244mE/颤振(3070):#3页控制器。动画网页[39;49m
[38;5;248mE/颤振(3070):#4#u预览移动端口状态。初始状态。[39;49m
[38;5;244mE/flatter(3070):#5#rootrunary(dart:async/zone.dart:1134:38)[39;49m
[38;5;244mE/flatter(3070):#6_CustomZone.runUnary(dart:async/zone.dart:1031:19)[39;49m
[38;5;244mE/颤振(3070):#7_CustomZone.runUnaryGuarded(dart:async/zone.dart:933:7)[39;49m
[38;5;244mE/flatter(3070):#8_CustomZone.bindunarycallbackguared。(dart:async/zone.dart:970:26)[39;49m
[38;5;244mE/颤振(3070):#9#rootrunary(dart:async/zone.dart:1138:13)[39;49m
[38;5;244mE/flatter(3070):#10_CustomZone.runUnary(dart:async/zone.dart:1031:19)[39;49m
[38;5;244mE/flatter(3070):#11_CustomZone.bindUnaryCallback.(dart:async/zone.dart:954:26)[39;49m]
[38;5;244mE/flatter(3070):#12_计时器。_运行计时器(dart:isolate patch/Timer_impl.dart:384:19)[39;49m
[38;5;244mE/flatter(3070):#13_Timer._handleMessage(省道:隔离补丁/定时器_impl.省道:418:5)[39;49m
[38;5;244mE/颤振(3070):#14#RawReceivePortImpl.(飞镖:隔离补丁/隔离补丁。飞镖:174:12)[39;49米
我在PreviewMobilePortraitState中的代码如下所示:

@override
  void initState() {
    super.initState();
    //cycle through pages
    Timer.periodic(Duration(seconds: 4), (Timer timer) {
      if (_currentPage < 3) {
        _currentPage++;
      } else {
        _currentPage = 0;
      }

      _pageController.animateToPage(
        _currentPage,
        duration: Duration(milliseconds: 400),
        curve: Curves.easeInCubic,
      );
    });
  }
@覆盖
void initState(){
super.initState();
//翻页
定时(持续时间(秒:4),(定时){
如果(当前页面<3){
_currentPage++;
}否则{
_currentPage=0;
}
_pageController.animateToPage(
_当前页,
持续时间:持续时间(毫秒:400),
曲线:Curves.easeInCubic,
);
});
}

调用
\u pageController.animateToPage

您可以使用
addPostFrameCallback
并选中
\u pageController.hasClients

代码片段

@override
void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Timer.periodic(Duration(seconds: 4), (Timer timer) {
        if (_currentPage < 3) {
          _currentPage++;
        } else {
          _currentPage = 0;
        }

        if(_pageController.hasClients) {
          _pageController.animateToPage(
            _currentPage,
            duration: Duration(milliseconds: 400),
            curve: Curves.easeInCubic,
          );
        }

      });
    });
}
@覆盖
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback((){
定时(持续时间(秒:4),(定时){
如果(当前页面<3){
_currentPage++;
}否则{
_currentPage=0;
}
if(_pageController.hasClients){
_pageController.animateToPage(
_当前页,
持续时间:持续时间(毫秒:400),
曲线:Curves.easeInCubic,
);
}
});
});
}
正在进行演示以模拟此案例

完整测试代码

import 'package:flutter/material.dart';
import 'dart:async';

class Feature {
  String name;
  Color color;
  String header;
  String subHeader;
  String imgUrl;

  Feature({this.name, this.color, this.header, this.subHeader, this.imgUrl});
}

List<Feature> featuredList = [
  Feature(
      name: "a",
      color: Colors.pink,
      header: "ah",
      subHeader: "a sub",
      imgUrl: "https://picsum.photos/250?image=9"),
  Feature(
      name: "b",
      color: Colors.blue,
      header: "bh",
      subHeader: "b sub",
      imgUrl: "https://picsum.photos/250?image=10"),
  Feature(
      name: "c",
      color: Colors.yellow,
      header: "ch",
      subHeader: "c sub",
      imgUrl: "https://picsum.photos/250?image=11")
];

class WidgetFeatured extends StatefulWidget {
  @override
  _WidgetFeaturedState createState() => _WidgetFeaturedState();
}

class _WidgetFeaturedState extends State<WidgetFeatured> {
  int _currentPage = 0;

  final PageController _pageController = PageController(
    initialPage: 0,
  );

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Timer.periodic(Duration(seconds: 4), (Timer timer) {
        if (_currentPage < 3) {
          _currentPage++;
        } else {
          _currentPage = 0;
        }

        if(_pageController.hasClients) {
          _pageController.animateToPage(
            _currentPage,
            duration: Duration(milliseconds: 400),
            curve: Curves.easeInCubic,
          );
        }

      });
    });
  }

  @override
  void dispose() {
    super.dispose();
    _pageController.dispose();
  }

  _onPageChanged(int index) {
    setState(() {
      _currentPage = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 200,
      child: PageView.builder(
        physics: BouncingScrollPhysics(),
        scrollDirection: Axis.horizontal,
        controller: _pageController,
        onPageChanged: _onPageChanged,
        itemBuilder: (context, index) => WidgetFeaturedItem(index),
        itemCount: featuredList.length,
      ),
    );
  }
}

class WidgetFeaturedItem extends StatelessWidget {
  final int indexItem;

  WidgetFeaturedItem(this.indexItem);

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(20),
      color: featuredList[indexItem].color,
      width: double.infinity,
      height: 180,
      child: Stack(
        children: <Widget>[
          Row(
            children: <Widget>[
              Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text(
                    featuredList[indexItem].header,
                    style: TextStyle(
                      fontSize: 20,
                      fontWeight: FontWeight.bold,
                      color: Colors.white,
                    ),
                  ),
                  Text(
                    featuredList[indexItem].subHeader,
                    style: TextStyle(
                      fontSize: 16,
                      fontWeight: FontWeight.bold,
                      color: Colors.white,
                    ),
                  ),
                  FlatButton(
                    onPressed: () {},
                    padding: const EdgeInsets.symmetric(
                      horizontal: 15,
                      vertical: 3,
                    ),
                    color: Theme.of(context).primaryColor,
                    child: Text(
                      'Order now',
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 12,
                        fontWeight: FontWeight.w100,
                      ),
                    ),
                  ),
                ],
              ),
              Image.network(
                featuredList[indexItem].imgUrl,
                height: 120,
                width: 120,
                //width: 335,
                fit: BoxFit.cover,
              ),
            ],
          )
        ],
      ),
    );
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      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> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(child: WidgetFeatured()),
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“dart:async”;
类特征{
字符串名;
颜色;
字符串头;
字符串副标题;
字符串imgUrl;
功能({this.name,this.color,this.header,this.subHeader,this.imgUrl});
}
列表功能列表=[
特征(
名称:“a”,
颜色:颜色。粉红色,
标题:“啊”,
副标题:"潜艇",,
imgUrl:“https://picsum.photos/250?image=9"),
特征(
名称:“b”,
颜色:颜色,蓝色,
标题:“bh”,
副标题:"b sub",
imgUrl:“https://picsum.photos/250?image=10"),
特征(
名称:“c”,
颜色:颜色,黄色,
标题:“ch”,
副标题:"丙类副标题",
imgUrl:“https://picsum.photos/250?image=11")
];
类WidgetFeatured扩展StatefulWidget{
@凌驾
_WidgetFeaturedState createState()=>\u WidgetFeaturedState();
}
类_WidgetFeaturedState扩展状态{
int _currentPage=0;
最终页面控制器_PageController=PageController(
初始页:0,
);
@凌驾
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback((){
定时(持续时间(秒:4),(定时){
如果(当前页面<3){
_currentPage++;
}否则{
_currentPage=0;
}
if(_pageController.hasClients){
_pageController.animateToPage(
_当前页,
持续时间:持续时间(毫秒:400),
曲线:Curves.easeInCubic,
);
}
});
});
}
@凌驾
无效处置(){
super.dispose();
_pageController.dispose();
}
_onPageChanged(整型索引){
设置状态(){
_currentPage=索引;
});
}
@凌驾
小部件构建(构建上下文){
返回容器(
身高:200,
子项:PageView.builder(
物理:弹跳CrollPhysics(),
滚动方向:轴水平,
控制器:_pageController,
onPageChanged:_onPageChanged,
itemBuilder:(上下文,索引)=>WidgetFeaturedItem(索引),
itemCount:featuredList.length,
),
);
}
}
类WidgetFeaturedItem扩展了无状态小部件{
最终int索引项;
WidgetFeaturedItem(this.indexItem);
@凌驾
小部件构建(构建上下文){
返回容器(
填充:常数边集。全部(20),
颜色:featuredList[indexItem]。颜色,
宽度:double.infinity,
身高:180,
子:堆栈(
儿童:[
划船(
儿童:[
纵队(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(