[英]how to change the displaying order of the Widgets in Column or Row in Flutter
I'm creating a basic chat app, in there I'm using a row widget.我正在创建一个基本的聊天应用程序,在那里我使用了一个行小部件。 The row widget should change the order of displaying the circleavatar.
行小部件应更改显示圆头像的顺序。
I'm able to display that by using bool isme
variable and outputting using the "array if", but I want to know is there any other way to achieve this in a more efficient way.我可以通过使用
bool isme
变量并使用“array if”输出来显示它,但我想知道有没有其他方法可以更有效地实现这一点。
I mean to change the order of the arrangment of the widgets in the row
我的意思是更改行中小部件的排列顺序
and below is what I coded...下面是我编码的......
import 'package:flutter/material.dart';
class ChatBubble extends StatelessWidget {
final String message;
final bool isme;
final String imageUrl;
final Key key;
final String username;
ChatBubble(
this.message,
this.isme,
this.username,
this.imageUrl, {
this.key,
});
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
var hei = size.height;
var wid = size.width;
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: isme ? MainAxisAlignment.end : MainAxisAlignment.start,
children: [
if (isme) customCircleimage(),
Column(
crossAxisAlignment:
isme ? CrossAxisAlignment.end : CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(
right: isme ? 12.0 : 0.0,
left: isme ? 0.0 : 12.0,
),
child: Text(
username,
),
),
Container(
height: hei * 0.1,
width: wid * 0.5,
padding: EdgeInsets.symmetric(
vertical: hei * 0.015,
horizontal: wid * 0.025,
),
margin: EdgeInsets.symmetric(
vertical: hei * 0.0015,
),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.0),
topRight: Radius.circular(20.0),
bottomLeft: !isme ? Radius.zero : Radius.circular(20.0),
bottomRight: isme ? Radius.zero : Radius.circular(20.0),
),
color: isme ? Colors.grey : Colors.pink,
),
child: Text(
message,
softWrap: true,
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
),
),
),
],
),
if (!isme) customCircleimage(),
],
);
}
Widget customCircleimage() {
return CircleAvatar(
backgroundColor: Colors.black,
backgroundImage: NetworkImage(
imageUrl,
),
radius: 25.0,
);
}
}
You just need to toggle the isMe
condition.您只需要切换
isMe
条件。 Have a look in below code.看看下面的代码。
import 'package:flutter/material.dart';
class ChatBubble extends StatelessWidget {
final String message;
final bool isme;
final String imageUrl;
final Key key;
final String username;
ChatBubble(
this.message,
this.isme,
this.username,
this.imageUrl, {
this.key,
});
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
var hei = size.height;
var wid = size.width;
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: isme ? MainAxisAlignment.end : MainAxisAlignment.start,
children: [
if (!isme) customCircleimage(),
Column(
crossAxisAlignment:
isme ? CrossAxisAlignment.end : CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(
right: isme ? 12.0 : 0.0,
left: isme ? 0.0 : 12.0,
),
child: Text(
username,
),
),
Container(
height: hei * 0.1,
width: wid * 0.5,
padding: EdgeInsets.symmetric(
vertical: hei * 0.015,
horizontal: wid * 0.025,
),
margin: EdgeInsets.symmetric(
vertical: hei * 0.0015,
),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.0),
topRight: Radius.circular(20.0),
bottomLeft: !isme ? Radius.zero : Radius.circular(20.0),
bottomRight: isme ? Radius.zero : Radius.circular(20.0),
),
color: isme ? Colors.grey : Colors.pink,
),
child: Text(
message,
softWrap: true,
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
),
),
),
],
),
if (isme) customCircleimage(),
],
);
}
Widget customCircleimage() {
return CircleAvatar(
backgroundColor: Colors.black,
backgroundImage: NetworkImage(
imageUrl,
),
radius: 25.0,
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.