如何调用ThemeService themeService = Provider.of(context);在支架的初始状态?

时间:2019-12-09 20:33:58

标签: android flutter flutter-layout

我是新手。我的问题是,如何在支架的初始状态下切换主题?我已经使用provider设置了两个主题,并在按下按钮或设置状态时调用它们。但是我正在寻找更方便的方法,例如在初始状态下更改主题。这是我使用提供程序的主题代码

class ThemeService with ChangeNotifier {
  static final ThemeData themeA =
      ThemeData.light().copyWith(scaffoldBackgroundColor: Colors.black);
  static final ThemeData themeB =
      ThemeData.light().copyWith(scaffoldBackgroundColor: Colors.white);

  ThemeData _currentTheme = themeA;

  get currentTheme => _currentTheme;

  switchToThemeA() {
    _currentTheme = themeA;
    notifyListeners();
  }

  switchToThemeB() {
    _currentTheme = themeB;
    notifyListeners();
  }
}

每次我想更改主题

ThemeService themeService = Provider.of<ThemeService>(context);
themeService.switchToThemeB();

这在按按钮和设置状态时效果很好,但是我无法在初始状态下调用它。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我将查看此答案以获取更多信息:Flutter get context in initState method

本质上,您可以使用didChangeDependencies方法(在initState之后立即调用),或者在initState inside 内部,可以使用以下方法:

void initState() {
  ...
  SchedulerBinding.instance.addPostFrameCallback((_) {
    ThemeService themeService = Provider.of<ThemeService>(context);
  });
  ...
}