Compare commits

..

2 Commits
v1.0 ... master

Author SHA1 Message Date
e9f07c63ef after bloc 2020-10-05 17:18:38 +03:00
17804075c8 themetoggle 2020-10-02 15:41:59 +03:00
7 changed files with 163 additions and 20 deletions

13
.vscode/launch.json vendored Normal file
View 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"
}
]
}

View File

@ -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:flutter/material.dart';
import 'package:provider/provider.dart';
import 'route.dart';
enum Operation { enum Operation {
plus, plus,
@ -57,21 +61,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 +249,25 @@ 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: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
},
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(
@ -261,11 +276,12 @@ class _MyHomePageState extends State<MyHomePage> {
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 +382,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),
), ),
), ),
), ),

52
lib/route.dart Normal file
View 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
View 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
View 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();
}
}
}

View File

@ -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"

View File

@ -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: