为什么在更改应用程序主题时构建函数会出错?
Why am I getting an error in the build function when changing the theme of the application?
下面是我的主文件;
import 'package:flutter/material.dart';
import 'package:ajanda/screens/mainmenu.dart';
Future<void> main() async{
runApp(MaterialApp(
debugShowCheckedModeBanner: false, title: "Takvim", home: MainMenu()));
}
下面的主菜单文件;
import 'package:ajanda/blocs/theme.dart';
import 'package:provider/provider.dart';
//const String testDevice = 'Mobile_id';
class MainMenu extends StatelessWidget {
MainMenu({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<ThemeChanger>(
builder: (_) => ThemeChanger(ThemeData.dark()),
child: new MaterialAppWithTheme(),
);
}
}
class MaterialAppWithTheme extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MainMenuBody(),
);
}
}
class MainMenuBody extends StatefulWidget {
@override
_MainMenuBodyState createState() => _MainMenuBodyState();
}
class _MainMenuBodyState extends State<MainMenuBody> {
....
}
我正在尝试制作一个深色主题,但出现了 2 个错误,我无法解决如果您能提供帮助我会很高兴的原因。我在构建函数中遇到这样的错误。无法将参数类型 'Widget Function (BuildContext)' 分配给参数类型 'Widget Function (BuildContext, Widget)'。另一个类似此错误的问题:return 类型 'ThemeChanger' 不是闭包上下文所要求的 'Widget'。
Theme.dart 下面的文件
import 'package:flutter/material.dart';
class ThemeChanger with ChangeNotifier{
ThemeData _themeData;
ThemeChanger(this._themeData);
getTheme() => _themeData;
setTheme(ThemeData theme){
_themeData= theme;
notifyListeners();
}
}
您需要按照以下步骤操作
import 'package:flutter/material.dart';
final darkTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.black,
brightness: Brightness.dark,
backgroundColor: const Color(0xFF212121),
accentColor: Colors.white,
accentIconTheme: IconThemeData(color: Colors.black),
dividerColor: Colors.black12,
);
final lightTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.white,
brightness: Brightness.light,
backgroundColor: const Color(0xFFE5E5E5),
accentColor: Colors.black,
accentIconTheme: IconThemeData(color: Colors.white),
dividerColor: Colors.white54,
);
供应商class
import 'package:flutter/material.dart';
class ThemeNotifier with ChangeNotifier {
ThemeData _themeData;
ThemeNotifier(this._themeData);
getTheme() => _themeData;
setTheme(ThemeData themeData) async {
_themeData = themeData;
notifyListeners();
}
}
void main() => runApp(
ChangeNotifierProvider<ThemeNotifier>(
builder: (_) => ThemeNotifier(darkTheme),
child: MyApp(),
),
);
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final themeNotifier = Provider.of<ThemeNotifier>(context);
return MaterialApp(
title: 'Chitr',
theme: themeNotifier.getTheme(),
home: HomePage(),
);
}
}
下面是我的主文件;
import 'package:flutter/material.dart';
import 'package:ajanda/screens/mainmenu.dart';
Future<void> main() async{
runApp(MaterialApp(
debugShowCheckedModeBanner: false, title: "Takvim", home: MainMenu()));
}
下面的主菜单文件;
import 'package:ajanda/blocs/theme.dart';
import 'package:provider/provider.dart';
//const String testDevice = 'Mobile_id';
class MainMenu extends StatelessWidget {
MainMenu({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<ThemeChanger>(
builder: (_) => ThemeChanger(ThemeData.dark()),
child: new MaterialAppWithTheme(),
);
}
}
class MaterialAppWithTheme extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MainMenuBody(),
);
}
}
class MainMenuBody extends StatefulWidget {
@override
_MainMenuBodyState createState() => _MainMenuBodyState();
}
class _MainMenuBodyState extends State<MainMenuBody> {
....
}
我正在尝试制作一个深色主题,但出现了 2 个错误,我无法解决如果您能提供帮助我会很高兴的原因。我在构建函数中遇到这样的错误。无法将参数类型 'Widget Function (BuildContext)' 分配给参数类型 'Widget Function (BuildContext, Widget)'。另一个类似此错误的问题:return 类型 'ThemeChanger' 不是闭包上下文所要求的 'Widget'。
Theme.dart 下面的文件
import 'package:flutter/material.dart';
class ThemeChanger with ChangeNotifier{
ThemeData _themeData;
ThemeChanger(this._themeData);
getTheme() => _themeData;
setTheme(ThemeData theme){
_themeData= theme;
notifyListeners();
}
}
您需要按照以下步骤操作
import 'package:flutter/material.dart';
final darkTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.black,
brightness: Brightness.dark,
backgroundColor: const Color(0xFF212121),
accentColor: Colors.white,
accentIconTheme: IconThemeData(color: Colors.black),
dividerColor: Colors.black12,
);
final lightTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.white,
brightness: Brightness.light,
backgroundColor: const Color(0xFFE5E5E5),
accentColor: Colors.black,
accentIconTheme: IconThemeData(color: Colors.white),
dividerColor: Colors.white54,
);
供应商class
import 'package:flutter/material.dart';
class ThemeNotifier with ChangeNotifier {
ThemeData _themeData;
ThemeNotifier(this._themeData);
getTheme() => _themeData;
setTheme(ThemeData themeData) async {
_themeData = themeData;
notifyListeners();
}
}
void main() => runApp(
ChangeNotifierProvider<ThemeNotifier>(
builder: (_) => ThemeNotifier(darkTheme),
child: MyApp(),
),
);
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final themeNotifier = Provider.of<ThemeNotifier>(context);
return MaterialApp(
title: 'Chitr',
theme: themeNotifier.getTheme(),
home: HomePage(),
);
}
}