如何在没有上下文的情况下使用Flutter定位?

hc8w905p  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(154)

我正在使用flutter_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定位?

ykejflvf

ykejflvf1#

您可以使用本地化的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
}

该类可以在可传递BuildContext的Widget build()中初始化。

@override
Widget build(BuildContext buildContext) {
  Validators(context: buildContext);
  return Scaffold(...);
}

相关问题