flutter - 使用多提供者颤振的本地化显示没有此类方法错误
问题描述
当我尝试在颤振中使用提供程序使用本地化时,它没有显示此类方法错误。
我还使用提供商进行身份验证,使用 google 和 fb 以及电子邮件身份验证,但同时我还需要在应用程序中实现本地化,如下所示。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'package:rewahub/AppLanguage.dart';
import 'package:rewahub/locator.dart';
import 'package:rewahub/models/auth_model.dart';
import 'app_localizations.dart';
import 'views/login_page.dart';
import 'views/main_page.dart';
void main() async{
AppLanguagemodel appLanguagemodel = AppLanguagemodel();
await appLanguagemodel.fetchLocale();
setupLocator();
runApp(MyApp(appLanguagemodel:appLanguagemodel,));
}
class MyApp extends StatelessWidget {
final AppLanguagemodel appLanguagemodel;
MyApp({this.appLanguagemodel});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
builder: (_) => appLanguagemodel,
child: Consumer<AppLanguagemodel>(builder: (context, appmodel, child) {
return MaterialApp(
//locale: model.fetchLocale(),
locale: appmodel.appLocal,
supportedLocales: [
Locale('en', 'US'),
Locale('ar', ''),
],
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
home: LogInPage(),
);
}),
),
ChangeNotifierProvider(builder: (_) => locator<AuthModel>()),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
// initialRoute: '/',
//onGenerateRoute: Router.generateRoute,
home: ScreensController(),
),
);
}
}
class ScreensController extends StatelessWidget {
final StreamController<bool> _verificationNotifier =
@override
Widget build(BuildContext context) {
final user = Provider.of<AuthModel>(context);
switch (user.status) {
case Status.Unauthenticated:
// return LanguageSelect();
case Status.Authenticating:
return LogInPage();
case Status.Authenticated:
return MainPage();
default:
return LogInPage();
}
}
}
解决方案
它会像
runApp(MultiProvider(
providers: [
ChangeNotifierProvider.value(value: CurrentData()),
ChangeNotifierProvider.value(value: AppProvider()),
ChangeNotifierProvider.value(value: UserProvider.initialize()),
],
child: Consumer<CurrentData>(
builder: (context, provider, child) => MaterialApp(
debugShowCheckedModeBanner: false,
//title: 'Flutter App Localization with Provider demo',
locale: Provider.of<CurrentData>(context).locale,
home: ScreensController(),
localizationsDelegates: [
const AppLocalizationDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en'),
const Locale('ar'),
const Locale('fr'),
const Locale('es'),
const Locale('ru'),
],
),
),
));
推荐阅读
- bazel - java_toolchain:如何在 Bazel 构建中使用 Eclipse 编译器
- visual-studio - 在 Visual Studio 中没有针对自定义规则命中断点
- regex - 正则表达式匹配 2 个字符 / 和 -
- ruby - Selenium Webdriver 在 Ruby 中找不到“导航”元素
- javascript - 使用 Tailwind 对 Nuxt 进行 Cypress 组件测试
- node.js - 有什么方法可以检查 Mac 上是否安装了防病毒软件并且通过代码是最新的?
- android - 无法在 Android WebView 中更改自定义 res/font
- c# - 如何同时移动两个滚动条
- python - Python - 证书验证失败
- oracle - 更新/插入查询 i 表应该有一个之前/之后的图像语句