我正在尝试同时拥有深色和浅色模式(在我的应用程序只是深色之前)。 我使用 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 应用程序的根目录中添加 ProviderScope:
void main() {
runApp(ProviderScope(child: VideoCallApp()));
}