'_positions.isNotEmpty':ScrollController未附加到任何滚动视图 [英] '_positions.isNotEmpty': ScrollController not attached to any scroll views

查看:126
本文介绍了'_positions.isNotEmpty':ScrollController未附加到任何滚动视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在滚动视图控制器中遇到错误.这是错误:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆