You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DraggableScrollableSheet中使用DraggableScrollableController并解决绑定问题?

解决DraggableScrollableController绑定问题

要让DraggableScrollableController正常工作,必须将它与对应的DraggableScrollableSheet组件绑定,具体操作步骤如下:

  • 创建控制器实例
    在State类中初始化控制器作为成员变量,确保它能在组件生命周期内保持有效引用:

    late final DraggableScrollableController _controller;
    
    @override
    void initState() {
      super.initState();
      _controller = DraggableScrollableController();
      // 可选:监听尺寸变化
      _controller.addListener(() {
        print("当前Sheet尺寸:${_controller.size}");
      });
    }
    
  • 绑定到DraggableScrollableSheet
    这是核心绑定步骤——在构建DraggableScrollableSheet时,将controller参数设置为你创建的实例:

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: DraggableScrollableSheet(
          controller: _controller, // 完成绑定
          initialChildSize: 0.5,
          minChildSize: 0.2,
          maxChildSize: 0.9,
          builder: (context, scrollController) {
            return ListView.builder(
              controller: scrollController,
              itemCount: 20,
              itemBuilder: (context, index) {
                return ListTile(title: Text("Item $index"));
              },
            );
          },
        ),
      );
    }
    
  • 清理资源
    组件销毁时释放控制器,避免内存泄漏:

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

常见误区:如果仅创建控制器但未在DraggableScrollableSheet的controller参数中传入,就会触发"未绑定"提示。绑定完成后,你可以通过_controller.size获取当前Sheet的尺寸,也能调用_controller.animateTo()控制Sheet的滚动位置。

内容的提问来源于stack exchange,提问作者S Sharanya Bharghavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:49:55