Flutter Web App:类似 Twitter feed 的布局
Flutter Web App: Twitter feed like layout
我是 Flutter 的新手,我正在开发一个网络应用程序(不是 phone 应用程序)。我正在尝试在计算机上创建类似于 Twitter 的布局(不是 phone)。它甚至类似于 Whosebug 本身。您有三列:
第 1 列:左侧有一些基本菜单项
第 2 列:居中且更宽,带有滚动提要
第 3 列:右侧的框中有 features/other 个有用的项目。
在 flutter 中,我见过使用侧边菜单的布局,但它们一直在左侧。他们不坚持中间一列。
我附上了一般骨架的图像。对于我什至从哪里开始,我很乐意提供任何帮助。我看过 SafeArea、Container 等。但由于这是基本布局,我不确定最佳做法是什么,我希望它是一个好的开始。即使我能被指出正确的方向,比如从这个小部件开始等等。我将不胜感激。
我会鼓励计算宽度并根据它更改视口 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 "),
),
)
],
),
),
],
),
);
},
),
),
);
}
我是 Flutter 的新手,我正在开发一个网络应用程序(不是 phone 应用程序)。我正在尝试在计算机上创建类似于 Twitter 的布局(不是 phone)。它甚至类似于 Whosebug 本身。您有三列:
第 1 列:左侧有一些基本菜单项
第 2 列:居中且更宽,带有滚动提要
第 3 列:右侧的框中有 features/other 个有用的项目。
在 flutter 中,我见过使用侧边菜单的布局,但它们一直在左侧。他们不坚持中间一列。
我附上了一般骨架的图像。对于我什至从哪里开始,我很乐意提供任何帮助。我看过 SafeArea、Container 等。但由于这是基本布局,我不确定最佳做法是什么,我希望它是一个好的开始。即使我能被指出正确的方向,比如从这个小部件开始等等。我将不胜感激。
我会鼓励计算宽度并根据它更改视口 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 "),
),
)
],
),
),
],
),
);
},
),
),
);
}