flutter_theme_provider 0.0.4 flutter_theme_provider: ^0.0.4 copied to clipboard
A simple theme chenging plugin for flutter made top of provider
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_theme_provider/flutter_theme_provider.dart';
import 'package:provider/provider.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarIconBrightness: Brightness.light,
statusBarColor: Color(0xffbb00),
),
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) =>
ThemeProvider(defaultThemeName: "Light", themes: [
{"Light": ThemeData.light()},
{"Dark": ThemeData.dark()}
])),
],
child: Consumer<ThemeProvider>(
builder: (context, theme, child) => MaterialApp(
home: ThemeChangeScreen(),
theme: theme.getTheme(),
),
),
);
}
}
class ThemeChangeScreen extends StatelessWidget {
const ThemeChangeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home Page"),
),
body: Center(
child: Consumer<ThemeProvider>(
builder: (context, theme, child) => PopupMenuButton<dynamic>(
offset: Offset(100, 0),
child: ListTile(
leading: const Icon(Icons.brush),
title: const Text(
"Theme",
style: TextStyle(fontFamily: "Poppins"),
),
subtitle: Text(
"${theme.getThemeName()}",
style: TextStyle(fontFamily: "Poppins"),
),
trailing: Icon(Icons.edit),
),
itemBuilder: (context) => theme.getThemeNames
.map((item) => PopupMenuItem(
value: item,
child: Text(item),
onTap: () => theme.setTheme(item),
))
.toList(),
),
),
),
);
}
}