问题:
适配阿拉伯语需要考虑 RTL(Right-to-Left)布局、文本方向 和 文化差异 等适配问题,其中包括侧滑返回方向,阿拉伯语书写方向是从右到左的,侧滑返回时方向也需要从右到左侧滑返回。
正常情况下,多语言切换语种为阿拉伯语后,正常能切换侧滑方向的:
Get.updateLocale(Locale("ar"));
但是切换后一直无效,侧滑方向还是从左到右,排查了很久都没找到问题,
排查
通过不断注释代码才找到问题所在:
GetMaterialApp(
debugShowCheckedModeBanner: false,
initialBinding: BindingsBuilder(
() {
},
),
getPages: routes,
initialRoute: launch,
builder: (context, Widget? widget) {
/// 问题在这里
var easyBuilder = EasyLoading.init();
var widgetEasyLoading = easyBuilder(context, widget);
return FToastBuilder()(context, widgetEasyLoading);
},
navigatorKey: navigatorKey,
navigatorObservers: [],
);
注释掉builder代码后正常了,排查发现 FToastBuilder()这段代码有问题,查看源码如下:
TransitionBuilder FToastBuilder() {
return (context, child) {
return _FToastHolder(
child: child!,
);
};
}
class _FToastHolder extends StatelessWidget {
const _FToastHolder({Key? key, required this.child}) : super(key: key);
final Widget child;
@override
Widget build(BuildContext context) {
final Overlay overlay = Overlay(
initialEntries: <OverlayEntry>[
OverlayEntry(
builder: (BuildContext ctx) {
return child;
},
),
],
);
return Directionality(
textDirection: TextDirection.ltr,
child: overlay,
);
}
}
原来是FToastBuilder源码中写死了对齐方式。被坑死了...
最后注释掉该代码即可。