- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想知道是否有人知道/找到了以编程方式使 Flutter 的 DraggableScrollableSheet 展开/折叠的方法。我正在使用他们 Dev channel 的 Flutter 最新版本,这让我可以将它包装在一个
NotificationListener<DraggableScrollableNotification>
然后我可以听听床单展开/折叠的程度。但是,我不清楚如何折叠展开的工作表,反之亦然。
在小部件 src 文件中似乎有一个
DraggableScrollableActuator
公开了一个静态的 .reset 但我不知道/或想不出一种方法来实现它。
最佳答案
基于 Pierre 的回答,我最终实现了一个解决方法,允许我使用 DraggableScrollableActuator
折叠和展开 DraggableScrollableSheet
。
您可以使用 setState
方法更改 initialChildSize
的值,然后使用 DraggableScrollableActuator.reset
方法展开或折叠表。
void toggleDraggableScrollableSheet() {
if (draggableSheetContext != null) {
setState(() {
initialExtent = isExpanded ? minExtent : maxExtent;
});
DraggableScrollableActuator.reset(draggableSheetContext);
}
}
使这项工作重要的是为小部件折叠和展开时提供不同的 Key
。这将产生 2 个 _DraggableScrollableSheetState
实例 - 一个可以重置为折叠状态,另一个可以重置为展开状态。
DraggableScrollableActuator(
child: DraggableScrollableSheet(
key: Key(initialExtent.toString()),
minChildSize: minExtent,
maxChildSize: maxExtent,
initialChildSize: initialExtent,
builder: draggableScrollableSheetBuilder,
),
)
编辑:
工作示例:
import 'package:flutter/material.dart';
void main() async {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const List<Color> colors = [
Colors.red,
Colors.green,
Colors.blue,
];
static const double minExtent = 0.2;
static const double maxExtent = 0.6;
bool isExpanded = false;
double initialExtent = minExtent;
BuildContext draggableSheetContext;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: _buildBody(),
),
);
}
Widget _buildBody() {
return InkWell(
onTap: _toggleDraggableScrollableSheet,
child: DraggableScrollableActuator(
child: DraggableScrollableSheet(
key: Key(initialExtent.toString()),
minChildSize: minExtent,
maxChildSize: maxExtent,
initialChildSize: initialExtent,
builder: _draggableScrollableSheetBuilder,
),
),
);
}
void _toggleDraggableScrollableSheet() {
if (draggableSheetContext != null) {
setState(() {
initialExtent = isExpanded ? minExtent : maxExtent;
isExpanded = !isExpanded;
});
DraggableScrollableActuator.reset(draggableSheetContext);
}
}
Widget _draggableScrollableSheetBuilder(
BuildContext context,
ScrollController scrollController,
) {
draggableSheetContext = context;
return SingleChildScrollView(
controller: scrollController,
child: Column(
children: colors
.map((color) => Container(
height: 200,
width: double.infinity,
color: color,
))
.toList(),
),
);
}
}
关于Flutter DraggableScrollableSheet - 如何以编程方式展开/折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820661/
我正在尝试使用 2 个嵌套的可滚动列表来实现 DraggableScrollableSheet。 我不能使用开箱即用的 NestedScrollView 类(我已经尝试过了,但我无法让它工作,因为
寻求有关可拖动可滚动工作表的帮助。 Atm 如果你向上轻弹工作表,滚动会立即激活,如果你用力轻弹,列表会滚动直到动力停止。但我想要的是一个示例,其中当您向上轻弹时列表不会滚动并且工作表只是捕捉到顶部,
在 flutter 中,我们有一个小部件 DraggableScrollableSheet .现在我想要 child 在拖动时的当前位置或当前大小。目前无法获得该值。它在其 builder 方法中提供
点击后,我执行以下功能,该功能应该使 Bottom Sheet 以通常的方式出现(从底部向上滚动): showModalBottomSheet( context: context,
我想在我的应用程序上使用 DraggableScrollableSheet 小部件,当我像下面的代码一样使用它时,可以毫无问题地显示: class HomePage extends Stateless
我想在按下某个按钮时更改 DraggableScrollableSheet 的高度。到目前为止,这就是我所拥有的 ..other code up here... double _sheetSize
我正在我的 flutter 应用程序中实现 DraggableScrollableSheet 并希望有一个粘性标题,即只有 ListView 滚动并且工作表的顶部始终保持原位。 我的小部件如下所示:
在下面的代码中,我想动画化更改 DraggableScrollableSheet 边框半径,然后实现粘在屏幕顶部,例如 AppBar,为此实现了动画更改边框半径,但它不起作用,我收到此错误: 错误:
当我使用 DraggableScrollableSheet 时,我遇到了一些问题,它们是: 拖到底部后如何设置最小高度 如何设置最小高度 如何设置最大高度 我怎么知道像坚持 appBar 一样坚持到顶
在我的应用程序中有一个 DraggableScrollableSheet 和一个 FAB。如果展开 DraggableScrollableSheet,我希望 FAB 不可见。我需要检查扩展事件 我尝试
我想知道是否有人知道/找到了以编程方式使 Flutter 的 DraggableScrollableSheet 展开/折叠的方法。我正在使用他们 Dev channel 的 Flutter 最新版本,
当我按下特定按钮并使用 DraggableScrollableSheet 时,我尝试制作一个弹出式卡片,因为我希望它开始最小化,然后用户可以将其向上拖动以最大化它。所以问题是有什么方法可以在用户按下后
将 SliverAppBar 添加到 DraggableScrollableSheet 后,我无法将工作表向上或向下滚动到屏幕,但 SliverAppbar 内的列表工作正常, 完整源代码: impo
我想阻止我的 DraggableScrollableSheet 内部滚动,同时仍然能够上下拖动它。有没有办法做到这一点?我使用过bottomSheet,但无法上下拖动它们。 我想远离第三方代码,所以如
我正在研究您可以在下面的屏幕截图中看到的概念: design concept 注意:箭头不是 UI 的一部分,而是添加来演示可拖动功能。 屏幕有一个显示位置标题的 SliverAppBar,包含位置描
我是 flutter 新手。我正在尝试添加一个小 handle 来提示用户像谷歌地图一样拖动。但是,如果我在上面放置一个单独的容器来显示为 handle ,则当用户触摸它时将不会有拖动效果。我明白这是
我是一名优秀的程序员,十分优秀!