From 9df28c3935d0703e73cdb3ba67624a32912aad35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Wed, 2 Jan 2019 20:29:00 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/color_const.dart | 20 ++++++++++++ lib/ui/home/HomePage.dart | 1 + lib/utils/GradientUtil.dart | 63 ++++++++++++++++++++++++++++++++++++ lib/utils/SizeUtil.dart | 46 ++++++++++++++++++++++++++ sources/imags/logo.png | Bin 0 -> 15772 bytes 5 files changed, 130 insertions(+) create mode 100644 lib/common/color_const.dart create mode 100644 lib/utils/GradientUtil.dart create mode 100644 lib/utils/SizeUtil.dart create mode 100644 sources/imags/logo.png diff --git a/lib/common/color_const.dart b/lib/common/color_const.dart new file mode 100644 index 0000000..ac45f05 --- /dev/null +++ b/lib/common/color_const.dart @@ -0,0 +1,20 @@ +/// +/// Created by NieBin on 18-12-14 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import "package:flutter/material.dart"; + +const MAIN_COLOR = Color(0xFF303030); +const DARK_COLOR = Color(0xFFBDBDBD); +const BOTTOM_COLORS = [MAIN_COLOR, DARK_COLOR]; +const YELLOW = Color(0xfffbed96); +const BLUE = Color(0xffabecd6); +const BLUE_DEEP = Color(0xffA8CBFD); +const BLUE_LIGHT = Color(0xffAED3EA); +const PURPLE = Color(0xffccc3fc); +const RED = Color(0xffF2A7B3); +const GREEN = Color(0xffc7e5b4); +const RED_LIGHT = Color(0xffFFC3A0); +const TEXT_BLACK = Color(0xFF353535); +const TEXT_BLACK_LIGHT = Color(0xFF34323D); diff --git a/lib/ui/home/HomePage.dart b/lib/ui/home/HomePage.dart index 82c9b40..c33d748 100644 --- a/lib/ui/home/HomePage.dart +++ b/lib/ui/home/HomePage.dart @@ -32,6 +32,7 @@ class _HomePageState extends State ) ], ), + body: Text(('开发中..'))); } } diff --git a/lib/utils/GradientUtil.dart b/lib/utils/GradientUtil.dart new file mode 100644 index 0000000..ae1f0e5 --- /dev/null +++ b/lib/utils/GradientUtil.dart @@ -0,0 +1,63 @@ +import 'package:coderiver/common/color_const.dart'; +/// +/// Created by NieBin on 2018/12/28 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import "package:flutter/material.dart"; + +class GradientUtil { + static LinearGradient _getLinearGradient(Color left, Color right, + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + LinearGradient( + colors: [ + left.withOpacity(opacity), + right.withOpacity(opacity), + ], + begin: begin, + end: end, + ); + + static LinearGradient yellowGreen( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(YELLOW, GREEN, + begin: begin, end: end, opacity: opacity); + + static LinearGradient red( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(RED_LIGHT, RED, + begin: begin, end: end, opacity: opacity); + + static LinearGradient yellowBlue( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(YELLOW, BLUE, + begin: begin, end: end, opacity: opacity); + + static LinearGradient blue( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(BLUE_LIGHT, BLUE_DEEP, + begin: begin, end: end, opacity: opacity); + + static LinearGradient greenRed( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(GREEN, RED, begin: begin, end: end, opacity: opacity); + + static LinearGradient greenPurple( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(GREEN, PURPLE, + begin: begin, end: end, opacity: opacity); +} diff --git a/lib/utils/SizeUtil.dart b/lib/utils/SizeUtil.dart new file mode 100644 index 0000000..f55ec20 --- /dev/null +++ b/lib/utils/SizeUtil.dart @@ -0,0 +1,46 @@ +/// +/// Created by NieBin on 2018/12/26 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import 'package:flutter/material.dart'; +import 'dart:math'; + +class SizeUtil { + static const _DESIGN_WIDTH = 750; + static const _DESIGN_HEIGHT = 1334; + + //logic size in device + static Size _logicSize; + + //device pixel radio. + + static get width { + return _logicSize.width; + } + + static get height { + return _logicSize.height; + } + + static set size(size) { + _logicSize = size; + } + + //@param w is the design w; + static double getAxisX(double w) { + return (w * width) / _DESIGN_WIDTH; + } + +// the y direction + static double getAxisY(double h) { + return (h * height) / _DESIGN_HEIGHT; + } + + // diagonal direction value with design size s. + static double getAxisBoth(double s) { + return s * + sqrt((width * width + height * height) / + (_DESIGN_WIDTH * _DESIGN_WIDTH + _DESIGN_HEIGHT * _DESIGN_HEIGHT)); + } +} diff --git a/sources/imags/logo.png b/sources/imags/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0e6f48d177e1b98bb9a128eba8670d0368eff GIT binary patch literal 15772 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 Date: Thu, 3 Jan 2019 12:05:31 +0800 Subject: [PATCH 2/8] sth --- lib/main.dart | 11 ++---- lib/ui/login/LoginPage.dart | 56 +++++++++++++++++++++++++++++ lib/utils/GradientUtil.dart | 2 +- sources/{imags => images}/logo.png | Bin 4 files changed, 59 insertions(+), 10 deletions(-) rename sources/{imags => images}/logo.png (100%) diff --git a/lib/main.dart b/lib/main.dart index 069b124..91562a3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:coderiver/ui/Application.dart'; +import 'package:coderiver/ui/login/LoginPage.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); @@ -8,16 +9,8 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - - primarySwatch: Colors.blue, - ), home: Scaffold( - appBar: AppBar( - title: Text("CodeRiver"), - ), - body: ApplicationPage(), + body: LoginPage(), ) ); } diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index e69de29..fa6d0f4 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -0,0 +1,56 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/utils/SizeUtil.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class LoginPage extends StatefulWidget { + @override + _MarketPageState createState() => new _MarketPageState(); +} + +class _MarketPageState extends State { + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + /*appBar: new AppBar( + title: new Text('登录', textAlign: TextAlign.right), + ),*/ + body: Container( + alignment: AlignmentDirectional.topStart, + padding: EdgeInsets.only(top: 40, left: 20, right: 20), + constraints: BoxConstraints.expand(), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [GREEN, GlobalConfig.colorPrimary]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(280.0, 10.0, 0.0, 0.0), + child: Text( + '登录', + style: TextStyle( + fontSize: 18, + inherit: false, //2.不继承默认样式 + color: Colors.white), + //TextDirection.ltr从左至右,TextDirection.rtl从右至左 + textDirection: TextDirection.rtl, + ), + ), + ImageIcon( + AssetImage('sources/images/logo.png'), color: Colors.white,) + //TopTitleBar(), + //_body(), + ], + ), + ),) + , + ); + } +} diff --git a/lib/utils/GradientUtil.dart b/lib/utils/GradientUtil.dart index ae1f0e5..9756cce 100644 --- a/lib/utils/GradientUtil.dart +++ b/lib/utils/GradientUtil.dart @@ -38,7 +38,7 @@ class GradientUtil { {begin = AlignmentDirectional.centerStart, end = AlignmentDirectional.centerEnd, opacity = 1.0}) => - _getLinearGradient(YELLOW, BLUE, + _getLinearGradient(YELLOW, GREEN, begin: begin, end: end, opacity: opacity); static LinearGradient blue( diff --git a/sources/imags/logo.png b/sources/images/logo.png similarity index 100% rename from sources/imags/logo.png rename to sources/images/logo.png From de165f633b4151e8dde8b42ff55613fabd09d166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Thu, 3 Jan 2019 22:49:02 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/logo.png | Bin 0 -> 15772 bytes lib/ui/login/LoginPage.dart | 145 ++++++++++++++++++++++++++++++------ pubspec.yaml | 3 +- 3 files changed, 123 insertions(+), 25 deletions(-) create mode 100644 images/logo.png diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0e6f48d177e1b98bb9a128eba8670d0368eff GIT binary patch literal 15772 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 { Widget build(BuildContext context) { return new MaterialApp( home: new Scaffold( - /*appBar: new AppBar( - title: new Text('登录', textAlign: TextAlign.right), - ),*/ body: Container( alignment: AlignmentDirectional.topStart, padding: EdgeInsets.only(top: 40, left: 20, right: 20), @@ -28,29 +26,128 @@ class _MarketPageState extends State { colors: [GREEN, GlobalConfig.colorPrimary]), ), child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(280.0, 10.0, 0.0, 0.0), - child: Text( - '登录', - style: TextStyle( - fontSize: 18, - inherit: false, //2.不继承默认样式 - color: Colors.white), - //TextDirection.ltr从左至右,TextDirection.rtl从右至左 - textDirection: TextDirection.rtl, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Align( + alignment: FractionalOffset.topRight, + child: new Padding( + padding: EdgeInsets.only(right: 0.0, top: 0.0), + child: new GestureDetector( + child: new Text( + '登录', + style: new TextStyle( + fontSize: 18.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + onTap: () { + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => + new LoginPage())); + }, + ), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 70.0, 0.0, 0.0), + child: new Image.asset( + 'images/logo.png', + width: 90, + height: 90, + )), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 40.0, 0.0, 0.0), + child: new Text( + '欢迎来到CodeRiver', + style: new TextStyle( + fontSize: 24.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(Icons.star), + onPressed: () { + Snack.show(context, "666"); + }, + label: new Text('使用GitHub账号登录使用GitHub账号登录')), + RaisedButton.icon( + color: Colors.transparent, + disabledColor: Colors.transparent, + onPressed: () { + Snack.show(context, "777"); + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(null), + label: new Text( + '创建账号创建账号创建账号创建账号创建账号', + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal), + )), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 0.0), + child: new Text( + '更多登录方式', + style: new TextStyle( + fontSize: 18.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.all(10.0), + child: RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + icon: new Icon(Icons.star), + label: new Text('新浪微博', + style: new TextStyle( + color: Colors.white, + fontStyle: FontStyle.normal)))), + Padding( + padding: EdgeInsets.all(20.0), + child: RaisedButton.icon( + color: Colors.transparent, + disabledColor: Colors.transparent, + icon: new Icon(Icons.star), + label: new Text( + '微信', + style: new TextStyle( + color: Colors.white, + fontStyle: FontStyle.normal), + ))), + ], + ) + //_body(), + ], ), ), - ImageIcon( - AssetImage('sources/images/logo.png'), color: Colors.white,) - //TopTitleBar(), - //_body(), - ], ), - ),) - , ); } } + +Widget _buildLoginBtn(BuildContext context) { + return RaisedButton( + padding: const EdgeInsets.all(8.0), + color: GlobalConfig.colorPrimary, + textColor: Colors.white, + child: Text("登录"), + elevation: 4.0, + onPressed: () { + Snack.show(context, "账号/密码不符合标准"); + }); +} diff --git a/pubspec.yaml b/pubspec.yaml index 31e9c96..08c2843 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,4 +37,5 @@ flutter: # the material Icons class. uses-material-design: true - + assets: + - images/logo.png From 751475317edc8b61b49092646b998d5f52d8090b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Fri, 4 Jan 2019 09:25:50 +0800 Subject: [PATCH 4/8] sth --- lib/ui/login/LoginPage.dart | 143 ++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 78 deletions(-) diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index 0baed5e..06cf9a8 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -29,28 +29,7 @@ class _MarketPageState extends State { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - new Align( - alignment: FractionalOffset.topRight, - child: new Padding( - padding: EdgeInsets.only(right: 0.0, top: 0.0), - child: new GestureDetector( - child: new Text( - '登录', - style: new TextStyle( - fontSize: 18.0, - color: Colors.white, - fontStyle: FontStyle.normal), - ), - onTap: () { - Navigator.push( - context, - new MaterialPageRoute( - builder: (BuildContext context) => - new LoginPage())); - }, - ), - ), - ), + _logText(BuildContext), Padding( padding: const EdgeInsets.fromLTRB(0.0, 70.0, 0.0, 0.0), child: new Image.asset( @@ -68,32 +47,8 @@ class _MarketPageState extends State { fontStyle: FontStyle.normal), ), ), - RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(Icons.star), - onPressed: () { - Snack.show(context, "666"); - }, - label: new Text('使用GitHub账号登录使用GitHub账号登录')), - RaisedButton.icon( - color: Colors.transparent, - disabledColor: Colors.transparent, - onPressed: () { - Snack.show(context, "777"); - }, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(null), - label: new Text( - '创建账号创建账号创建账号创建账号创建账号', - style: new TextStyle( - color: Colors.white, fontStyle: FontStyle.normal), - )), + _btnGithubLogin(BuildContext), + _btnCreadeAccound(BuildContext), Padding( padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 0.0), child: new Text( @@ -108,27 +63,8 @@ class _MarketPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.all(10.0), - child: RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - icon: new Icon(Icons.star), - label: new Text('新浪微博', - style: new TextStyle( - color: Colors.white, - fontStyle: FontStyle.normal)))), - Padding( - padding: EdgeInsets.all(20.0), - child: RaisedButton.icon( - color: Colors.transparent, - disabledColor: Colors.transparent, - icon: new Icon(Icons.star), - label: new Text( - '微信', - style: new TextStyle( - color: Colors.white, - fontStyle: FontStyle.normal), - ))), + padding: EdgeInsets.all(10.0), child: weiboOR('新浪微博')), + Padding(padding: EdgeInsets.all(20.0), child: weiboOR('微信')), ], ) //_body(), @@ -140,14 +76,65 @@ class _MarketPageState extends State { } } -Widget _buildLoginBtn(BuildContext context) { - return RaisedButton( - padding: const EdgeInsets.all(8.0), - color: GlobalConfig.colorPrimary, - textColor: Colors.white, - child: Text("登录"), - elevation: 4.0, +Widget _logText(context) { + return new Align( + alignment: FractionalOffset.topRight, + child: new Padding( + padding: EdgeInsets.only(right: 0.0, top: 0.0), + child: new GestureDetector( + child: new Text( + '登录', + style: new TextStyle( + fontSize: 18.0, color: Colors.white, fontStyle: FontStyle.normal), + ), + onTap: () { + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => new LoginPage())); + }, + ), + ), + ); +} + +Widget _btnGithubLogin(context) { + return RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(Icons.star), + onPressed: () { + Snack.show(context, "666"); + }, + label: new Text('使用GitHub账号登录')); +} + +Widget _btnCreadeAccound(context) { + return RaisedButton.icon( + color: Colors.transparent, + disabledColor: Colors.transparent, onPressed: () { - Snack.show(context, "账号/密码不符合标准"); - }); + Snack.show(context, "777"); + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(null), + label: new Text( + '创建账号', + style: new TextStyle(color: Colors.white, fontStyle: FontStyle.normal), + )); +} + +Widget weiboOR(String str) { + return RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + icon: new Icon(Icons.star), + label: new Text(str, + style: + new TextStyle(color: Colors.white, fontStyle: FontStyle.normal))); } From 2dc51edc3a22da5046c16970a0688dcaed426524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Fri, 4 Jan 2019 10:59:19 +0800 Subject: [PATCH 5/8] sth --- images/github_icon.png | Bin 0 -> 945 bytes images/logo.png | Bin 15772 -> 13228 bytes images/silan_icon.png | Bin 0 -> 721 bytes images/wechat_icon.png | Bin 0 -> 544 bytes lib/ui/login/LoginPage.dart | 73 +++++++++++++++++++++--------------- pubspec.yaml | 3 ++ 6 files changed, 46 insertions(+), 30 deletions(-) create mode 100644 images/github_icon.png create mode 100644 images/silan_icon.png create mode 100644 images/wechat_icon.png diff --git a/images/github_icon.png b/images/github_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee52ac00ecfbefb74c3bc2b4ed6eecd6ec6cd84d GIT binary patch literal 945 zcmV;i15W&jP)RQ}so?>IXw(?3q)RR}dCty^M* zWf9*C{>k4xYw!o#Uaj=s0!+A03Peeb0Dw%(myY3QV}!Hvzo2CP+Us?q)9$cyg@*Et6^;n*iuv}~wj4t~8 zXvDS`H-tKl*=Q7MNwWt;L-;}f_`Z*$OgK)JBEcAd#~{4}a2JR)fEfyBR}}P2wxzGE zclC6(RRInWcrJV{4azE;yPdIc;1#sMhk1aW}EAHk~XM^mZUa$-E+ z_d382!;xHv0fC^mM_W?w7lDc4;fQYjdIEutff(?Yf@9jIx*!^zolM%-E6a|#eJ`3a zPLqgMs2g71?j4-k-@dTEZR#Cod(;d*2=}0bDMG^mF=tfY(>>DEwBDe&>ofzw83NJb zbO;lkZ=}a<`&zLrm8b9N?zXD#zN;P3TLfzbOYdLYu}teIq~6iMoQ7@tm7@Lu4%Ce_ T>Vz)n00000NkvXXu0mjff-S%b literal 0 HcmV?d00001 diff --git a/images/logo.png b/images/logo.png index 12d0e6f48d177e1b98bb9a128eba8670d0368eff..74678795f12240af6a32803c2eee45ee3a45eead 100644 GIT binary patch literal 13228 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 Dq_9_k literal 0 HcmV?d00001 diff --git a/images/wechat_icon.png b/images/wechat_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2302bb7bc605880899b9561fdf904bda91767e GIT binary patch literal 544 zcmV+*0^j|KP)X78q703$5Gk*2UL{H?30;p8DUX2=r3?^KBqI#mC-_ck+|Rvda!%*$z4kt9t#d-dsH$odmS8p};sYMwKCVZ^>&E!*){&c4 zRrSLf?8I2~X$t;<=h%%45%Ikha8y;5$(yhr1MsEHStQ5LvNsqBd<459BG>Q?ChQ;VWU);b}9L7w1!qSN7Yz24-Taed(gKd~qfV2BYIEc-dRJy&2^%3!{88kb* zf&~o+U4_Hn{3gYCg>&V~qcH|Aa2K5s@v_cOz{^0Oh)7klK$<$wH{d`i(h4_U(@AXn1K29E zs;Z$lid9XPsZ$c{BGyI3`yK&Hx5?{rtj5%0v9IOB$j_ubB5r4FuK?>-s;Wx=r5|&C iTa->0bVbCqjQa)eES4?Yy6c1h0000 { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - _logText(BuildContext), + _logText(context), Padding( padding: const EdgeInsets.fromLTRB(0.0, 70.0, 0.0, 0.0), child: new Image.asset( @@ -38,7 +38,7 @@ class _MarketPageState extends State { height: 90, )), Padding( - padding: const EdgeInsets.fromLTRB(0.0, 40.0, 0.0, 0.0), + padding: const EdgeInsets.fromLTRB(0.0, 40.0, 0.0, 20.0), child: new Text( '欢迎来到CodeRiver', style: new TextStyle( @@ -47,8 +47,8 @@ class _MarketPageState extends State { fontStyle: FontStyle.normal), ), ), - _btnGithubLogin(BuildContext), - _btnCreadeAccound(BuildContext), + _btnGithubLogin(context), + _btnCreadeAccound(context), Padding( padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 0.0), child: new Text( @@ -99,34 +99,47 @@ Widget _logText(context) { } Widget _btnGithubLogin(context) { - return RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(Icons.star), - onPressed: () { - Snack.show(context, "666"); - }, - label: new Text('使用GitHub账号登录')); + return Container( + child: RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(Icons.star), + onPressed: () { + Fluttertoast.showToast(msg: "使用GitHub账号登录"); + }, + label: new Text( + '使用GitHub账号登录', + style: new TextStyle( + color: Colors.green, fontStyle: FontStyle.normal, fontSize: 16), + )), + width: double.infinity, + height: 50, + ); } Widget _btnCreadeAccound(context) { - return RaisedButton.icon( - color: Colors.transparent, - disabledColor: Colors.transparent, - onPressed: () { - Snack.show(context, "777"); - }, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(null), - label: new Text( - '创建账号', - style: new TextStyle(color: Colors.white, fontStyle: FontStyle.normal), - )); + return Container( + margin: new EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 5.0), + child: RaisedButton( + color: Colors.transparent, + disabledColor: Colors.transparent, + onPressed: () { + Fluttertoast.showToast(msg: "创建账号"); + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + child: new Text( + '创建账号', + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal, fontSize: 16), + )), + width: double.infinity, + height: 50, + ); } Widget weiboOR(String str) { diff --git a/pubspec.yaml b/pubspec.yaml index 08c2843..f079573 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,3 +39,6 @@ flutter: assets: - images/logo.png + - images/github_icon.png + - images/silan_icon.png + - images/wechat_icon.png From 3453fafdeeb1fd723cb0187e67d7ca34aa8a1b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Fri, 4 Jan 2019 11:11:49 +0800 Subject: [PATCH 6/8] sth --- lib/ui/login/LoginPage.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index b789d84..3712970 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -123,7 +123,7 @@ Widget _btnGithubLogin(context) { Widget _btnCreadeAccound(context) { return Container( margin: new EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 5.0), - child: RaisedButton( + child: FlatButton( color: Colors.transparent, disabledColor: Colors.transparent, onPressed: () { From 9e61da0239605f7f4beb5044c4d3442a5730e08b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Sat, 5 Jan 2019 16:54:24 +0800 Subject: [PATCH 7/8] sth --- images/splash_logo.png | Bin 0 -> 15772 bytes lib/fonts/iconfont.ttf | Bin 0 -> 4444 bytes lib/main.dart | 11 ++++--- lib/ui/home/SplashPage.dart | 44 +++++++++++++++++++++++++ lib/ui/login/LoginPage.dart | 64 +++++++++++++++++++++++++++++------- pubspec.yaml | 1 + 6 files changed, 105 insertions(+), 15 deletions(-) create mode 100644 images/splash_logo.png create mode 100644 lib/fonts/iconfont.ttf create mode 100644 lib/ui/home/SplashPage.dart diff --git a/images/splash_logo.png b/images/splash_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0e6f48d177e1b98bb9a128eba8670d0368eff GIT binary patch literal 15772 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
  • 71&i#W;4dE;}un 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 + // 路由 + '/HomePage': (BuildContext context) => new LoginPage() + }, ); } } - diff --git a/lib/ui/home/SplashPage.dart b/lib/ui/home/SplashPage.dart new file mode 100644 index 0000000..72fbc67 --- /dev/null +++ b/lib/ui/home/SplashPage.dart @@ -0,0 +1,44 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + +class SplashPage extends StatefulWidget { + @override + State createState() { + return _SplashPageState(); + } +} + +class _SplashPageState extends State { + @override + Widget build(BuildContext context) { + return new MaterialApp( + theme: new ThemeData(backgroundColor: Colors.blue), + home: new Scaffold( + backgroundColor: Colors.white, + body: new Center( + child: new Image.asset( + "images/splash_logo.png", + width: 170, + height: 170, + ), + ), + )); + } + + @override + void initState() { + super.initState(); + countDown(); + } + +// 倒计时 + void countDown() { + var _duration = new Duration(seconds: 3); + new Future.delayed(_duration, go2HomePage); + } + + void go2HomePage() { + Navigator.of(context).pushReplacementNamed('/HomePage'); + } +} diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index 3712970..16fc26d 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -63,8 +63,11 @@ class _MarketPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.all(10.0), child: weiboOR('新浪微博')), - Padding(padding: EdgeInsets.all(20.0), child: weiboOR('微信')), + padding: EdgeInsets.fromLTRB(0.0, 26.0, 0.0, 0.0), + child: weiboOR('新浪微博')), + Padding( + padding: EdgeInsets.fromLTRB(20.0, 26.0, 0.0, 0.0), + child: weChatOR('微信')), ], ) //_body(), @@ -113,7 +116,7 @@ Widget _btnGithubLogin(context) { label: new Text( '使用GitHub账号登录', style: new TextStyle( - color: Colors.green, fontStyle: FontStyle.normal, fontSize: 16), + color: Colors.green, fontStyle: FontStyle.normal, fontSize: 20), )), width: double.infinity, height: 50, @@ -135,7 +138,7 @@ Widget _btnCreadeAccound(context) { child: new Text( '创建账号', style: new TextStyle( - color: Colors.white, fontStyle: FontStyle.normal, fontSize: 16), + color: Colors.white, fontStyle: FontStyle.normal, fontSize: 20), )), width: double.infinity, height: 50, @@ -143,11 +146,50 @@ Widget _btnCreadeAccound(context) { } Widget weiboOR(String str) { - return RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - icon: new Icon(Icons.star), - label: new Text(str, - style: - new TextStyle(color: Colors.white, fontStyle: FontStyle.normal))); + return Row( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new Image.asset( + 'images/silan_icon.png', + )), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new GestureDetector( + child: new Text( + str, + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal), + ), + onTap: () { + Fluttertoast.showToast(msg: "微博登录"); + }), + ), + ], + ); +} + +Widget weChatOR(String str) { + return Row( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new Image.asset( + 'images/wechat_icon.png', + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new GestureDetector( + child: new Text( + str, + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal), + ), + onTap: () { + Fluttertoast.showToast(msg: "微信登录"); + }), + ), + ], + ); } diff --git a/pubspec.yaml b/pubspec.yaml index f079573..6e07555 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,3 +42,4 @@ flutter: - images/github_icon.png - images/silan_icon.png - images/wechat_icon.png + - images/splash_logo.png From a66ef927036856683b6810d1d4cf53db089de8c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Sun, 6 Jan 2019 18:34:55 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=92=8C=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/GlobalConfig.dart | 13 +- lib/common/NavigationIconView.dart | 21 + lib/ui/Application.dart | 101 +- lib/ui/four/HeroPage.dart | 33 + lib/ui/home/HomePage.dart | 1232 ++++++++++++++++++++++++- lib/ui/home/MinePage.dart | 32 +- lib/ui/home/SeconedPage.dart | 31 +- lib/ui/login/LoginPage.dart | 17 +- lib/ui/login/LoginPhone.dart | 187 ++++ lib/ui/mine/ClearableInputField.dart | 126 +++ lib/ui/mine/MinePage.dart | 0 lib/ui/mine/RegisterNickNamePage.dart | 94 ++ lib/ui/three/AddPage.dart | 33 + 13 files changed, 1847 insertions(+), 73 deletions(-) create mode 100644 lib/common/NavigationIconView.dart create mode 100644 lib/ui/four/HeroPage.dart create mode 100644 lib/ui/login/LoginPhone.dart create mode 100644 lib/ui/mine/ClearableInputField.dart delete mode 100644 lib/ui/mine/MinePage.dart create mode 100644 lib/ui/mine/RegisterNickNamePage.dart create mode 100644 lib/ui/three/AddPage.dart diff --git a/lib/common/GlobalConfig.dart b/lib/common/GlobalConfig.dart index 79e97cf..d7649a3 100644 --- a/lib/common/GlobalConfig.dart +++ b/lib/common/GlobalConfig.dart @@ -9,10 +9,15 @@ class GlobalConfig { static Color color_white_a80 = Color(0xccffffff); static Color color_blue = Color(0xcc0000ff); + static bool dark = false; + static ThemeData themeData = new ThemeData.light(); + static Color searchBackgroundColor = Colors.white10; + static Color cardBackgroundColor = new Color(0xFF222222); + static Color fontColor = Colors.white30; ///导航 static String homeTab = "首页"; - static String secondTab = "二页"; - static String thiredTab = "三页"; - static String fourthTab = "四页"; - static String fifthTab = "五页"; + static String secondTab = "项目中心"; + static String thiredTab = ""; + static String fourthTab = "英雄广场"; + static String fifthTab = "发现"; } diff --git a/lib/common/NavigationIconView.dart b/lib/common/NavigationIconView.dart new file mode 100644 index 0000000..ac0aca8 --- /dev/null +++ b/lib/common/NavigationIconView.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class NavigationIconView { + + NavigationIconView({ + Widget icon, + Widget title, + TickerProvider vsync + }): + item = new BottomNavigationBarItem( + icon: icon, + title: title, + ), + controller = new AnimationController( + duration: kThemeAnimationDuration, + vsync: vsync + ); + + final BottomNavigationBarItem item; + final AnimationController controller; +} \ No newline at end of file diff --git a/lib/ui/Application.dart b/lib/ui/Application.dart index 0924a81..29c327c 100644 --- a/lib/ui/Application.dart +++ b/lib/ui/Application.dart @@ -1,8 +1,11 @@ import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/NavigationIconView.dart'; import 'package:coderiver/common/User.dart'; +import 'package:coderiver/ui/four/HeroPage.dart'; import 'package:coderiver/ui/home/HomePage.dart'; import 'package:coderiver/ui/home/MinePage.dart'; import 'package:coderiver/ui/home/SeconedPage.dart'; +import 'package:coderiver/ui/three/AddPage.dart'; import 'package:flutter/material.dart'; class ApplicationPage extends StatefulWidget { @@ -13,8 +16,101 @@ class ApplicationPage extends StatefulWidget { } class _ApplicationPageState extends State - with SingleTickerProviderStateMixin { - int _page = 0; + with TickerProviderStateMixin { + int _currentIndex = 0; + List _navigationViews; + List _pageList; + StatefulWidget _currentPage; + + @override + void initState() { + super.initState(); + _navigationViews = [ + new NavigationIconView( + icon: new Icon(Icons.account_balance), + title: new Text(GlobalConfig.homeTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.album), + title: new Text(GlobalConfig.secondTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.add_circle_outline), + title: new Text(GlobalConfig.thiredTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.add_alert), + title: new Text(GlobalConfig.fourthTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.perm_identity), + title: new Text(GlobalConfig.fifthTab), + vsync: this, + ), + ]; + for (NavigationIconView view in _navigationViews) { + view.controller.addListener(_rebuild); + } + + _pageList = [ + new HomePage(), + new SeconedPage(), + new AddPage(), + new HeroPage(), + new MinePage() + ]; + _currentPage = _pageList[_currentIndex]; + } + + void _rebuild() { + setState(() {}); + } + + @override + void dispose() { + super.dispose(); + for (NavigationIconView view in _navigationViews) { + view.controller.dispose(); + } + } + + @override + Widget build(BuildContext context) { + final BottomNavigationBar bottomNavigationBar = new BottomNavigationBar( + items: _navigationViews + .map((NavigationIconView navigationIconView) => + navigationIconView.item) + .toList(), + currentIndex: _currentIndex, + fixedColor: Colors.blue, + type: BottomNavigationBarType.fixed, + onTap: (int index) { + setState(() { + _navigationViews[_currentIndex].controller.reverse(); + _currentIndex = index; + _navigationViews[_currentIndex].controller.forward(); + _currentPage = _pageList[_currentIndex]; + }); + } + ); + + return new MaterialApp( + home: new Scaffold( + body: new Center( + child: _currentPage + ), + bottomNavigationBar: bottomNavigationBar, + ), + theme: new ThemeData.light() + ); + } + +} +/*int _page = 0; PageController _pageController; final List _bottomTabs = [ @@ -75,3 +171,4 @@ class _ApplicationPageState extends State }); } } +*/ \ No newline at end of file diff --git a/lib/ui/four/HeroPage.dart b/lib/ui/four/HeroPage.dart new file mode 100644 index 0000000..fb51f54 --- /dev/null +++ b/lib/ui/four/HeroPage.dart @@ -0,0 +1,33 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:flutter/material.dart'; + +class HeroPage extends StatefulWidget { + + @override + _IdeaPageState createState() => new _IdeaPageState(); + +} + +class _IdeaPageState extends State { + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [ + new Container( + + ) + ], + ), + body: new Center( + child: null + ), + ), + theme: GlobalConfig.themeData + ); + } + +} \ No newline at end of file diff --git a/lib/ui/home/HomePage.dart b/lib/ui/home/HomePage.dart index c33d748..b0a5aa2 100644 --- a/lib/ui/home/HomePage.dart +++ b/lib/ui/home/HomePage.dart @@ -1,38 +1,1224 @@ import 'package:coderiver/common/GlobalConfig.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class HomePage extends StatefulWidget { @override - State createState() { - return _HomePageState(); - } + _HomePageState createState() => new _HomePageState(); } -class _HomePageState extends State - with AutomaticKeepAliveClientMixin { - @override - bool get wantKeepAlive => null; +class _HomePageState extends State { + Widget barSearch() { + return new Container( + child: new FlatButton( + onPressed: () {}, + child: new Row( + children: [ + new Container( + child: new Icon( + Icons.search, + size: 18.0, + ), + margin: const EdgeInsets.only(right: 26.0), + ), + new Expanded( + child: new Container( + child: new Text("搜索知乎内容"), + )), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Icon(Icons.settings_overscan, size: 18.0), + ), + width: 40.0, + ), + ], + )), + decoration: new BoxDecoration( + borderRadius: const BorderRadius.all(const Radius.circular(4.0)), + color: GlobalConfig.searchBackgroundColor)); + } - @override - void initState() { - super.initState(); + Widget myInfoCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 10.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + margin: + const EdgeInsets.only(left: 16.0, right: 16.0, bottom: 16.0), + decoration: new BoxDecoration( + color: GlobalConfig.dark == true + ? Colors.white10 + : new Color(0xFFF5F5F5), + borderRadius: new BorderRadius.all(new Radius.circular(6.0))), + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new ListTile( + leading: new Container( + child: new CircleAvatar( + backgroundImage: new NetworkImage( + "https://pic1.zhimg.com/v2-ec7ed574da66e1b495fcad2cc3d71cb9_xl.jpg"), + radius: 20.0), + ), + title: new Container( + margin: const EdgeInsets.only(bottom: 2.0), + child: new Text("learner"), + ), + subtitle: new Container( + margin: const EdgeInsets.only(top: 2.0), + child: new Text("查看或编辑个人主页"), + ), + ), + )), + ), + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "57", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "我的创作", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ), + ], + ), + )), + ), + new Container( + height: 14.0, + width: 1.0, + decoration: new BoxDecoration( + border: new BorderDirectional( + start: new BorderSide( + color: GlobalConfig.dark == true + ? Colors.white12 + : Colors.black12, + width: 1.0))), + ), + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "210", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "关注", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ) + ], + ), + )), + ), + new Container( + height: 14.0, + width: 1.0, + decoration: new BoxDecoration( + border: new BorderDirectional( + start: new BorderSide( + color: GlobalConfig.dark == true + ? Colors.white12 + : Colors.black12, + width: 1.0))), + ), + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "18", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "我的收藏", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ) + ], + ), + )), + ), + new Container( + height: 14.0, + width: 1.0, + decoration: new BoxDecoration( + border: new BorderDirectional( + start: new BorderSide( + color: GlobalConfig.dark == true + ? Colors.white12 + : Colors.black12, + width: 1.0))), + ), + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "33", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "最近浏览", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ) + ], + ), + ))) + ], + ), + ) + ], + ), + ); } - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(GlobalConfig.homeTab), - centerTitle: true, - actions: [ - IconButton( - icon: new Icon(Icons.assignment), - onPressed: () {}, + Widget myServiceCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.book, color: Colors.white), + backgroundColor: Colors.green, + ), + ), + new Container( + child: new Text( + "我的书架", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.flash_on, + color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("我的 Live", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.free_breakfast, + color: Colors.white), + backgroundColor: new Color(0xFFA68F52), + ), + ), + new Container( + child: new Text("私家课", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.attach_money, + color: Colors.white), + backgroundColor: new Color(0xFF355A9B), + ), + ), + new Container( + child: new Text("付费咨询", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ), + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.book, color: Colors.white), + backgroundColor: Colors.green, + ), + ), + new Container( + child: new Text( + "我的书架", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.flash_on, + color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("我的 Live", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.free_breakfast, + color: Colors.white), + backgroundColor: new Color(0xFFA68F52), + ), + ), + new Container( + child: new Text("私家课", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.attach_money, + color: Colors.white), + backgroundColor: new Color(0xFF355A9B), + ), + ), + new Container( + child: new Text("付费咨询", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ), + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.book, color: Colors.white), + backgroundColor: Colors.green, + ), + ), + new Container( + child: new Text( + "我的书架", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.flash_on, + color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("我的 Live", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.free_breakfast, + color: Colors.white), + backgroundColor: new Color(0xFFA68F52), + ), + ), + new Container( + child: new Text("私家课", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.attach_money, + color: Colors.white), + backgroundColor: new Color(0xFF355A9B), + ), + ), + new Container( + child: new Text("付费咨询", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ), + new Container( + margin: const EdgeInsets.only(top: 16.0), + child: new Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.shop, color: Colors.white), + backgroundColor: new Color(0xFF088DB4), + ), + ), + new Container( + child: new Text( + "已购", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.radio, color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("余额礼卷", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.wifi_tethering, + color: Colors.white), + backgroundColor: new Color(0xFF029A3F), + ), + ), + new Container( + child: new Text("服务", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ) + ], + ), + ); + } + + Widget settingCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.invert_colors, + color: Colors.white), + backgroundColor: new Color(0xFFB88800), + ), + ), + new Container( + child: new Text("社区建设", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.golf_course, color: Colors.white), + backgroundColor: new Color(0xFF63616D), + ), + ), + new Container( + child: new Text("反馈", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () { + setState(() { + if (GlobalConfig.dark == true) { + GlobalConfig.themeData = new ThemeData( + primaryColor: Colors.white, + scaffoldBackgroundColor: new Color(0xFFEBEBEB), + ); + GlobalConfig.searchBackgroundColor = + new Color(0xFFEBEBEB); + GlobalConfig.cardBackgroundColor = Colors.white; + GlobalConfig.fontColor = Colors.black54; + GlobalConfig.dark = false; + } else { + GlobalConfig.themeData = new ThemeData.dark(); + GlobalConfig.searchBackgroundColor = Colors.white10; + GlobalConfig.cardBackgroundColor = new Color(0xFF222222); + GlobalConfig.fontColor = Colors.white30; + GlobalConfig.dark = true; + } + }); + }, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon( + GlobalConfig.dark == true + ? Icons.wb_sunny + : Icons.brightness_2, + color: Colors.white), + backgroundColor: new Color(0xFFB86A0D), + ), + ), + new Container( + child: new Text( + GlobalConfig.dark == true ? "日间模式" : "夜间模式", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.perm_data_setting, + color: Colors.white), + backgroundColor: new Color(0xFF636269), + ), + ), + new Container( + child: new Text("设置", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ); + } + + Widget videoCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(left: 16.0, bottom: 20.0), + child: new Row( + children: [ + new Container( + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.videocam, color: Colors.white), + backgroundColor: new Color(0xFFB36905), + ), + ), + new Expanded( + child: new Container( + margin: const EdgeInsets.only(left: 8.0), + child: new Text( + "视频创作", + style: new TextStyle(fontSize: 18.0), + ), + ), + ), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Text( + "拍一个", + style: new TextStyle(color: Colors.blue), + )), + ) + ], + )), + new Container( + margin: const EdgeInsets.only(left: 16.0), + child: new SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: new Row( + children: [ + new Container( + width: MediaQuery.of(context).size.width / 2.5, + margin: const EdgeInsets.only(right: 6.0), + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic2.zhimg.com/50/v2-5942a51e6b834f10074f8d50be5bbd4d_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))), + new Container( + margin: const EdgeInsets.only(right: 6.0), + width: MediaQuery.of(context).size.width / 2.5, + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic3.zhimg.com/50/v2-7fc9a1572c6fc72a3dea0b73a9be36e7_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))), + new Container( + margin: const EdgeInsets.only(right: 6.0), + width: MediaQuery.of(context).size.width / 2.5, + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic4.zhimg.com/50/v2-898f43a488b606061c877ac2a471e221_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))), + new Container( + width: MediaQuery.of(context).size.width / 2.5, + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic1.zhimg.com/50/v2-0008057d1ad2bd813aea4fc247959e63_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + ), + ), + ) + ], + )); + } + + Widget ideaCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(left: 16.0, bottom: 20.0), + child: new Row( + children: [ + new Container( + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.all_inclusive, color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Expanded( + child: new Container( + margin: const EdgeInsets.only(left: 8.0), + child: new Text( + "想法", + style: new TextStyle(fontSize: 18.0), + ), + ), + ), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Text( + "去往想法首页", + style: new TextStyle(color: Colors.blue), + )), + ) + ], + )), + new Container( + margin: const EdgeInsets.only(left: 16.0), + child: new SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: new Row( + children: [ + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "苹果 WWDC 2018 正在举行", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "软件更新意料之中,硬件之谜...", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic2.zhimg.com/50/v2-55039fa535f3fe06365c0fcdaa9e3847_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "此刻你的桌子是什么样子?", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "晒一晒你的书桌/办公桌", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic3.zhimg.com/v2-b4551f702970ff37709cdd7fd884de5e_294x245|adx4.png"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "关于高考你印象最深的是...", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "聊聊你的高三生活", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic2.zhimg.com/50/v2-ce2e01a047e4aba9bfabf8469cfd3e75_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "夏天一定要吃的食物有哪些", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "最适合夏天吃的那种", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic1.zhimg.com/50/v2-bb3806c2ced60e5b7f38a0aa06b89511_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + ], + ), + ), ) ], - ), + )); + } - body: Text(('开发中..'))); + @override + Widget build(BuildContext context) { + return new MaterialApp( + theme: GlobalConfig.themeData, + home: new Scaffold( + appBar: new AppBar( + title: new Text('首页'), + actions: [new Container()], + ), + body: new SingleChildScrollView( + child: new Container( + child: new Column( + children: [ + myInfoCard(), + myServiceCard(), + myServiceCard(), + settingCard(), + videoCard(), + ideaCard() + ], + ), + ), + )), + ); } } diff --git a/lib/ui/home/MinePage.dart b/lib/ui/home/MinePage.dart index a67cae4..dfbbbb0 100644 --- a/lib/ui/home/MinePage.dart +++ b/lib/ui/home/MinePage.dart @@ -9,29 +9,19 @@ class MinePage extends StatefulWidget { } } -class _MinePageState extends State - with AutomaticKeepAliveClientMixin { - @override - bool get wantKeepAlive => null; - - @override - void initState() { - super.initState(); - } - +class _MinePageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(GlobalConfig.homeTab), - centerTitle: true, - actions: [ - IconButton( - icon: new Icon(Icons.assignment), - onPressed: () {}, - ) - ], + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [new Container()], + ), + body: new Center( + child: new Text('想法'), + ), ), - body: Text(('开发中..'))); + theme: GlobalConfig.themeData); } } diff --git a/lib/ui/home/SeconedPage.dart b/lib/ui/home/SeconedPage.dart index 10c3209..3f7e2e9 100644 --- a/lib/ui/home/SeconedPage.dart +++ b/lib/ui/home/SeconedPage.dart @@ -9,29 +9,20 @@ class SeconedPage extends StatefulWidget { } } -class _SeconedPageState extends State - with AutomaticKeepAliveClientMixin { - @override - bool get wantKeepAlive => null; - - @override - void initState() { - super.initState(); - } +class _SeconedPageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(GlobalConfig.homeTab), - centerTitle: true, - actions: [ - IconButton( - icon: new Icon(Icons.assignment), - onPressed: () {}, - ) - ], + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [new Container()], + ), + body: new Center( + child: new Text('想法'), + ), ), - body: Text(('开发中..'))); + theme: GlobalConfig.themeData); } } diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index 16fc26d..ab4686f 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -2,6 +2,10 @@ import 'package:coderiver/common/GlobalConfig.dart'; import 'package:coderiver/common/ShowToast.dart'; import 'package:coderiver/common/Snack.dart'; import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/ui/Application.dart'; +import 'package:coderiver/ui/home/HomePage.dart'; +import 'package:coderiver/ui/login/LoginPhone.dart'; +import 'package:coderiver/ui/mine/RegisterNickNamePage.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -94,7 +98,7 @@ Widget _logText(context) { Navigator.push( context, new MaterialPageRoute( - builder: (BuildContext context) => new LoginPage())); + builder: (BuildContext context) => new LoginPhonePage())); }, ), ), @@ -111,7 +115,10 @@ Widget _btnGithubLogin(context) { borderRadius: BorderRadius.all(Radius.circular(50))), icon: new Icon(Icons.star), onPressed: () { - Fluttertoast.showToast(msg: "使用GitHub账号登录"); + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => new ApplicationPage())); }, label: new Text( '使用GitHub账号登录', @@ -130,7 +137,11 @@ Widget _btnCreadeAccound(context) { color: Colors.transparent, disabledColor: Colors.transparent, onPressed: () { - Fluttertoast.showToast(msg: "创建账号"); + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => + new RegisterNickNamePage())); }, shape: new RoundedRectangleBorder( side: BorderSide(color: Colors.white), diff --git a/lib/ui/login/LoginPhone.dart b/lib/ui/login/LoginPhone.dart new file mode 100644 index 0000000..4ce6a80 --- /dev/null +++ b/lib/ui/login/LoginPhone.dart @@ -0,0 +1,187 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/ShowToast.dart'; +import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/ui/login/LoginPage.dart'; +import 'package:coderiver/ui/mine/ClearableInputField.dart'; +import 'package:coderiver/ui/mine/RegisterNickNamePage.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class LoginPhonePage extends StatefulWidget { + @override + _LoginPhonePageState createState() => new _LoginPhonePageState(); +} + +class _LoginPhonePageState extends State { + ClearableInputField _userNameInputForm; + ClearableInputField _psdInputForm; + TextEditingController _userNameController = TextEditingController(); + TextEditingController _psdController = TextEditingController(); + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + floatingActionButton: new Theme( + data: Theme.of(context).copyWith(accentColor: Colors.white), + child: new FloatingActionButton( + onPressed: () { + Fluttertoast.showToast(msg: "....."); + }, + child: new Icon(Icons.arrow_forward_ios, + color: GlobalConfig.colorPrimary), + ), + ), + body: Container( + alignment: AlignmentDirectional.topStart, + padding: EdgeInsets.only(top: 40, left: 20, right: 20), + constraints: BoxConstraints.expand(), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [GREEN, GlobalConfig.colorPrimary]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(6.0), + child: new GestureDetector( + child: Icon(Icons.arrow_back_ios, color: Colors.white), + onTap: () { + Navigator.pop(context); + }), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 20.0), + child: new Text( + '登录', + style: new TextStyle( + fontSize: 28.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 10.0), + child: new Text( + '手机号码', + style: new TextStyle( + fontSize: 20.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + SizedBox(height: 0.0), + _buildUserNameInputForm(), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 20.0, 0.0, 0.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + new Expanded( + child: new Container( + margin: const EdgeInsets.only(left: 0.0), + child: new Text( + "输入密码", + style: new TextStyle( + fontSize: 18.0, + color: Colors.white, + ), + ), + ), + ), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Text( + "隐藏", + style: new TextStyle( + color: Colors.white, fontSize: 18), + textAlign: TextAlign.right, + )), + ) + ]), + ), + SizedBox(height: 0.0), + _buildPsdInputForm(), + Expanded( + child: Container( + padding: EdgeInsets.all(5.0), + child: _emailText(context), + ), + flex: 1, + ), + ], + ), + ), + ), + ); + } + + Widget _buildUserNameInputForm() { + _userNameInputForm = ClearableInputField( + controller: _userNameController, + inputType: TextInputType.text, + hintTxt: null, + showPrefixIcon: false, + hintStyle: new TextStyle(color: Colors.white, fontSize: 18.0), + textStyle: new TextStyle(color: Colors.white, fontSize: 24.0), + padding: const EdgeInsets.fromLTRB(10.0, 4.0, 0.0, 20.0), + ); + return _userNameInputForm; + } + + Widget _buildPsdInputForm() { + _psdInputForm = ClearableInputField( + controller: _psdController, + inputType: TextInputType.text, + hintTxt: null, + showPrefixIcon: true, + hintStyle: new TextStyle(color: Colors.white, fontSize: 18.0), + textStyle: new TextStyle(color: Colors.white, fontSize: 24.0), + padding: const EdgeInsets.fromLTRB(10.0, 4.0, 0.0, 20.0), + ); + return _psdInputForm; + } +} + +Widget _emailText(context) { + return new Align( + alignment: FractionalOffset.bottomLeft, + child: new Padding( + padding: EdgeInsets.only(right: 0.0, top: 0.0), + child: _btnCreadeAccound(context), + ), + ); +} + +Widget _btnCreadeAccound(context) { + return Container( + margin: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 20.0), + child: FlatButton( + color: Colors.transparent, + disabledColor: Colors.transparent, + onPressed: () { + Fluttertoast.showToast(msg: "使用邮箱"); + /*Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => + new RegisterNickNamePage()));*/ + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + child: new Text( + '使用邮箱', + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal, fontSize: 20), + )), + height: 50, + width: 160, + ); +} diff --git a/lib/ui/mine/ClearableInputField.dart b/lib/ui/mine/ClearableInputField.dart new file mode 100644 index 0000000..26de932 --- /dev/null +++ b/lib/ui/mine/ClearableInputField.dart @@ -0,0 +1,126 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class ClearableInputField extends StatefulWidget { + final ValueChanged onchange; + final ValueChanged onSubmit; + final String hintTxt; + final bool autoFocus; + final TextStyle textStyle; + final TextStyle hintStyle; + final InputBorder border; + final TextEditingController controller; + final TextInputType inputType; + final bool obscureText; + final EdgeInsetsGeometry padding; + final Color fillColor; + final bool showPrefixIcon; + + ClearableInputField( + {this.onchange, + this.hintTxt, + this.autoFocus = true, + this.onSubmit, + this.textStyle, + this.hintStyle, + this.border, + this.fillColor, + this.controller, + this.inputType, + this.padding, + this.showPrefixIcon = true, + this.obscureText = false}); + + @override + State createState() => new _ClearableInputFieldState(); +} + +class _ClearableInputFieldState extends State { + bool _showClearIcon = false; + FocusNode _focusNode; + + @override + Widget build(BuildContext context) { + var _controller = (null == widget.controller) + ? TextEditingController() + : widget.controller; + _focusNode = FocusNode(); + return TextField( + obscureText: widget.obscureText, + keyboardType: widget.inputType, + autofocus: widget.autoFocus, + focusNode: _focusNode, + controller: _controller, + cursorColor: Colors.white, + style: widget.textStyle, + onChanged: onTextChanged, + onSubmitted: onSubmit, + decoration: InputDecoration( + contentPadding: + (null == widget.padding) ? EdgeInsets.all(0.0) : widget.padding, + /* suffixIcon: Icon(Icons.chevron_right), //输入框内右侧图标 + icon: Icon(Icons.person), //输入框左侧图标 + prefixIcon: Icon(Icons.skip_previous), //输入框内左侧图标 + helperText: 'helperText',*/ + + hintText: widget.hintTxt, + hintStyle: widget.hintStyle, + fillColor: widget.fillColor, + filled: null != widget.fillColor, + border: widget.border, + labelText: widget.hintTxt, + labelStyle: widget.hintStyle, + errorBorder: widget.border, + focusedBorder: widget.border, + enabledBorder: widget.border, + disabledBorder: widget.border, + focusedErrorBorder: widget.border, + suffixIcon: _buildDefaultClearIcon(context, _controller), + prefixIcon: widget.showPrefixIcon + ? (_buildDefaultPrefixIcon()) + : Icon(Icons.person)), + ); + } + + void onTextChanged(String str) { + bool newState = (str.length <= 0) ? false : true; + if (newState != _showClearIcon) { + setState(() { + _showClearIcon = newState; + }); + } + widget.onchange(str); + } + + void onSubmit(String str) { + SystemChannels.textInput.invokeMethod('TextInput.hide'); +// FocusScope.of(context).requestFocus(new FocusNode()); + widget.onSubmit(str); + } + + Widget _buildDefaultClearIcon( + BuildContext context, TextEditingController controller) { + return Visibility( + child: InkWell( + child: Icon( + Icons.close, + color: Colors.white, + ), + onTap: () { + controller.clear(); + widget.onchange(""); + FocusScope.of(context).requestFocus(_focusNode); + setState(() { + _showClearIcon = false; + }); + }, + ), + visible: _showClearIcon, + ); + } + + Widget _buildDefaultPrefixIcon() { + return null; + //return Icon(Icons.close, color: Colors.white); + } +} diff --git a/lib/ui/mine/MinePage.dart b/lib/ui/mine/MinePage.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/ui/mine/RegisterNickNamePage.dart b/lib/ui/mine/RegisterNickNamePage.dart new file mode 100644 index 0000000..1fa3cd5 --- /dev/null +++ b/lib/ui/mine/RegisterNickNamePage.dart @@ -0,0 +1,94 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/ui/login/LoginPhone.dart'; +import 'package:coderiver/ui/mine/ClearableInputField.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class RegisterNickNamePage extends StatefulWidget { + @override + _RegisterNickNamePageState createState() => new _RegisterNickNamePageState(); +} + +class _RegisterNickNamePageState extends State { + ClearableInputField _userNameInputForm; + TextEditingController _userNameController = TextEditingController(); + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + floatingActionButton: new Theme( + data: Theme.of(context).copyWith(accentColor: Colors.white), + child: new FloatingActionButton( + onPressed: () { + + }, + child: new Icon(Icons.arrow_forward_ios, + color: GlobalConfig.colorPrimary), + ), + ), + body: Container( + alignment: AlignmentDirectional.topStart, + padding: EdgeInsets.only(top: 40, left: 20, right: 20), + constraints: BoxConstraints.expand(), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [GREEN, GlobalConfig.colorPrimary]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(6.0), + child: new GestureDetector( + child: Icon(Icons.arrow_back_ios, color: Colors.white), + onTap: () { + Navigator.pop(context); + }), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 20.0), + child: new Text( + '您的昵称?', + style: new TextStyle( + fontSize: 28.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 20.0), + + child: new Text( + '昵称', + style: new TextStyle( + fontSize: 20.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + SizedBox(height: 0.0), + _buildUserNameInputForm(), + ], + ), + ), + ), + ); + } + + Widget _buildUserNameInputForm() { + _userNameInputForm = ClearableInputField( + controller: _userNameController, + inputType: TextInputType.text, + hintTxt: null, + hintStyle: new TextStyle(color: Colors.white, fontSize: 18.0), + textStyle: new TextStyle(color: Colors.white, fontSize: 24.0), + padding: const EdgeInsets.fromLTRB(10.0, 10.0, 0.0, 20.0), + ); + return _userNameInputForm; + } +} diff --git a/lib/ui/three/AddPage.dart b/lib/ui/three/AddPage.dart new file mode 100644 index 0000000..e29e5b8 --- /dev/null +++ b/lib/ui/three/AddPage.dart @@ -0,0 +1,33 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:flutter/material.dart'; + +class AddPage extends StatefulWidget { + + @override + _IdeaPageState createState() => new _IdeaPageState(); + +} + +class _IdeaPageState extends State { + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [ + new Container( + + ) + ], + ), + body: new Center( + child: null + ), + ), + theme: GlobalConfig.themeData + ); + } + +} \ No newline at end of file