如何让我的 LayoutBuilder 在 appbar 下构建项目?
How to make my LayoutBuilder build items under appbar?
基本上,我正在尝试为视频通话屏幕复制 UI 设计,我想
了解如何让照片默认显示
例如,
这是我只给一个人打电话的屏幕
目前我可以通过启动多参与者屏幕后向下滚动来达到我想要的 UI 布局,它将进入 AppBar
body.dart代码:
final List<String> images = const [
"assets/images/girl 1.jpg",
"assets/images/girl 2.jpg",
"assets/images/boy 2.jpg",
"assets/images/boy 1.jpg",
];
Body({
Key key,
this.isMultipleParticipants = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
if (!isMultipleParticipants)
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/girl 1.jpg"),
fit: BoxFit.cover,
),
),
),
if (isMultipleParticipants)
LayoutBuilder(
builder: (context, constraint) {
return new GridView.builder(
itemCount: 4,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: constraint.maxWidth / constraint.maxHeight,
),
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(images[index]),
fit: BoxFit.cover,
),
),
);
},
);
},
),
if (!isMultipleParticipants) buildOwnVideo(),
buildBottomButtons(),
],
);
}
call_screen.dart代码:
class CallScreen extends StatefulWidget {
@override
State<CallScreen> createState() => _CallScreenState();
}
class _CallScreenState extends State<CallScreen> {
bool _isMultiParticipant = false;
@override
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
appBar: buildAppBar(),
body: Body(
isMultipleParticipants: _isMultiParticipant,
),
);
}
AppBar buildAppBar() {
return AppBar(
backgroundColor: Color(0x22000000),
elevation: 0,
title:
Text("Kristin Watson" + (_isMultiParticipant ? " and 4 others" : "")),
actions: [
IconButton(
icon: Icon(_isMultiParticipant
? Icons.person_remove_alt_1_outlined
: Icons.person_add_alt_1_outlined),
onPressed: () {
_toggleMode();
},
)
],
);
}
void _toggleMode() {
setState(() {
_isMultiParticipant = !_isMultiParticipant;
});
}
}
我在胡思乱想时找到了一个适合我的解决方案,我添加了 EdgeInsets.zero
的填充,它解决了我的问题。
多人关联widget构建方法最终代码如下:
Widget buildMultiplePhotos() {
return LayoutBuilder(
builder: (context, constraint) {
return new GridView.builder(
padding: EdgeInsets.zero,
itemCount: 4,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: constraint.maxWidth / constraint.maxHeight,
),
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(images[index]),
fit: BoxFit.cover,
),
),
);
},
);
},
);
}
基本上,我正在尝试为视频通话屏幕复制 UI 设计,我想
了解如何让照片默认显示
例如,
这是我只给一个人打电话的屏幕
目前我可以通过启动多参与者屏幕后向下滚动来达到我想要的 UI 布局,它将进入 AppBar
body.dart代码:
final List<String> images = const [
"assets/images/girl 1.jpg",
"assets/images/girl 2.jpg",
"assets/images/boy 2.jpg",
"assets/images/boy 1.jpg",
];
Body({
Key key,
this.isMultipleParticipants = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
if (!isMultipleParticipants)
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/girl 1.jpg"),
fit: BoxFit.cover,
),
),
),
if (isMultipleParticipants)
LayoutBuilder(
builder: (context, constraint) {
return new GridView.builder(
itemCount: 4,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: constraint.maxWidth / constraint.maxHeight,
),
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(images[index]),
fit: BoxFit.cover,
),
),
);
},
);
},
),
if (!isMultipleParticipants) buildOwnVideo(),
buildBottomButtons(),
],
);
}
call_screen.dart代码:
class CallScreen extends StatefulWidget {
@override
State<CallScreen> createState() => _CallScreenState();
}
class _CallScreenState extends State<CallScreen> {
bool _isMultiParticipant = false;
@override
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
appBar: buildAppBar(),
body: Body(
isMultipleParticipants: _isMultiParticipant,
),
);
}
AppBar buildAppBar() {
return AppBar(
backgroundColor: Color(0x22000000),
elevation: 0,
title:
Text("Kristin Watson" + (_isMultiParticipant ? " and 4 others" : "")),
actions: [
IconButton(
icon: Icon(_isMultiParticipant
? Icons.person_remove_alt_1_outlined
: Icons.person_add_alt_1_outlined),
onPressed: () {
_toggleMode();
},
)
],
);
}
void _toggleMode() {
setState(() {
_isMultiParticipant = !_isMultiParticipant;
});
}
}
我在胡思乱想时找到了一个适合我的解决方案,我添加了 EdgeInsets.zero
的填充,它解决了我的问题。
多人关联widget构建方法最终代码如下:
Widget buildMultiplePhotos() {
return LayoutBuilder(
builder: (context, constraint) {
return new GridView.builder(
padding: EdgeInsets.zero,
itemCount: 4,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: constraint.maxWidth / constraint.maxHeight,
),
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(images[index]),
fit: BoxFit.cover,
),
),
);
},
);
},
);
}