我正在尝试将可拖动的滚动条放在我的颤抖Form
上,以便网络用户可以单击并拖动到屏幕底部。抖动Scrollbar
类适用于触摸屏设备,不适用于鼠标!
我尝试使用draggable_scrollbar,但是它仅接受ListView
作为孩子。
这是我当前的代码结构:
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My form'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Scrollbar(
child: SingleChildScrollView(
child: Form(...),
),
),
),
);
}
答案 0 :(得分:4)
在可拖动滚动栏中,您可以尝试仅将ListView.builder
与表单一起使用,如下所示。
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My form'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Scrollbar(
child: SingleChildScrollView(
child: DraggableScrollbar.rrect(
controller: myScrollController,
child: ListView.builder(
controller: myScrollController,
itemCount: 1,
itemBuilder: (context, index) {
return Form();
},
),
),
),
),
),
);
}
答案 1 :(得分:1)
使用您已经尝试过的draggable_scrollbar可以实现。这个想法不是用它包装Form
小部件,而是包装它的子项widget
,因为Form
期望有一个子项,所以它可以是一个列表。这是此实时dart-pad中可用的工作示例。
核心思想如下。
Column
之类的TextFormField
表单内容,而不是将其子元素包装在ListView
小部件中,而是将其子元素作为表单字段。ScrollController
的要求创建一个DraggableScrollBar.xyz
,并将其传递给此_myFormScrollController
。_myFormScrollController
传递给ListView
的控制器参数。这应该启用带有滚动条的可滚动表单。
Form(
key: _formKey,
child: DraggableScrollbar.rrect(
controller: _scrollController,
alwaysVisibleScrollThumb: true,
child: ListView(
controller: _scrollController,
children: [
...List<Widget>.generate(15, (i) => TextFormField(
controller: TextEditingController()..text='Field $i',
validator: (value) {
if (value.isEmpty) {
return 'Please enter some text';
}
return null;
},
)),
],
),
),
)
关于飞镖板的一些说明:
TextEditingContorller
创建一个新的TextFormField
。在此示例中,它仅用于装饰目的。MainScreen
小部件中注意:我将可拖动滚动条代码完全复制到了dartpad中,因为目前尚无法在dartpad中导入软件包。 ?♂️