如何在Flutter中实现带有固定标题的表?

时间:2019-09-26 00:11:57

标签: flutter flutter-dependencies

如何在Flutter中实现具有固定的垂直和水平标题的表?例如,水平标题仅应水平滚动,垂直标题应垂直滚动。两个标题都应始终可见。如何设置布局?

Example

我已经尝试使用带有两个嵌套列的行来设置2x2的整体布局:(0,0)为空; (0,1)垂直标题; (1,0)水平标题和(1,1)数据。为了可视化实际数据,我使用GridViews作为两个标题和数据。而且,我想使用滚动控制器来实现滚动行为。

    1. 列:(0)空,(1)GridView
    2. 列:(0)GridView(1)GridView

我想到的另一种解决方案是嵌套GridView,而不是Row和两列。

此代码显示第一列:

Widget build(BuildContext context) {
    return Container(
      width: double.maxFinite,
      child: Row(
        children: <Widget>[
            Column(
              children: <Widget>[
                Text("empty"), // (0,0)
                Container( // (0, 1)
                  child: Flexible(
                    child: GridView.count(
                      controller: _vScrollController1,
                      crossAxisCount: 1,
                      childAspectRatio: 3.0,
                      children: List.generate(
                        widget.data.length,
                        (index) => Text("my cell")
                      ),
                    ),
                  ),
                ),
              ],
            ),
        ],
      ),
    );

但是,它会产生以下错误消息:

  

════════渲染库捕获到异常
  方法'>'在null上调用。
  接收者:null。   尝试调用:>(1e-10)。   用户创建的导致错误的小部件的祖先是Container。   ═════════════════════════════════

可能某些宽度/高度属性设置不正确?您将如何实现这种表格布局?感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

实际上已有 Flutter 插件可用于此目的。考虑使用一个。

以下是从 enter image description here 中提取的示例:

    Properties properties = System.getProperties();
    properties.setProperty("mail.smtp.host", host);
    Session session = Session.getDefaultInstance(properties);
    //Message[] msg;
    //props.setProperty("mail.store.protocol", "imap");
    //props.setProperty("mail.imap.ssl.enable", "true");
    //props.setProperty("mail.imaps.partialfetch", "false");
    //props.put("mail.mime.base64.ignoreerrors", "true");

    //Session mailSession = Session.getInstance(properties);
    session.setDebug(true);
    Store store = session.getStore("imaps");
    store.connect(host, username, password);


    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_ONLY);

    System.out.println("Total Message:" + folder.getMessageCount());
    System.out.println("Unread Message:" + folder.getUnreadMessageCount());

    Message[] msg =  folder.getMessages();

    for (Message mail : msg) {         

            System.out.println("*********************************");
            System.out.println("MESSAGE : \n");

            System.out.println("Subject: " + mail.getSubject());
            System.out.println("From: " + mail.getFrom()[0]);
            System.out.println("To: " + mail.getAllRecipients()[0]);
            System.out.println("Date: " + mail.getReceivedDate());
            System.out.println("Size: " + mail.getSize());
            System.out.println("Flags: " + mail.getFlags());
            System.out.println("ContentType: " + mail.getContentType());
            //System.out.println("Body: \n" + getEmailBody(mail));    
            System.out.println("*******************************");          

    }
}

实际输出:

table_sticky_headers

您可以检查其他现有插件。

此外,这里有一些与您有关的已回答的 SO 问题:

其他参考,您可以查看博客“{{3}}”