Compare commits

..

No commits in common. "dev" and "master" have entirely different histories.
dev ... master

23 changed files with 335 additions and 629 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,94 +0,0 @@
import 'dart:async';
import 'package:cloudtech_calculator/extension.dart';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'getcalc_event.dart';
part 'getcalc_state.dart';
class CalcEventBloc extends Bloc<CalcEvent, CalcEventState> {
CalcEventBloc() : super(const EmptyState());
@override
Stream<CalcEventState> mapEventToState(
CalcEvent event,
) async* {
num a;
num b;
final lastState = state;
if (event is NumberEvent) {
if (lastState is EmptyState) {
yield FirstState(a: event.value);
} else if (lastState is FirstState) {
a = lastState.a.concat(pointer: false, value: event.value);
yield FirstState(a: a);
} else if (lastState is OperatorState &&
lastState.pointStatus == true &&
lastState.operator == Operator.point &&
lastState.b == null) {
a = lastState.a.concat(pointer: true, value: event.value);
yield FirstState(a: a);
} else if (lastState is OperatorState &&
lastState.operator != Operator.point &&
lastState.b == null) {
yield SecondState(
a: lastState.a, b: event.value, operator: lastState.operator);
} else if (lastState is SecondState && lastState.b != null) {
b = lastState.b.concat(pointer: false, value: event.value);
yield SecondState(a: lastState.a, b: b, operator: lastState.operator);
} else if (lastState is OperatorState && lastState.b != null) {
b = lastState.b.concat(pointer: true, value: event.value);
yield SecondState(a: lastState.a, b: b, operator: lastState.operator);
}
} else if (event is PlusOperationEvent) {
yield OperatorState(a: (state as FirstState).a, operator: Operator.plus);
} else if (event is MinusOperationEvent) {
yield OperatorState(a: (state as FirstState).a, operator: Operator.minus);
} else if (event is DivisionOperationEvent) {
yield OperatorState(a: (state as FirstState).a, operator: Operator.div);
} else if (event is MultiOperationEvent) {
yield OperatorState(a: (state as FirstState).a, operator: Operator.multi);
} else if (event is PointOperationEvent) {
if (lastState is FirstState) {
yield OperatorState(
a: lastState.a, operator: Operator.point, pointStatus: true);
} else if (lastState is SecondState) {
yield OperatorState(
a: lastState.a,
b: lastState.b,
operator: lastState.operator,
pointStatus: true);
}
} else if (event is PercentOperationEvent) {
if (lastState is FirstState) {
a = lastState.a / 100;
yield FirstState(a: a);
} else if (lastState is SecondState) {
b = lastState.b / 100;
yield SecondState(a: lastState.a, b: b, operator: lastState.operator);
}
} else if (event is PlusMinusOperationEvent) {
if (lastState is FirstState) {
a = lastState.a * (-1);
yield FirstState(a: a);
} else if (lastState is SecondState) {
b = lastState.b * (-1);
yield SecondState(a: lastState.a, b: b, operator: lastState.operator);
}
} else if (event is BackspaceOperationEvent) {
if (lastState is FirstState) {
a = lastState.a.backspace();
yield FirstState(a: a);
} else if (lastState is SecondState) {
b = lastState.b.backspace();
yield SecondState(a: lastState.a, b: b, operator: lastState.operator);
}
} else if (event is ClearAllOperationEvent) {
yield const EmptyState();
} else if (event is ResultOperationEvent) {
if (lastState is SecondState) {
yield FirstState(
a: operationEvent(lastState.a, lastState.b, lastState.operator));
}
}
}
}

View File

@ -1,29 +0,0 @@
part of 'getcalc_bloc.dart';
@immutable
abstract class CalcEvent {}
class NumberEvent extends CalcEvent {
final int value;
NumberEvent(this.value);
}
class PlusOperationEvent extends CalcEvent {}
class MinusOperationEvent extends CalcEvent {}
class DivisionOperationEvent extends CalcEvent {}
class MultiOperationEvent extends CalcEvent {}
class PointOperationEvent extends CalcEvent {}
class PercentOperationEvent extends CalcEvent {}
class PlusMinusOperationEvent extends CalcEvent {}
class BackspaceOperationEvent extends CalcEvent {}
class ClearAllOperationEvent extends CalcEvent {}
class ResultOperationEvent extends CalcEvent {}

View File

@ -1,36 +0,0 @@
part of 'getcalc_bloc.dart';
@immutable
abstract class CalcEventState {
const CalcEventState();
}
class EmptyState extends CalcEventState {
const EmptyState();
}
class FirstState extends CalcEventState {
final num a;
const FirstState({this.a});
}
class OperatorState extends CalcEventState {
final num a;
final num b;
final Operator operator;
final bool pointStatus;
const OperatorState({this.a, this.b, this.operator, this.pointStatus});
}
class SecondState extends CalcEventState {
final num a, b;
final Operator operator;
const SecondState({this.a, this.b, this.operator});
}
class ResultState extends CalcEventState {
final num a, b;
final Operator operator;
final num result;
const ResultState({this.a, this.b, this.operator, this.result});
}

View File

@ -1,81 +0,0 @@
enum Operator {
plus,
minus,
div,
multi,
percent,
plusminus,
backspace,
clearall,
point,
result
}
extension OperationExtension on Operator {
String getString() {
switch (this) {
case Operator.plus:
return " + ";
case Operator.minus:
return " - ";
case Operator.multi:
return " x ";
case Operator.div:
return " ÷ ";
case Operator.point:
return ".";
case Operator.result:
return " = ";
default:
throw UnimplementedError();
}
}
}
extension NumbersExtension on num {
num backspace() {
String pull = "$this";
pull = pull.substring(0, pull.length - 1);
if (pull.isNotEmpty && pull.split('').last.contains('.')) {
pull = pull.substring(0, pull.length - 1);
}
return num.parse(pull, (pull) => 0);
}
num concat({bool pointer, int value}) {
if (pointer == true) {
final String pull = "${this}." + "$value";
return num.parse(pull);
} else {
final String pull = "$this" + "$value";
return num.parse(pull);
}
}
}
num operationEvent(num x, num y, Operator op) {
num result = 0;
switch (op) {
case Operator.plus:
result = x + y;
break;
case Operator.minus:
result = x - y;
break;
case Operator.multi:
result = x * y;
break;
case Operator.div:
result = x / y;
break;
default:
result = 0;
break;
}
if (result % 1 == 0) {
return result.toInt();
} else {
return result;
}
}

View File

@ -1,13 +1,66 @@
import 'package:auto_size_text/auto_size_text.dart'; import 'package:auto_size_text/auto_size_text.dart';
import 'package:cloudtech_calculator/extension.dart';
import 'package:cloudtech_calculator/theme_model.dart'; import 'package:cloudtech_calculator/theme_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'bloc/getcalc_bloc.dart';
import 'route.dart'; import 'route.dart';
enum Operation {
plus,
minus,
multi,
div,
point,
res,
percent,
plusMinus,
backspace,
clear
}
extension OperationExtension on Operation {
String getString() {
switch (this) {
case Operation.plus:
return "+";
case Operation.minus:
return "-";
case Operation.multi:
return "x";
case Operation.div:
return "÷";
case Operation.point:
return ".";
case Operation.res:
return "=";
default:
throw UnimplementedError();
}
}
}
enum Numbers { zero, one, two, three, four, five, six, seven, eight, nine }
extension NumbersExtension on num {
num backspace() {
String pull = "$this";
pull = pull.substring(0, pull.length - 1);
if (pull.isNotEmpty && pull.split('').last.contains('.')) {
pull = pull.substring(0, pull.length - 1);
}
return num.parse(pull, (pull) => 0);
}
num concat({bool pointer, int value}) {
if (pointer == true) {
final String pull = "${this}." + "$value";
return num.parse(pull);
} else {
final String pull = "$this" + "$value";
return num.parse(pull);
}
}
}
void main() => runApp(ChangeNotifierProvider<ThemeModel>( void main() => runApp(ChangeNotifierProvider<ThemeModel>(
create: (BuildContext context) => ThemeModel(), child: MyApp())); create: (BuildContext context) => ThemeModel(), child: MyApp()));
@ -18,47 +71,198 @@ class MyApp extends StatelessWidget {
return MaterialApp( return MaterialApp(
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
theme: Provider.of<ThemeModel>(context).currentTheme, theme: Provider.of<ThemeModel>(context).currentTheme,
home: MyHomePage(title: 'Калькулятор'), home: const MyHomePage(title: 'Калькулятор'),
); );
} }
} }
class MyHomePage extends StatelessWidget { class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key); const MyHomePage({Key key, this.title}) : super(key: key);
final String title; final String title;
final _getCalc = CalcEventBloc();
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
num a, b;
bool pointStatus;
dynamic operator;
String textResh = "0";
void getCalc(dynamic type) {
if (type is Numbers) {
if (a == null) {
a = type.index;
setState(() {
textResh = '$a';
});
} else if (a != null && operator == null) {
if (pointStatus == true) {
a = a.concat(pointer: true, value: type.index);
pointStatus = false;
} else {
a = a.concat(pointer: false, value: type.index);
}
setState(() {
textResh = '$a';
});
} else if (operator != null) {
if (b == null) {
b = type.index;
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
} else if (b != null) {
if (pointStatus == true) {
b = b.concat(pointer: true, value: type.index);
pointStatus = false;
} else {
b = b.concat(pointer: false, value: type.index);
}
pointStatus = false;
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
}
}
} else if (type is Operation) {
if (type == Operation.res) {
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
a = operationEvent(a, b, operator as Operation);
b = null;
operator = null;
setState(() {
textResh = "$a";
});
} else if (type == Operation.point) {
if (a != null && b == null) {
if (a is double) {
pointStatus = false;
setState(() {
textResh = "$a";
});
} else {
pointStatus = true;
setState(() {
textResh = "$a.";
});
}
} else {
if (b is double) {
pointStatus = false;
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
} else {
pointStatus = true;
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b.";
});
}
}
} else if (type == Operation.clear) {
a = 0;
b = null;
operator = null;
setState(() {
textResh = "$a";
});
} else if (type == Operation.backspace) {
if (a != null && b == null) {
a = a.backspace();
setState(() {
textResh = "$a";
});
} else {
b = b.backspace();
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
}
} else if (type == Operation.plusMinus) {
if (a != null && b == null) {
a = a * -1;
setState(() {
textResh = "$a";
});
} else {
b = b * -1;
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
}
} else if (type == Operation.percent) {
if (a != null && b == null) {
a = a / 100;
setState(() {
textResh = "$a";
});
} else {
b = b / 100;
setState(() {
textResh = "$a ${(operator as Operation).getString()} $b";
});
}
} else {
operator = type;
setState(() {
textResh = "$a ${(operator as Operation).getString()}";
});
}
}
}
num operationEvent(num x, num y, Operation op) {
num result = 0;
switch (op) {
case Operation.plus:
result = x + y;
break;
case Operation.minus:
result = x - y;
break;
case Operation.multi:
result = x * y;
break;
case Operation.div:
result = x / y;
break;
default:
result = 0;
break;
}
if (result % 1 == 0) {
return result.toInt();
} else {
return result;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text(title, title: Text(widget.title,
style: TextStyle(color: Theme.of(context).accentColor)), style: TextStyle(color: Theme.of(context).accentColor)),
shadowColor: const Color(0x00000000), shadowColor: const Color(0x00000000),
actions: <Widget>[ actions: <Widget>[
PopupMenuButton( IconButton(
itemBuilder: (context) => [ icon: const Icon(Icons.settings),
const PopupMenuItem( tooltip: 'Show Snackbar',
value: 1, onPressed: () {
child: Text("Настройки темы"),
),
const PopupMenuItem(
value: 2,
child: Text("Курс валют"),
),
],
onSelected: (value) {
if (value == 1) {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => SecondRoute()), MaterialPageRoute(builder: (context) => SecondRoute()),
); );
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => CursState()),
);
}
}, },
color: Theme.of(context).accentColor,
) )
], ],
), ),
@ -72,147 +276,84 @@ class MyHomePage extends StatelessWidget {
Expanded( Expanded(
child: Align( child: Align(
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: BlocBuilder<CalcEventBloc, CalcEventState>( child: AutoSizeText(
cubit: _getCalc, textResh,
builder: (context, state) {
if (state is EmptyState) {
return AutoSizeText(
"0",
style: TextStyle( style: TextStyle(
fontSize: 70, fontSize: 70, color: Theme.of(context).accentColor),
color: Theme.of(context).accentColor),
maxLines: 1, maxLines: 1,
); )),
} else if (state is FirstState) {
return AutoSizeText(
state.a.toString(),
style: TextStyle(
fontSize: 70,
color: Theme.of(context).accentColor),
maxLines: 1,
);
} else if (state is OperatorState &&
state.b == null) {
return AutoSizeText(
"${state.a}${state.operator.getString()}",
style: TextStyle(
fontSize: 70,
color: Theme.of(context).accentColor),
maxLines: 1,
);
} else if (state is OperatorState &&
state.b != null) {
return AutoSizeText(
"${state.a}${state.operator.getString()}${state.b}.",
style: TextStyle(
fontSize: 70,
color: Theme.of(context).accentColor),
maxLines: 1,
);
} else if (state is SecondState) {
return AutoSizeText(
"${state.a}${state.operator.getString()}${state.b}",
style: TextStyle(
fontSize: 70,
color: Theme.of(context).accentColor),
maxLines: 1,
);
} else if (state is ResultState) {
return AutoSizeText(
"${state.result}",
style: TextStyle(
fontSize: 70,
color: Theme.of(context).accentColor),
maxLines: 1,
);
}
return const SizedBox.shrink();
}),
),
), ),
Row( Row(
children: [ children: [
CallButton( CallButton(
text: "±", text: "±",
onPressed: () => value: Operation.plusMinus,
_getCalc.add(PlusMinusOperationEvent())), onPressed: getCalc,
),
CallButton( CallButton(
text: "%", text: "%",
onPressed: () => _getCalc.add(PercentOperationEvent())), value: Operation.percent,
onPressed: getCalc),
CallButton( CallButton(
text: "", text: "",
onPressed: () => value: Operation.backspace,
_getCalc.add(BackspaceOperationEvent())), onPressed: getCalc),
CallButton( CallButton(
text: "AC", text: "AC", value: Operation.clear, onPressed: getCalc),
onPressed: () =>
_getCalc.add(ClearAllOperationEvent())),
], ],
), ),
Row( Row(
children: [ children: [
CallButton( CallButton(
text: "7", text: "7",
onPressed: () => _getCalc.add(NumberEvent(7))), value: Numbers.seven,
onPressed: getCalc,
),
CallButton( CallButton(
text: "8", text: "8", value: Numbers.eight, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(8))),
CallButton( CallButton(
text: "9", text: "9", value: Numbers.nine, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(9))),
CallButton( CallButton(
text: "/", text: "/", value: Operation.div, onPressed: getCalc),
onPressed: () =>
_getCalc.add(DivisionOperationEvent())),
], ],
), ),
Row( Row(
children: [ children: [
CallButton( CallButton(
text: "4", text: "4", value: Numbers.four, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(4))),
CallButton( CallButton(
text: "5", text: "5", value: Numbers.five, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(5))),
CallButton( CallButton(
text: "6", text: "6", value: Numbers.six, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(6))),
CallButton( CallButton(
text: "*", text: "*", value: Operation.multi, onPressed: getCalc),
onPressed: () => _getCalc.add(MultiOperationEvent())),
], ],
), ),
Row( Row(
children: [ children: [
CallButton( CallButton(
text: "1", text: "1", value: Numbers.one, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(1))),
CallButton( CallButton(
text: "2", text: "2", value: Numbers.two, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(2))),
CallButton( CallButton(
text: "3", text: "3", value: Numbers.three, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(3))),
CallButton( CallButton(
text: "-", text: "-", value: Operation.minus, onPressed: getCalc),
onPressed: () => _getCalc.add(MinusOperationEvent())),
], ],
), ),
Row( Row(
children: [ children: [
CallButton( CallButton(
text: "0", text: "0", value: Numbers.zero, onPressed: getCalc),
onPressed: () => _getCalc.add(NumberEvent(0))),
CallButton( CallButton(
text: ".", text: ".", value: Operation.point, onPressed: getCalc),
onPressed: () => _getCalc.add(PointOperationEvent())),
CallButton( CallButton(
text: "=", text: "=", value: Operation.res, onPressed: getCalc),
onPressed: () => _getCalc.add(ResultOperationEvent())),
CallButton( CallButton(
text: "+", text: "+",
onPressed: () => _getCalc.add(PlusOperationEvent())), value: Operation.plus,
onPressed: getCalc,
),
], ],
), ),
], ],
@ -224,8 +365,12 @@ class MyHomePage extends StatelessWidget {
class CallButton extends StatelessWidget { class CallButton extends StatelessWidget {
final String text; final String text;
final void Function() onPressed; final dynamic value;
const CallButton({@required this.text, @required this.onPressed});
final void Function(dynamic) onPressed;
const CallButton(
{@required this.text, @required this.value, @required this.onPressed});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -240,7 +385,7 @@ class CallButton extends StatelessWidget {
color: const Color(0x00000000)), color: const Color(0x00000000)),
child: FlatButton( child: FlatButton(
height: 60, height: 60,
onPressed: () => onPressed(), onPressed: () => onPressed(value),
child: Text( child: Text(
text, text,
style: style:

View File

@ -1,6 +1,5 @@
import 'package:cloudtech_calculator/theme_model.dart'; import 'package:cloudtech_calculator/theme_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class SecondRoute extends StatefulWidget { class SecondRoute extends StatefulWidget {
@ -44,99 +43,6 @@ class _SecondRouteState extends State<SecondRoute> {
.toggleTheme(); .toggleTheme();
}, },
), ),
),
],
),
)),
);
}
}
class CursState extends StatefulWidget {
@override
_CursRouteState createState() => _CursRouteState();
}
class _CursRouteState extends State<CursState> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"NOTHING",
style: GoogleFonts.rubik(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Theme.of(context).accentColor,
letterSpacing: 3.06,
),
textAlign: TextAlign.center,
),
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: [
Container(
margin: const EdgeInsets.symmetric(vertical: 10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).backgroundColor,
),
child: ListTile(
leading: IconButton(
icon: Icon(
Icons.settings_display,
color: Theme.of(context).accentColor,
),
onPressed: null),
title: Text(
"USD",
style: GoogleFonts.rubik(
fontSize: 21,
fontWeight: FontWeight.w400,
color: Theme.of(context).accentColor),
),
trailing: Text(
"77,96 ₽",
style: GoogleFonts.rubik(
fontSize: 21,
fontWeight: FontWeight.w500,
color: Theme.of(context).accentColor),
),
),
),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).backgroundColor,
),
child: ListTile(
leading: IconButton(
icon: Icon(
Icons.settings_display,
color: Theme.of(context).accentColor,
),
onPressed: null),
title: Text(
"USD",
style: GoogleFonts.rubik(
fontSize: 21,
fontWeight: FontWeight.w400,
color: Theme.of(context).accentColor),
),
trailing: Text(
"77,96 ₽",
style: GoogleFonts.rubik(
fontSize: 21,
fontWeight: FontWeight.w500,
color: Theme.of(context).accentColor),
),
),
) )
], ],
), ),

View File

@ -1,9 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
ThemeData darkTheme = ThemeData( ThemeData darkTheme = ThemeData(
primaryColor: const Color(0xff20274C), primaryColor: const Color(0xff131618),
accentColor: const Color(0xffD4D9EC), accentColor: Colors.white,
backgroundColor: const Color(0xff414d7b),
brightness: Brightness.dark, brightness: Brightness.dark,
textTheme: const TextTheme(bodyText2: TextStyle(color: Color(0xffffffff))), textTheme: const TextTheme(bodyText2: TextStyle(color: Color(0xffffffff))),
); );
@ -11,7 +10,6 @@ ThemeData darkTheme = ThemeData(
ThemeData lightTheme = ThemeData( ThemeData lightTheme = ThemeData(
primaryColor: Colors.white, primaryColor: Colors.white,
accentColor: Colors.green, accentColor: Colors.green,
backgroundColor: const Color(0xff414d7b),
brightness: Brightness.light, brightness: Brightness.light,
textTheme: const TextTheme(bodyText2: TextStyle(color: Colors.green)), textTheme: const TextTheme(bodyText2: TextStyle(color: Colors.green)),
); );

View File

@ -15,13 +15,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
bloc:
dependency: "direct main"
description:
name: bloc
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
@ -57,20 +50,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.15.0-nullsafety.3" version: "1.15.0-nullsafety.3"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -85,65 +64,16 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0-nullsafety.1" version: "1.2.0-nullsafety.1"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "5.2.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_bloc:
dependency: "direct main"
description:
name: flutter_bloc
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.6"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
http:
dependency: transitive
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.2"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.4"
intl:
dependency: transitive
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.1"
lint: lint:
dependency: "direct dev" dependency: "direct dev"
description: description:
@ -179,69 +109,6 @@ 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"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.21"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+2"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4+4"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4+1"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.2"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.13"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
@ -310,20 +177,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0-nullsafety.3" version: "2.1.0-nullsafety.3"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
sdks: sdks:
dart: ">=2.10.0-110 <2.11.0" dart: ">=2.10.0-110 <2.11.0"
flutter: ">=1.17.0 <2.0.0" flutter: ">=1.16.0"

View File

@ -1,8 +1,20 @@
name: cloudtech_calculator name: cloudtech_calculator
description: A new Flutter project. description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1 version: 1.0.0+1
environment: environment:
@ -11,20 +23,52 @@ environment:
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
auto_size_text: ^2.1.0
bloc: ^6.0.3 # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.0 cupertino_icons: ^1.0.0
flutter_bloc: ^6.0.6
google_fonts: ^1.1.1
provider: ^4.3.2+2 provider: ^4.3.2+2
auto_size_text: ^2.1.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
lint: ^1.2.0 lint: ^1.2.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter: flutter:
uses-material-design: true
assets: # The following line ensures that the Material Icons font is
- google_fonts/ # included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages