颤振:无法使用应用栏主题更改应用栏的标题颜色



我正在尝试使用自定义主题来控制我的应用程序的主题,在其他事情中,我为我的应用程序栏设置了颜色。

虽然背景颜色按预期设置,但字体颜色没有设置。原因是什么?

还有,这是设置主题的正确方法吗?我稍后会扩展主题,所以我希望一切都尽可能模块化。

// main.dart
import 'package:flutter/material.dart';
import 'package:note_that/pages/home.dart';
import 'package:note_that/theme/theme.dart';
void main() {
runApp(const NoteThat());
}
class NoteThat extends StatelessWidget {
const NoteThat({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "NoteThat",
theme: ThemeCustom.getThemeData(), // <-- Setting theme here
routes: {"/": (context) => const HomePage()},
);
}
}
// /theme/theme.dart
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class ThemeCustom {
static const Color _primaryColor = Color.fromRGBO(7, 91, 154, 255);
static ThemeData getThemeData() {
return ThemeData(
appBarTheme: const AppBarTheme(
titleTextStyle: TextStyle(color: _primaryColor), // <-- Setting title text color here
backgroundColor: Colors.white),
textTheme: TextTheme(
titleLarge: GoogleFonts.montserrat(),
titleMedium: GoogleFonts.lato(),
titleSmall: GoogleFonts.poppins(),
bodyLarge: GoogleFonts.lato(),
bodyMedium: GoogleFonts.poppins(),
bodySmall: GoogleFonts.poppins(),
labelLarge: GoogleFonts.poppins(),
labelSmall: GoogleFonts.poppins()),
colorScheme: ColorScheme.fromSeed(seedColor: _primaryColor));
}
}
// /pages/home.dart
import "package:flutter/material.dart";
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
titleTextStyle: Theme.of(context).appBarTheme.titleTextStyle, // <-- Accessing title text color here
title: const Text("NoteThat"),
),
);
}
}

我为themeData提供了一个provider包,所以我可以在应用程序中控制暗模式和亮模式,如果你想改变主题(暗和亮),你打算怎么做呢?

import 'package:flutter/material.dart';
class ThemeNotifier extends ChangeNotifier {
bool isLighTheme = false;
void changeTheme() {
isLighTheme = !isLighTheme;
notifyListeners();
}
ThemeData get currentTheme =>
isLighTheme ? ThemeData.light() : ThemeData.dark();
}

main.dart

void main() {
runApp(MultiProvider(
providers: [
Provider(create: (_) => ResourceContext()),
ChangeNotifierProvider<ThemeNotifier>(create: (context) =>ThemeNotifier()) 
],
builder: (context, child) => const MyApp(),
));
}
class MyApp extends StatelessWidget with NavigatorCustom {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: context.watch<ThemeNotifier>().currentTheme,
onUnknownRoute: (settings) {
return MaterialPageRoute(builder: (context) {
return const LottieLearn(); 
});
},
onGenerateRoute: onGenerateRoute,
navigatorKey: NavigatorManager.instance.navigatorGlobalKey,
home: const LoginView(),
);
}
}

* *更新
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(theme: ThemeCustom.getThemeData(), title: 'Material App', home: const HomePage());
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
titleTextStyle: Theme.of(context).appBarTheme.titleTextStyle, // <-- Accessing title text color here
title: const Text("NoteThat"),
),
);
}
}
class ThemeCustom {
static const Color _primaryColor = Colors.black;
static ThemeData getThemeData() {
return ThemeData(
appBarTheme: const AppBarTheme(
titleTextStyle: TextStyle(
color: _primaryColor,
), // <-- Setting title text color here
backgroundColor: Colors.white),
colorScheme: ColorScheme.fromSeed(seedColor: _primaryColor));
}
}

最新更新