首页 > 解决方案 > 使用多提供者颤振的本地化显示没有此类方法错误

问题描述

当我尝试在颤振中使用提供程序使用本地化时,它没有显示此类方法错误。

我还使用提供商进行身份验证,使用 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();
    }
  }
}

标签: flutterdartlocalizationprovider

解决方案


它会像

  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'),
     ],
   ),
 ),
 ));

推荐阅读