首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振:如何使用DraggableScrollableActuator.reset和来自DraggableScrollableSheet的ScrollController作为嵌套列表?

颤振:如何使用DraggableScrollableActuator.reset和来自DraggableScrollableSheet的ScrollController作为嵌套列表?
EN

Stack Overflow用户
提问于 2020-04-22 07:44:26
回答 1查看 866关注 0票数 1

我得到了这个错误。

代码语言:javascript
复制
The following assertion was thrown building _InheritedResetNotifier(dirty):
flutter: ScrollController attached to multiple scroll views.
flutter: 'package:flutter/src/widgets/scroll_controller.dart':
flutter: Failed assertion: line 111 pos 12: '_positions.length == 1'

看来,我既可以将DraggableScrollableSheet的ScrollController附加到嵌套列表,也可以使用DraggableScrollableActuator.reset(context)重置范围。我不明白为什么我不能两者兼得。这是个虫子吗?周围有工作吗?还是其他方法?

这是我的代码:

代码语言:javascript
复制
class InterfaceSelector extends StatefulWidget {
  @override
  InterfaceSelectorState createState() => InterfaceSelectorState();
}

class InterfaceSelectorState extends State<InterfaceSelector> {
  double initialChildSize = 0.5;
  double minChildSize = 0.5;
  double maxChildSize = 0.7;

  @override
  Widget build(BuildContext context) {
    return DraggableScrollableActuator(
      child: DraggableScrollableSheet(
        initialChildSize: initialChildSize,
        minChildSize: minChildSize,
        maxChildSize: maxChildSize,
        builder: (BuildContext ctx, ScrollController scrollController) {
          return SingleChildScrollView(
            controller: scrollController,
            child: Container(
              height: MediaQuery.of(context).size.longestSide * .7,
              color: Theme.of(ctx).primaryColor,
              child: DefaultTabController(
                length: 4,
                child: Column(
                  children: <Widget>[
                    Material(
                      color: Theme.of(ctx).accentColor,
                      child: TabBar(
                        tabs: [
                          Tab(text: "One"),
                          Tab(text: "Two"),
                          Tab(text: "Three"),
                          Tab(text: "Four"),
                        ],
                      ),
                    ),
                    Expanded(
                      child: TabBarView(
                        children: [
                          One(),
                          Two(),
                          Three(scrollController),
                          Four(),
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

class Three extends StatefulWidget {
  ScrollController scrollController;
  Three(this.scrollController);
  @override
  _ThreeState createState() => _ThreeState();
}

class _ThreeState extends State<Three> with AutomaticKeepAliveClientMixin {
  @override
  bool get wantKeepAlive => true;

  @override
  Widget build(BuildContext context) {
    Stuff stuff = Provider.of<Stuff>(context);
    return Column(
      children: <Widget>[
        MaterialButton(onPressed: () {
          DraggableScrollableActuator.reset(context);
        }),
        Expanded(
          child: GridView.builder(
            controller: widget.scrollController,
            padding: const EdgeInsets.all(10),
            itemCount: stuff.all.length,
            itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
              value: stuff.all[i],
              key: UniqueKey(),
              child: StuffCard(i, stuff.all[i], stuff),
            ),
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
              crossAxisCount: 3,
              crossAxisSpacing: 10,
              mainAxisSpacing: 10,
            ),
          ),
        ),
      ],
    );
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-17 06:34:05

您的GridView不需要滚动-滚动是由您的SingleChildScrollView提供的。不要将scrollController传递给GridView,而是在网格构建器中设置physics: NeverScrollableScrollPhysics(),

代码语言:javascript
复制
GridView.builder(
        physics: NeverScrollableScrollPhysics(),
        padding: const EdgeInsets.all(10),
        itemCount: stuff.all.length,
        itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
          value: stuff.all[i],
          key: UniqueKey(),
          child: StuffCard(i, stuff.all[i], stuff),
        ),
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
          crossAxisSpacing: 10,
          mainAxisSpacing: 10,
        ),
      ),
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61359766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档