我想以编程方式打开Drawer,而不是滑动它,如何禁用滑动功能(touch 抽屉功能)

推荐答案

  1. 要禁用幻灯片以打开功能,可以将Scaffold上的属性drawerEnableOpenDragGesture设置为false.

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        // this to prevent the default sliding behaviour
        drawerEnableOpenDragGesture: false,
        drawer: Drawer(),
        appBar: AppBar(
          leading: Builder(builder: (context) => // Ensure Scaffold is in context
            IconButton(
              icon: Icon(Icons.menu),
              onPressed: () => Scaffold.of(context).openDrawer()
            ),
          ),
        )
      )
    );
  }
}

  1. 要使用Scaffold.of(context)以编程方式打开抽屉,您必须确保(感谢Krolaw!)发出调用的上下文知道脚手架.

    一个干净的方法是将按钮包装在生成器中.

    scaffold是一个实现material 设计原则的小部件,因此请注意,要能够调用此方法,您需要使用import 'package:flutter/material.dart';,并且您的小部件需要有一个MaterialApp作为祖先.

Codepen demo


与许多Flutter 问题一样,还有其他解决方案可以确保脚手架处于上下文中.

错误消息是Flitter框架的最佳功能之一,请允许我谦虚地建议您始终彻底阅读它们,并探索它们指向的文档.

例如,如果在适当的上下文之外调用openDrawer,就会收到错误消息的一部分:

Scaffold.of() called with a context that does not contain a Scaffold.

从传递给Scaffold.of()的上下文开始,找不到任何Scaffold祖先.当提供的上下文来自与其构建函数实际创建所查找的Scaffold小部件相同的StatefulWidget时,通常会发生这种情况.

有几种方法可以避免此问题.最简单的方法是使用Builder来获取"在"Scaffold下的上下文.有关这方面的示例,请参阅Scaffold.of()的文档: https://api.flutter.dev/flutter/material/Scaffold/of.html

更有效的解决方案是将构建函数拆分为几个小部件.这将引入一个新的上下文,您可以从中获取Scaffold.在此解决方案中,您将有一个外部小部件来创建由新内部小部件的实例填充的Scaffold,然后在这些内部小部件中使用Scaffold.of().

一种不那么优雅但更方便的解决方案是将GlobalKey分配给Scaffold,然后使用key.currentState属性而不是使用Scaffold.of()函数来获取ScaffoldState.

Flutter相关问答推荐

壁炉有序在Flutter

无法在主屏幕视图中设置当前日期容器'

无法将Flutter 连接到Firebase

Dexing时出错.将Flutter 升级到3.19.0后

无法让Riverpod Stream发出新值

如何在2024年使用Ffltter将用户数据保存在云FireStore中?

IsScrollable为True时如何删除Flutter 选项卡栏左侧填充

Flutter 翼future 建造者不断开火和重建.它在每次重建时都会生成一个新的随机数--我如何防止这种情况?

Flutter 蜂巢不能正常工作,我正在使用蜂巢在设备上存储数据,但当我关闭并重新启动应用程序时,我失go 了一切

从.gitignore中排除.fvm/fvm_config.json

在Flutter中为容器实现线性渐变背景动画

无状态小部件被奇怪地重建

如何从 Flutter Slider Widget 中移除发光效果?

Flutter:如何判断嵌套列表是否包含值

如何在 flutter 中制作这种类型的扩展瓦片

Banner Ad.test 广告单元 ID 是否已过时?

如何让多个图标转到不同的网址

将容器扩展到安全区域 - Flutter

带有 Dismissible 和 Provider (NotifyListener) 的笨拙动画

如何在Flutter 中专注于列表视图中最新添加的项目