首页 > 解决方案 > 5.0.0 迁移后使用提供程序的多提供程序失败

问题描述

我尝试迁移到provider: ^5.0.0并停止工作,采样之前工作的内容。

  @override
  Widget build(BuildContext context) {
    WidgetsFlutterBinding.ensureInitialized();
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<ConfigurationProvider>(create: (context) => ConfigurationProvider(preferences: widget.preloadedFs)),
        ChangeNotifierProvider<ManagerProvider>(create: (context) => ManagerProvider()),
      ],
      child: Builder(builder: (context) {
        ConfigurationProvider config = Provider.of<ConfigurationProvider>(context);
        ThemeData customTheme;
        ThemeData darkTheme;

        darkTheme = config.blackThemeEnabled ? AppTheme.black(config.accentColor) : AppTheme.dark(config.accentColor);
        customTheme = config.darkThemeEnabled ? darkTheme : AppTheme.white(config.accentColor);
        List<Locale> supportedLocales = [];
        supportedLanguages.forEach((element) => supportedLocales.add(Locale(element.languageCode, '')));

        return MaterialApp(
          locale: _locale,
          supportedLocales: supportedLocales,
          localizationsDelegates: [
            FallbackLocalizationDelegate(),
            AppLocalizationsDelegate(),
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
          ],
          localeResolutionCallback: (locale, supportedLocales) {
            for (var supportedLocale in supportedLocales) {
              if (supportedLocale?.languageCode == locale?.languageCode && supportedLocale?.countryCode == locale?.countryCode) {
                return supportedLocale;
              }
            }
            return supportedLocales?.first;
          },
          builder: (context, child) {
            return ScrollConfiguration(
              behavior: CustomScrollBehavior(),
              child: child,
            );
          },
        );
      }),
    );
  }

错误日志

======== Exception caught by widgets library =======================================================
The following ArgumentError was thrown building Builder(dirty, dependencies: [_InheritedProviderScope<ConfigurationProvider>]):
Invalid argument(s) (value): Must not be null

The relevant error-causing widget was: 
  Builder file:///home/sony/flutter-sdk/flutter-app/demo-flutter/lib/main.dart:109:14
When the exception was thrown, this was the stack: 
#0      ArgumentError.checkNotNull (dart:core/errors.dart:185:27)
#1      SharedPreferences._setValue (package:shared_preferences/shared_preferences.dart:146:19)
#2      SharedPreferences.setString (package:shared_preferences/shared_preferences.dart:132:7)
#3      LegacyPreferences.saveAudioDownloadPath (package:demo/internal/legacyPreferences.dart:127:11)
#4      ConfigurationProvider.audioDownloadPath= (package:demo/provider/configurationProvider.dart:165:17)
...
====================================================================================================

======== Exception caught by widgets library =======================================================
The following StateError was thrown building Builder(dirty, dependencies: [_InheritedProviderScope<ConfigurationProvider>]):
Bad state: Tried to read a provider that threw during the creation of its value.
The exception occurred during the creation of type ConfigurationProvider.

The relevant error-causing widget was: 
  Builder file:///home/sony/flutter-sdk/flutter-app/demo-flutter/lib/main.dart:109:14
When the exception was thrown, this was the stack: 
#0      _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:661:7)
#1      _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:544:33)
#2      Provider.of (package:provider/src/provider.dart:289:29)
#3      _MainState.build.<anonymous closure> (package:demo/main.dart:110:49)
#4      Builder.build (package:flutter/src/widgets/basic.dart:7798:48)
...
====================================================================================================

标签: dartflutter-providerdart-pub

解决方案


推荐阅读