From 4be0a592225efd945f414f7983fb8dc8303ce3ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B7=AB=E5=9C=A3=E6=B3=B0?= Date: Tue, 24 Dec 2019 15:44:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A9=E7=8E=87=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/member/LoanInfo.dart | 60 +++++++++++++++++------------ lib/utils/Utils.dart | 15 ++++++++ lib/view/date_drop_down.dart | 5 ++- lib/view/loan_page.dart | 73 +++++++++++++++++++++++++----------- lib/view/rate_drop_down.dart | 2 +- pubspec.lock | 7 ++++ pubspec.yaml | 1 + 7 files changed, 115 insertions(+), 48 deletions(-) create mode 100644 lib/utils/Utils.dart diff --git a/lib/member/LoanInfo.dart b/lib/member/LoanInfo.dart index 2481311..f858c29 100644 --- a/lib/member/LoanInfo.dart +++ b/lib/member/LoanInfo.dart @@ -1,41 +1,53 @@ - +import 'package:loan_calc/utils/Utils.dart'; class LoandInfo{ - /** - * 每天的利息 - */ + //每天的利息 double interestDay; - /** - * 每月的利息 - * 一个月按照30天计算 - */ + // * 每月的利息 + // * 一个月按照30天计算 double interestMonth; - /** - * 每年的利息 - */ + + //每年的利息 double interestYear; - /** - * 总的利息 - */ + //总的利息 double interestTotal; - /** - * 本金 - */ + + // 本金 double baseMoney; - /** - * 是否利滚利 - */ - bool isRoll; - /** - * 年利率 - */ + //是否利滚利 + bool isRoll=false; + + + //年利率 double yearRate; + String toString() { + + StringBuffer sb=new StringBuffer(); +// sb.write("本金:"+Utils.formatNumber(baseMoney)+"元"); +// sb.write("\n总的利息:"+ Utils.formatNumber(interestTotal)+"元"); + sb.write("年利率:"+Utils.formatNumber(yearRate*100)+" %"+"元"); + if(interestYear!=0){ + sb.write("\n一年的利息:"+Utils.formatNumber(interestYear)+"元"); + } + if(interestMonth!=0){ + sb.write("\n一月的利息:"+Utils.formatNumber(interestMonth)+"元"); + } + if(interestDay!=0){ + sb.write("\n日息:"+Utils.formatNumber(interestDay)+"元"); + } + + if(!isRoll){ + sb.write("\n[非利滚利的算法] \n标准:以月30为天,年365\n注意:年利率大于36%就属于高利贷了"); + } + return sb.toString(); + } + } class TIME{ diff --git a/lib/utils/Utils.dart b/lib/utils/Utils.dart new file mode 100644 index 0000000..01ada20 --- /dev/null +++ b/lib/utils/Utils.dart @@ -0,0 +1,15 @@ +import 'package:intl/intl.dart'; +class Utils{ + + + //保留两位小数 + static String formatNumber(double number){ + String style="#.##"; + + NumberFormat numberFormat=new NumberFormat(style); + + return numberFormat.format(number); + + } + +} \ No newline at end of file diff --git a/lib/view/date_drop_down.dart b/lib/view/date_drop_down.dart index f1e2c5e..9f774b7 100644 --- a/lib/view/date_drop_down.dart +++ b/lib/view/date_drop_down.dart @@ -1,10 +1,11 @@ import 'package:flutter/material.dart'; import 'package:loan_calc/ctrl/SpnnerControl.dart'; -class DateDropDown extends StatefulWidget { +@immutable + class DateDropDown extends StatefulWidget { - SpnnerControl control; + final SpnnerControl control; DateDropDown( this.control); diff --git a/lib/view/loan_page.dart b/lib/view/loan_page.dart index b88446a..9e3868c 100644 --- a/lib/view/loan_page.dart +++ b/lib/view/loan_page.dart @@ -37,37 +37,41 @@ class MyLoadPage extends StatefulWidget { */ class _MyLoadPageState extends State { - final TextEditingController _money_controller = new TextEditingController(); - final TextEditingController _time_controller = new TextEditingController(); - final TextEditingController _rate_controller = new TextEditingController(); + final TextEditingController moneyController = new TextEditingController(); + final TextEditingController timeController = new TextEditingController(); + final TextEditingController rateController = new TextEditingController(); - SpnnerControl _time_control=new SpnnerControl(); - SpnnerControl _rate_ctrl=new SpnnerControl(); + + + + SpnnerControl spnnerTimeControl=new SpnnerControl(); + SpnnerControl spnnerRateCtrl=new SpnnerControl(); bool isCanInputRateMomey = false; double rateMoney = 0; + String displayDetail=""; void checkAndCalc(TapUpDetails details) { - if (_money_controller.text.isEmpty) { + if (moneyController.text.isEmpty) { showTaost("金额不能为空"); return null; } - if(_time_controller.text.isEmpty){ + if(timeController.text.isEmpty){ showTaost("时间不能为空"); return null; } - if(_rate_controller.text.isEmpty){ + if(rateController.text.isEmpty){ showTaost("利息不能为空"); return null; } - double money=double.parse(_money_controller.text); + double money=double.parse(moneyController.text); - int time=int.parse(_time_controller.text); + int time=int.parse(timeController.text); - double rate=double.parse(_rate_controller.text); + double rate=double.parse(rateController.text); int rateType=RATE.YEAR; @@ -75,17 +79,17 @@ class _MyLoadPageState extends State { int timeType=TIME.YEAR; - if("月"==_rate_ctrl.value){ + if("月"==spnnerTimeControl.value){ timeType=TIME.MONTH; - }else if("日" == _rate_ctrl.value){ + }else if("日" == spnnerTimeControl.value){ timeType=TIME.DAY; }else{ timeType=TIME.YEAR; } - if("月息"==_rate_ctrl.value){ + if("月息"==spnnerRateCtrl.value){ rateType=RATE.MONTH; - }else if("日息" == _rate_ctrl.value){ + }else if("日息" == spnnerRateCtrl.value){ rateType=RATE.DAY; }else{ rateType=RATE.YEAR; @@ -96,6 +100,7 @@ class _MyLoadPageState extends State { setState(() { rateMoney=info.interestTotal; + displayDetail=info.toString(); }); @@ -104,6 +109,7 @@ class _MyLoadPageState extends State { } + @override Widget build(BuildContext context) { // TODO: implement build @@ -126,7 +132,7 @@ class _MyLoadPageState extends State { child: TextField( obscureText: false, //是否是密码 - controller: _money_controller, + controller: moneyController, keyboardType: TextInputType.number, //数字输入 @@ -147,7 +153,7 @@ class _MyLoadPageState extends State { child: TextField( obscureText: false, //是否是密码 - controller: _time_controller, + controller: timeController, keyboardType: TextInputType.number, //数字输入 @@ -156,7 +162,7 @@ class _MyLoadPageState extends State { ), ), SizedBox(width: 10), - SizedBox(width: 80, child: DateDropDown(_time_control)) + SizedBox(width: 80, child: DateDropDown(spnnerTimeControl)) ], )), SizedBox(height: 16), @@ -168,7 +174,7 @@ class _MyLoadPageState extends State { child: TextField( obscureText: false, //是否是密码 - controller: _rate_controller, + controller: rateController, keyboardType: TextInputType.number, //数字输入 @@ -177,7 +183,7 @@ class _MyLoadPageState extends State { ), ), SizedBox(width: 10), - SizedBox(width: 80, child: RateDropDown(_rate_ctrl)), + SizedBox(width: 80, child: RateDropDown(spnnerRateCtrl)), ], )), SizedBox(height: 16), @@ -186,11 +192,15 @@ class _MyLoadPageState extends State { height: 48, child: Row( children: [ + + SizedBox(width: 60, child: Align( alignment: Alignment.centerLeft,child: Text("总利息:",style: TextStyle(color: Colors.black45)))), Expanded( + child: TextField( obscureText: false, //是否是密码 + keyboardType: TextInputType.number, //数字输入 enabled: isCanInputRateMomey, @@ -201,7 +211,7 @@ class _MyLoadPageState extends State { ), ), SizedBox(width: 10), - SizedBox(width: 80, child: Center(child: Text("单位(元)"))) + SizedBox(width: 80, child: Center(child: Text(" 单位(元)"))) ], )), onLongPress: () { @@ -212,6 +222,23 @@ class _MyLoadPageState extends State { }, ), SizedBox(height: 16), + + + new InkWell( + + onTap: (){ +// Scaffold.of(context).showSnackBar(new SnackBar(content: Text("测试"))); + } + ,child: Container( + + padding: EdgeInsets.all(12), + child: Text("33"), + ), + + + ), + + GestureDetector( child: Container( color: Colors.deepOrange, @@ -231,6 +258,10 @@ class _MyLoadPageState extends State { onTapUp: checkAndCalc, ), + + SizedBox(height: 16), + SizedBox(height: 150,child: SingleChildScrollView(child: Text("$displayDetail"))) + ]), ), ); diff --git a/lib/view/rate_drop_down.dart b/lib/view/rate_drop_down.dart index 8c79271..1a6f03a 100644 --- a/lib/view/rate_drop_down.dart +++ b/lib/view/rate_drop_down.dart @@ -3,7 +3,7 @@ import 'package:loan_calc/ctrl/SpnnerControl.dart'; class RateDropDown extends StatefulWidget { - SpnnerControl control; + final SpnnerControl control; RateDropDown(this.control); diff --git a/pubspec.lock b/pubspec.lock index 7f9938a..a79bcdb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -53,6 +53,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.3" + intl: + dependency: "direct main" + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.15.7" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b803e33..77cc234 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,6 +18,7 @@ environment: dependencies: fluttertoast: ^3.1.3 + intl: 0.15.7 flutter: sdk: flutter