Было выброшено следующее исключение ProviderNotFoundException при создании Wrapper (грязное): Ошибка: не удалось найти правильный Provider<User> над этим виджетом Wrapper.

avatar
Michael
8 августа 2021 в 23:25
155
0
0

Я получаю эти ошибки. Я пробовал несколько вещей в течение нескольких дней, и я полностью потерян. Пожалуйста, любые предложения будут очень признательны. Я был бы рад добавить больше кода, если это необходимо.

The following ProviderNotFoundException was thrown building Wrapper(dirty):
Error: Could not find the correct Provider<User> above this Wrapper Widget

Это мой main.dart:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamProvider(
      create: (_) => AuthService().user,
      initialData: AuthService().user,
      child: MaterialApp(
        home: Wrapper(), // <-- "The relevant error-causing widget"
        debugShowCheckedModeBanner: false,
      ),
    );
  }
}

Мой класс пользователя:

class User {
  final String? uid;

  User({this.uid});
}

Моя оболочка:

class Wrapper extends StatelessWidget {
  ThemeData lightTheme(color) {
    return ThemeData(
      brightness: Brightness.light,
      primaryColor: color,
      primaryColorDark: color,
      primarySwatch: color,
      accentColor: color[400], textSelectionTheme: TextSelectionThemeData(selectionHandleColor: color),
//      scaffoldBackgroundColor: UIHelper.WHITE,
    );
  }

  ThemeData darkTheme(color) {
    return ThemeData(
      brightness: Brightness.dark,
      primaryColor: color,
      primaryColorDark: color,
      primarySwatch: color,
      accentColor: UIHelper.WHITE, textSelectionTheme: TextSelectionThemeData(selectionHandleColor: color),
    );
  }

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    print(user);
    // return Home or Authenticate widget
    if (user == null) {
      return Authenticate();
    } else {
      return ChangeNotifierProvider(
        create: (_) => ThemeNotifier(),
        child: Consumer<ThemeNotifier>(
          builder: (context, ThemeNotifier notifier, child) {
            return MaterialApp(
              title: 'Dashboard',
              theme: notifier.darkTheme
                  ? darkTheme(convertToSwatch(notifier.mainColor.value))
                  : lightTheme(convertToSwatch(notifier.mainColor.value)),
              debugShowCheckedModeBanner: false,
              home: AnnotatedRegion<SystemUiOverlayStyle>(
                value: SystemUiOverlayStyle(
                  statusBarColor: Colors.transparent,
                ),
                child: Splash(),
              ),
            );
          },
        ),
      );
    }
  }
}

Я пытался перейти на ненулевую безопасность, и теперь я изо всех сил пытаюсь загрузить первый экран. На данный момент приложение совершенно бесполезно.

Источник

Ответы (0)