Flutter中使用ChangeNotifierProvider的堆栈溢出错误?

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

我收到以下错误-

I / flutter(18695):抛出以下StackOverflowError,用于构建Consumer(脏,相关性:

I / flutter(18695):[_DefaultInheritedProviderScope]):

I / flutter(18695):堆栈溢出

这似乎与我的使用者中的错误有关。我正在使用提供程序插件尝试为Flutter中的黑暗模式创建切换按钮。

请参见下面的文件-

appstatenotifier.dart

import 'package:flutter/material.dart'; 
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';


ThemeData light = ThemeData(
  brightness: Brightness.light, 
  primarySwatch: Colors.indigo, 
  accentColor: Colors.pink,
  scaffoldBackgroundColor: Color(0xfff1f1f1)
);

ThemeData dark = ThemeData(
  brightness: Brightness.dark, 
  primarySwatch: Colors.indigo, 
  accentColor: Colors.pink,
); 

class ThemeNotifier with ChangeNotifier {
  final String key = "theme"; 
  SharedPreferences prefs; 
  bool _darkTheme; 

  bool get darkTheme => darkTheme; 

  ThemeNotifier() {
    _darkTheme = false; 
  }

  toggleTheme() {
    _darkTheme = !_darkTheme; 
    notifyListeners(); 
  }

}

下面是我与main.dart相关的小部件

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    var themeData = ThemeData(
      primarySwatch: Colors.blue,
    );
    return ChangeNotifierProvider(
      create: (_) => ThemeNotifier(), 
        child: Consumer<ThemeNotifier>(
          builder: (context, ThemeNotifier notifier, child) {
            return MaterialApp(
              theme: notifier.darkTheme ? dark : light,
              title: 'Work Out Log',
              routes: MyApp.routes,
            );
          }
        ),
      );
    }
  }

  Widget buildDrawer(context) {
    return Drawer(
      child: ListView(
        children: <Widget>[
          ListTile(
            title: Text('Dark Theme'),
            trailing: Consumer<ThemeNotifier>(
              builder: (context, notifier, child) => SwitchListTile(
                title: Text("Dark mode"), 
                onChanged: (val) {
                  notifier.toggleTheme(); 
                }, 
                value: notifier.darkTheme,
              ),
            ),
          ),
        ],
      ),
    ); 
  }

任何想法为什么会引发此错误?

flutter dart android-contentprovider
1个回答
0
投票
[正如Viren V Varasadiya所指出的,您为darkTheme所获得的气体是不正确的:
© www.soinside.com 2019 - 2024. All rights reserved.