我的flutter应用程序具有阿拉伯语的RTL(本地化)支持。 我在屏幕上有一个颤动的屏幕,在列窗口小部件中有一个GridView小部件..它显示的数据绝对适用于英语,但是当我切换到阿拉伯语时根本无法显示。以下是屏幕截图
语言为英语时:
语言切换为阿拉伯语
我的代码是:
class TransactionSummary extends StatelessWidget {
final String name;
final String settlementDate;
final int transactionCount;
final String credit;
final String debit;
final String discount;
TransactionSummary(
{this.name,
this.settlementDate,
this.transactionCount,
this.credit,
this.debit,
this.discount});
@override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
final TextTheme textTheme = theme.textTheme.copyWith(
title: theme.textTheme.title.copyWith(
fontSize: 18.0,
color: kMaximusBlue900,
fontWeight: FontWeight.w600),
subhead: theme.textTheme.subhead
.copyWith(color: Colors.black, fontSize: 16.0),
caption: theme.textTheme.caption
.copyWith(color: theme.hintColor, fontSize: 14.0));
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 24.0),
child: Text(
'$name',
style: textTheme.title,
),
),
Container(
child: Padding(
padding: const EdgeInsets.only(right: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'$settlementDate',
style: TextStyle(fontSize: 12.0),
),
Text(Translations.of(context).settlementDate,
style:
TextStyle(color: theme.hintColor, fontSize: 10.0)),
],
),
),
),
],
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Divider(
color: Colors.grey,
height: 2.0,
),
),
IgnorePointer(
child: GridView.count(
padding: EdgeInsets.only(left: 24.0),
shrinkWrap: true,
crossAxisCount: 2,
childAspectRatio: 2.5,
mainAxisSpacing: 10.0,
crossAxisSpacing: 50.0,
children: [
buildGridViewCell(transactionCount.toString(),
Translations.of(context).transactions, textTheme),
buildGridViewCell(
discount, Translations.of(context).discount, textTheme),
buildGridViewCell(
debit, Translations.of(context).debit, textTheme),
buildGridViewCell(
credit, Translations.of(context).credit, textTheme),
],
))
],
);
}
Widget buildGridViewCell(String data, String caption, TextTheme textTheme) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
data,
style: textTheme.subhead,
),
Text(caption, style: textTheme.caption),
],
);
}
}
GridView代码是否有问题?
答案 0 :(得分:1)
您应该使用EdgeInsetsDirectional类
例如使用代码
EdgeInsetsDirectional.only(end: 8.0)
到而不是
EdgeInsets.only(right: 8.0)
顺便说一句,您还应该使用AlignmentDirectional代替Alignment
答案 1 :(得分:0)
此问题也可以通过在Right中提供相同的填充来解决,
`
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 24.0,right: 24.0),
child: Text(
'$name',
style: textTheme.title,
),
),
Container(
child: Padding(
padding: const EdgeInsets.only(right: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'$settlementDate',
style: TextStyle(fontSize: 12.0),
),
Text(Translations.of(context).settlementDate,
style:
TextStyle(color: theme.hintColor, fontSize: 10.0)),
],
),
),
),
],
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Divider(
color: Colors.grey,
height: 2.0,
),
),
IgnorePointer(
child: GridView.count(
padding: EdgeInsets.only(left: 24.0,right: 24.0),
shrinkWrap: true,
crossAxisCount: 2,
childAspectRatio: 2.5,
children: [
buildGridViewCell(transactionCount.toString(),
Translations.of(context).transactions, textTheme),
buildGridViewCell(
discount, Translations.of(context).discount, textTheme),
buildGridViewCell(
debit, Translations.of(context).debit, textTheme),
buildGridViewCell(
credit, Translations.of(context).credit, textTheme),
],
))
],
);
}
Widget buildGridViewCell(String data, String caption, TextTheme textTheme) {
return Wrap(
direction: Axis.vertical,
children: <Widget>[
Text(
data,
style: textTheme.subhead,
),
Text(caption, style: textTheme.caption),
],
);
}
}
`
还,我不得不删除mainAxisSpacing:10.0, crossAxisSpacing:50.0,