Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e9f07c63ef | |||
| 17804075c8 |
13
.vscode/launch.json
vendored
Normal file
13
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "cloudtech_calculator",
|
||||
"request": "launch",
|
||||
"type": "dart"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,4 +1,8 @@
|
||||
import 'package:auto_size_text/auto_size_text.dart';
|
||||
import 'package:cloudtech_calculator/theme_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'route.dart';
|
||||
|
||||
enum Operation {
|
||||
plus,
|
||||
@ -57,21 +61,17 @@ extension NumbersExtension on num {
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
runApp(MyApp());
|
||||
}
|
||||
void main() => runApp(ChangeNotifierProvider<ThemeModel>(
|
||||
create: (BuildContext context) => ThemeModel(), child: MyApp()));
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
// This widget is the root of your application.
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Calculator',
|
||||
theme: ThemeData(
|
||||
primarySwatch: Colors.blue,
|
||||
visualDensity: VisualDensity.adaptivePlatformDensity,
|
||||
),
|
||||
home: const MyHomePage(title: 'Calculator'),
|
||||
debugShowCheckedModeBanner: false,
|
||||
theme: Provider.of<ThemeModel>(context).currentTheme,
|
||||
home: const MyHomePage(title: 'Калькулятор'),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -249,10 +249,25 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
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: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => SecondRoute()),
|
||||
);
|
||||
},
|
||||
color: Theme.of(context).accentColor,
|
||||
)
|
||||
],
|
||||
),
|
||||
body: Container(
|
||||
color: const Color(0xFF4b44cf),
|
||||
color: Theme.of(context).primaryColor,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
@ -260,12 +275,13 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
children: [
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: Text(
|
||||
textResh,
|
||||
style: const TextStyle(fontSize: 80, color: Colors.white),
|
||||
),
|
||||
),
|
||||
alignment: Alignment.centerRight,
|
||||
child: AutoSizeText(
|
||||
textResh,
|
||||
style: TextStyle(
|
||||
fontSize: 70, color: Theme.of(context).accentColor),
|
||||
maxLines: 1,
|
||||
)),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
@ -366,13 +382,14 @@ class CallButton extends StatelessWidget {
|
||||
width: 100,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
color: const Color(0xE0E0E0E0)),
|
||||
color: const Color(0x00000000)),
|
||||
child: FlatButton(
|
||||
height: 60,
|
||||
onPressed: () => onPressed(value),
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(fontSize: 40, color: Colors.blue[900]),
|
||||
style:
|
||||
TextStyle(fontSize: 30, color: Theme.of(context).accentColor),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
52
lib/route.dart
Normal file
52
lib/route.dart
Normal file
@ -0,0 +1,52 @@
|
||||
import 'package:cloudtech_calculator/theme_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SecondRoute extends StatefulWidget {
|
||||
@override
|
||||
_SecondRouteState createState() => _SecondRouteState();
|
||||
}
|
||||
|
||||
class _SecondRouteState extends State<SecondRoute> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text("Настройки калькулятора",
|
||||
style: TextStyle(color: Theme.of(context).accentColor)),
|
||||
shadowColor: const Color(0x00000000),
|
||||
),
|
||||
body: Container(
|
||||
color: Theme.of(context).primaryColor,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: ListView(
|
||||
padding: const EdgeInsets.all(8),
|
||||
children: [
|
||||
ListTile(
|
||||
leading: IconButton(
|
||||
icon: Icon(
|
||||
Icons.settings_display,
|
||||
color: Theme.of(context).accentColor,
|
||||
),
|
||||
onPressed: null),
|
||||
title: Text(
|
||||
"Светлая тема",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).accentColor),
|
||||
),
|
||||
trailing: Switch(
|
||||
value: Theme.of(context).brightness == Brightness.light,
|
||||
onChanged: (value) {
|
||||
Provider.of<ThemeModel>(context, listen: false)
|
||||
.toggleTheme();
|
||||
},
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
15
lib/theme.dart
Normal file
15
lib/theme.dart
Normal file
@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
ThemeData darkTheme = ThemeData(
|
||||
primaryColor: const Color(0xff131618),
|
||||
accentColor: Colors.white,
|
||||
brightness: Brightness.dark,
|
||||
textTheme: const TextTheme(bodyText2: TextStyle(color: Color(0xffffffff))),
|
||||
);
|
||||
|
||||
ThemeData lightTheme = ThemeData(
|
||||
primaryColor: Colors.white,
|
||||
accentColor: Colors.green,
|
||||
brightness: Brightness.light,
|
||||
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"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -88,6 +95,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
nested:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: nested
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.4"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -95,6 +109,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -158,3 +179,4 @@ packages:
|
||||
version: "2.1.0-nullsafety.3"
|
||||
sdks:
|
||||
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.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
cupertino_icons: ^1.0.0
|
||||
|
||||
provider: ^4.3.2+2
|
||||
auto_size_text: ^2.1.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user