Flutter Web App:类似 Twitter 的布局

Posted

技术标签:

【中文标题】Flutter Web App:类似 Twitter 的布局【英文标题】:Flutter Web App: Twitter feed like layout 【发布时间】:2022-01-06 02:56:58 【问题描述】:

我是 Flutter 的新手,我正在开发一个网络应用程序(不是一个电话应用程序)。我正在尝试在计算机(不是电话)上创建类似于 Twitter 的布局。它甚至类似于 *** 本身。您有三列:

第 1 列:左侧是一些基本菜单项

第 2 列:居中且更宽,带有滚动提要

第 3 列:右侧的方框中包含功能/其他有用的项目。

使用颤振,我已经看到使用侧边菜单的布局,但它们一直在左侧。他们不坚持中间列。

我附上了一张一般骨架的图片。我很想得到任何关于我从哪里开始的帮助。我看过 SafeArea、Container 等。但由于这是基本布局,我不确定最佳实践是什么,我希望这是一个好的开始。即使我可以指出正确的方向,比如从这个小部件开始等等。我会很感激的。

【问题讨论】:

【参考方案1】:

我会鼓励计算宽度并根据它更改视口like I used to

 Widget build(BuildContext context) 
    return Scaffold(
      backgroundColor: Colors.deepOrange, // for  screen background
      body: Center(
        child: LayoutBuilder(
          builder: (context, constraints) 
            final maxWidth = constraints.maxWidth;

            return SizedBox(
              width: maxWidth * .8, //max viewPort
              child: Row(
                children: [
                  Container(
                    width: maxWidth * .2, //left part
                    color: Colors.blue,
                    child: Column(
                      crossAxisAlignment:
                          CrossAxisAlignment.start, // for alignment
                      children: [
                        ...List.generate(
                          8,
                          (index) => SizedBox(
                            height: 40,
                            child: Text("menu item $index "),
                          ),
                        )
                      ],
                    ),
                  ),
                  Expanded(
                    child: Container(
                        color: Colors.pinkAccent,
                        child: CustomScrollView(
                          slivers: [
                            SliverList(
                              // prefer builder
                              delegate: SliverChildListDelegate(
                                [
                                  ...List.generate(
                                    44,
                                    (index) => SizedBox(
                                      height: 100,
                                      child: Text("Body Element $index "),
                                    ),
                                  )
                                ],
                              ),
                            )
                          ],
                        )),
                  ),
                  Container(
                    width: maxWidth * .2, //right part features
                    color: Colors.deepPurple,
                    child: Column(
                      children: [
                        ...List.generate(
                          4,
                          (index) => SizedBox(
                            height: 40,
                            child: Text("features item $index "),
                          ),
                        )
                      ],
                    ),
                  ),
                ],
              ),
            );
          ,
        ),
      ),
    );
  

【讨论】:

所以基本上你使用 SizedBox 来分配“可绘制区域”和 LayoutBuilder,它给出了窗口的大小?那么如果我改变窗口的大小,我应该可以改变布局? 还有你所说的评论“更喜欢滚动小部件中的构建器”是什么意思? 是的,使用SizedBox来分配“可绘制区域”并且首选SliverChildBuilderDelegate 非常感谢!尝试了您的构建方法,它似乎给了我开始的布局。非常感谢! 嘿,我在使用滚动视图时确实遇到了异常 - 引发了另一个异常:提供的 ScrollController 当前附加到多个 ScrollPosition 对此有什么想法吗?

以上是关于Flutter Web App:类似 Twitter 的布局的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 网站上展示广告(flutter web app)

为啥Flutter开发APP性能最接近原生,前端程序员请关注

Flutter App to Web 通过 Github 页面黑屏

如何从存储中选择多个图像并在 Flutter 和 Flutter Web App 中显示? [关闭]

是否可以在 Flutter Web 和 Flutter App 中实现 Agora Video Call?

Flutter 上传带有进度条的大文件。 App 和 Web 都支持