我正在使用flatter_localizations.dart包以不同的语言本地化我的应用程序。通常,我使用S.of(context).wordToLocalize
根据每种语言调用String。
但是,在登录过程中,我没有上下文,所以我不能使用相同的过程。我有以下错误:
未定义的名称'context'。尝试将名称更正为定义或定义名称。
我需要使用它的代码如下
import 'dart:async';
import 'package:aplians_fish/generated/l10n.dart';
class Validators {
final validarEmail = StreamTransformer<String, String>.fromHandlers(
handleData: (email, sink) {
Pattern pattern = r'^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$';
RegExp regExp = new RegExp(pattern);
if (regExp.hasMatch(email)) {
sink.add(email);
} else {
sink.addError('It must be a valid e-mail');
// I would like to change the previous line for S.of(context).validEmail
}
}
);
如何在此代码中调用Flutter本地化?
您可以使用用于本地化的BuildContext初始化Validators
。
class Validators {
Validators({required BuildContext context})
: _context = context;
final BuildContext _context;
// You can now call BuildContext inside Validators like
// AppLocalizations.of(_context).validEmail
}
类可以在Widget build()
中初始化,其中可以传递BuildContext。
@override
Widget build(BuildContext buildContext) {
Validators(context: buildContext);
return Scaffold(...);
}