themetoggle
This commit is contained in:
parent
a08ccd526c
commit
3c99363036
@ -1,4 +1,7 @@
|
|||||||
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
|
import 'package:cloudtech_calculator/theme_model.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
enum Operation {
|
enum Operation {
|
||||||
plus,
|
plus,
|
||||||
@ -57,21 +60,17 @@ extension NumbersExtension on num {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() => runApp(ChangeNotifierProvider<ThemeModel>(
|
||||||
runApp(MyApp());
|
create: (BuildContext context) => ThemeModel(), child: MyApp()));
|
||||||
}
|
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
// This widget is the root of your application.
|
// This widget is the root of your application.
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
title: 'Calculator',
|
debugShowCheckedModeBanner: false,
|
||||||
theme: ThemeData(
|
theme: Provider.of<ThemeModel>(context).currentTheme,
|
||||||
primarySwatch: Colors.blue,
|
home: const MyHomePage(title: 'Калькулятор'),
|
||||||
visualDensity: VisualDensity.adaptivePlatformDensity,
|
|
||||||
),
|
|
||||||
home: const MyHomePage(title: 'Calculator'),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -249,10 +248,22 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text(widget.title),
|
title: Text(widget.title,
|
||||||
|
style: TextStyle(color: Theme.of(context).accentColor)),
|
||||||
|
shadowColor: const Color(0x00000000),
|
||||||
|
actions: <Widget>[
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Icons.settings),
|
||||||
|
tooltip: 'Show Snackbar',
|
||||||
|
onPressed: () {
|
||||||
|
Provider.of<ThemeModel>(context, listen: false).toggleTheme();
|
||||||
|
},
|
||||||
|
color: Theme.of(context).accentColor,
|
||||||
|
)
|
||||||
|
],
|
||||||
),
|
),
|
||||||
body: Container(
|
body: Container(
|
||||||
color: const Color(0xFF4b44cf),
|
color: Theme.of(context).primaryColor,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: Column(
|
child: Column(
|
||||||
@ -260,12 +271,13 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.centerRight,
|
alignment: Alignment.centerRight,
|
||||||
child: Text(
|
child: AutoSizeText(
|
||||||
textResh,
|
textResh,
|
||||||
style: const TextStyle(fontSize: 80, color: Colors.white),
|
style: TextStyle(
|
||||||
),
|
fontSize: 70, color: Theme.of(context).accentColor),
|
||||||
),
|
maxLines: 1,
|
||||||
|
)),
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
@ -366,13 +378,14 @@ class CallButton extends StatelessWidget {
|
|||||||
width: 100,
|
width: 100,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
color: const Color(0xE0E0E0E0)),
|
color: const Color(0x00000000)),
|
||||||
child: FlatButton(
|
child: FlatButton(
|
||||||
height: 60,
|
height: 60,
|
||||||
onPressed: () => onPressed(value),
|
onPressed: () => onPressed(value),
|
||||||
child: Text(
|
child: Text(
|
||||||
text,
|
text,
|
||||||
style: TextStyle(fontSize: 40, color: Colors.blue[900]),
|
style:
|
||||||
|
TextStyle(fontSize: 30, color: Theme.of(context).accentColor),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
13
lib/theme.dart
Normal file
13
lib/theme.dart
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
ThemeData darkTheme = ThemeData.dark().copyWith(
|
||||||
|
primaryColor: const Color(0xff131618),
|
||||||
|
accentColor: Colors.white,
|
||||||
|
textTheme: const TextTheme(bodyText2: TextStyle(color: Color(0xffffffff))),
|
||||||
|
);
|
||||||
|
|
||||||
|
ThemeData lightTheme = ThemeData.light().copyWith(
|
||||||
|
primaryColor: Colors.white,
|
||||||
|
accentColor: Colors.green,
|
||||||
|
textTheme: const TextTheme(bodyText2: TextStyle(color: Colors.green)),
|
||||||
|
);
|
||||||
23
lib/theme_model.dart
Normal file
23
lib/theme_model.dart
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'theme.dart';
|
||||||
|
|
||||||
|
enum ThemeType { lightTheme, darkTheme }
|
||||||
|
|
||||||
|
class ThemeModel extends ChangeNotifier {
|
||||||
|
ThemeData currentTheme = darkTheme;
|
||||||
|
ThemeType _themeType = ThemeType.darkTheme;
|
||||||
|
|
||||||
|
void toggleTheme() {
|
||||||
|
if (_themeType == ThemeType.darkTheme) {
|
||||||
|
currentTheme = lightTheme;
|
||||||
|
_themeType = ThemeType.lightTheme;
|
||||||
|
return notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_themeType == ThemeType.lightTheme) {
|
||||||
|
currentTheme = darkTheme;
|
||||||
|
_themeType = ThemeType.darkTheme;
|
||||||
|
return notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
22
pubspec.lock
22
pubspec.lock
@ -8,6 +8,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.0-nullsafety.1"
|
version: "2.5.0-nullsafety.1"
|
||||||
|
auto_size_text:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: auto_size_text
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -88,6 +95,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0-nullsafety.3"
|
version: "1.3.0-nullsafety.3"
|
||||||
|
nested:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: nested
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.0.4"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -95,6 +109,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0-nullsafety.1"
|
version: "1.8.0-nullsafety.1"
|
||||||
|
provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: provider
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.3.2+2"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -158,3 +179,4 @@ packages:
|
|||||||
version: "2.1.0-nullsafety.3"
|
version: "2.1.0-nullsafety.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.10.0-110 <2.11.0"
|
dart: ">=2.10.0-110 <2.11.0"
|
||||||
|
flutter: ">=1.16.0"
|
||||||
|
|||||||
@ -27,7 +27,8 @@ dependencies:
|
|||||||
# The following adds the Cupertino Icons font to your application.
|
# The following adds the Cupertino Icons font to your application.
|
||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
cupertino_icons: ^1.0.0
|
cupertino_icons: ^1.0.0
|
||||||
|
provider: ^4.3.2+2
|
||||||
|
auto_size_text: ^2.1.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user