Flutter:StateError(错误状态:找不到 ProviderScope)

问题描述 投票:0回答:1

我正在尝试同时拥有深色和浅色模式(在我的应用程序只是深色之前)。 我使用 hooks_riverpod: ^2.5.1 在这些模式之间切换。

当我调试时,我发现它抛出 StateError (错误状态:找不到 ProviderScope),因为作用域为空(在 freamework.dart 文件内的静态 ProviderContainer containerOf 中)。

我的主文件: 导入“飞镖:数学”; 导入'包:flutter/material.dart';

import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:video_app/app_theme.dart';
import 'package:video_app/theme_provider.dart';

import 'JoinScreen.dart';
import 'signallingService.dart';

void main() {
  // start videoCall app
   runApp(VideoCallApp());
 }

class VideoCallApp extends HookConsumerWidget {
  VideoCallApp({super.key});

  // signalling server url
  final String websocketUrl2 = "http://10.0.2.2:8000"; //for emulator
  final String websocketUrl = "http://localhost:8000";
  final String websocketUrl3 = "http://192.5.10.8:8000";

   final String selfCallerID =
      Random().nextInt(999999).toString().padLeft(6, '0');
  @override
   Widget build(BuildContext context, WidgetRef ref) {
    final appThemeState = ref.watch(appThemeStateNotifier);
    SignallingService.instance.init(
      websocketUrl: websocketUrl,
      websocketUrl2: websocketUrl2,
      websocketUrl3: websocketUrl3,
      selfCallerID: selfCallerID,
    );
     return MaterialApp(
      darkTheme: AppTheme.darkTheme,
      theme: AppTheme.lightTheme,
      themeMode:
          appThemeState.isDarkModeEnable ? ThemeMode.dark : ThemeMode.light,
      home: JoinScreen(selfCallerId: selfCallerID),
    );
  }
}

和我的 appThemeState 文件: 导入'包:hooks_riverpod/hooks_riverpod.dart'; 导入'包:flutter/material.dart';

final appThemeStateNotifier = ChangeNotifierProvider((ref) => AppThemeState());

class AppThemeState extends ChangeNotifier {
  var isDarkModeEnable = true;

  void setLightTheme() {
    isDarkModeEnable = true;
    notifyListeners();
  }
  void setDarkTheme() {
    isDarkModeEnable = false;
    notifyListeners();
  }
}
flutter riverpod flutter-hooks
1个回答
0
投票

要使提供程序正常工作,您必须在 Flutter 应用程序的根目录中添加 ProviderScope:

void main() {
  runApp(ProviderScope(child: VideoCallApp()));
}
© www.soinside.com 2019 - 2024. All rights reserved.