在 fixedWidth 小部件之间添加可滚动和可刷新的数据表

Posted

技术标签:

【中文标题】在 fixedWidth 小部件之间添加可滚动和可刷新的数据表【英文标题】:Add scrollable and refreshable data table between fixedWidth widgets 【发布时间】:2021-09-27 09:07:10 【问题描述】:

我完全需要一个可滚动的 DataTable,在页眉和页脚固定宽度小部件之间下拉时可以刷新。

我有一个小部件,在我的应用程序的每个页面上使用。这个小部件返回一个带有 appbar 和 body 的 Scaffold,如 column ()。此小部件与其他小部件中的 CommonPage(title, widgetsArrayForBodyColumn) 一样使用。 现在我需要在该正文中使用以下小部件: 查找(用于过滤或例如任何固定高度的小部件) DataTable(用于显示数据) 卡片(显示其他数据)

DataTable 在下拉时应该是可滚动和可刷新的。 我尝试了很多不同的方法,但仍然没有成功。我的最后一个解决方案是使用堆栈,但列表隐藏在卡片旁边。

我不明白如何实现我的目标:在列中的不可滚动小部件之间刷新数据表。

class CommonPage extends StatefulWidget 
  final String title;
  final List<Widget> children;

  const CommonPage(
    Key? key,
    required this.title,
    required this.children,
  ) : super(key: key);

  @override
  Widget build(BuildContext context) 
return Scaffold(
...
body: Column(children: [
FixedHeightWidget(),
PageScreen(),
]);


class PageScreen 
@override
  Widget build(BuildContext context) 
return CommonPage(
        title: Title,
        children: [
        FixedHeightWidget(),
          PageList(),
        ],
      );
    

class PageList 
  Widget build(BuildContext context) 
//TODO Return fixedWidthWidget at top, expandedRefreshableScrollableDataTable, fixedWidthWidget at bottom


我目前的解决方案:(几乎达到了我的目标,但如前所述,卡片隐藏了列表的一部分,无法滚动和检查列表底部):

return Expanded(
              child: Stack(
                children: [
                  RefreshIndicator(
                    onRefresh: onRefresh,
                    child: ListView(
                      children: [
                        listItems.isNotEmpty
                            ? DataTable(...)
                            : Container(),
                      ],
                    ),
                  ),
                  Column(
                    mainAxisSize: MainAxisSize.max,
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Container(
                        alignment: Alignment.bottomCenter,
                        child: Column(
            children: [
              Padding(
                padding: EdgeInsets.symmetric(horizontal: 5),
                child: Card(...),
),
),
                      ),
                    ],
                  ),
                ],
              ),
            );

【问题讨论】:

【参考方案1】:

我找到了解决办法:

return Expanded(
              child: Column(
                children: [
                  Expanded(
                    child: RefreshIndicator(
                      onRefresh: onRefresh,
                      child: ListView(
                        children: [listItems.isNotEmpty
                            ? DataTable(...)
                            : Container(),
                        ],
                      ),
                    ),
                  ),
 Padding(
                padding: EdgeInsets.symmetric(horizontal: 5),
                child: Card(...),
),
                ],
              ),
            );

【讨论】:

以上是关于在 fixedWidth 小部件之间添加可滚动和可刷新的数据表的主要内容,如果未能解决你的问题,请参考以下文章

将多个小部件添加到滚动视图

flutter创建可移动的stack小部件

Flutter中常用的组件-Row

Flutter中常用的组件-Row

如何在小部件中添加垂直滚动条?

如何暗示颤振小部件是可滚动的?