gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:44:13 34 4
gpt4 key购买 nike

我收到以下错误 -

I/flutter (18695): The following StackOverflowError was thrown building Consumer(dirty, dependencies:

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

I/flutter (18695): Stack Overflow


这似乎与我的消费者中的错误有关。我正在使用 Provider 插件尝试为 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,
),
),
),
],
),
);
}
知道为什么会抛出这个错误吗?

最佳答案

正如 Viren V Varasadiya 指出的那样,您的 darkTheme setter/getter 不正确:

bool get darkTheme => darkTheme; 

据推测,您打算将其指向 _darkTheme ,但您拥有的是返回自身的 getter。这意味着任何时候调用 darkTheme ,getter 都会查找 darkTheme 的值,这使得 getter 查找 darkTheme 的值,这使得 getter 查找 darkTheme 的值,这使得 getter 查找 darkTheme 的值,这使 setter/getter 查找...(希望你明白)。

您只需要更改 getter 即可返回正确的内容:

bool get darkTheme => _darkTheme; 

关于flutter - 使用 ChangeNotifierProvider 的 Flutter 中的堆栈溢出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60445535/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com