Commit 829ea00b authored by 窦文's avatar 窦文

Merge branch 'master' of git.naiterui.com:zouzhisheng/netrain_flutter_app

parents 9c0e86b5 bb8eff15
import 'package:flutter/material.dart';
/// 项目颜色配置 /// 项目颜色配置
class AppColors{ class AppColors{
/// 标题背景颜色 /// 标题背景颜色
static const titleBackgroundColor = 0xffffffff; static const titleBackgroundColor = Color(0xffffffff);
/// 主色 /// 主色
static const mainColor = 0xff2893FF; static const mainColor = Color(0xff2893FF);
/// hint颜色 /// hint颜色
static const hintText = 0xffb4b4b4; static const hintText = Color(0xffb4b4b4);
/// 输入框字体颜色 /// 输入框字体颜色
static const EditTextColor = 0xff333333; static const EditTextColor = Color(0xff333333);
static const color_999 = 0xff999999; static const color_999 = Color(0xff999999);
/// 页面背景颜色 /// 页面背景颜色
static const scaffoldBackgroundColor = 0xffffffff; static const scaffoldBackgroundColor = Color(0xffffffff);
/// 分割线颜色 /// 分割线颜色
static const dividerColor = 0xffeeeeee; static const dividerColor = Color(0xffeeeeee);
/// 控件禁用时的颜色 /// 控件禁用时的颜色
static const disabledColor = 0xffdddddd; static const disabledColor = Color(0xffdddddd);
static const blue_bg_color = 0xFF2893FF; static const blue_bg_color = Color(0xFF2893FF);
static const blue_bg_color2 = 0xFFEEF9FF; static const blue_bg_color2 = Color(0xFFEEF9FF);
static const text_default_color = 0xff666666; static const text_default_color = Color(0xff666666);
static const white_transparent_50 = 0x8CFFFFFF; static const white_transparent_50 = Color(0x8CFFFFFF);
} }
\ No newline at end of file
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
extension IntValue on int{
/// 返回根据屏幕宽高适配后尺寸(单位 dp or pt)
double dp(){
return toDouble().dp();
}
/// 返回间距,应用于四个位置:top,bottom,left,right
EdgeInsets spacingAll(){
return EdgeInsets.all(dp());
}
EdgeInsets spacingLeft(){
return EdgeInsets.only(left: dp());
}
EdgeInsets spacingRight(){
return EdgeInsets.only(right: dp());
}
EdgeInsets spacingTop(){
return EdgeInsets.only(top: dp());
}
EdgeInsets spacingBottom(){
return EdgeInsets.only(bottom: dp());
}
EdgeInsets spacingVertical(){
return EdgeInsets.symmetric(vertical: dp());
}
EdgeInsets spacingHorizontal(){
return EdgeInsets.symmetric(horizontal: dp());
}
}
extension DoubleValue on double{
/// 返回根据屏幕宽高适配后尺寸(单位 dp or pt)
double dp(){
return ScreenUtil.getInstance().getAdapterSize(this);
}
EdgeInsets spacingAll(){
return EdgeInsets.all(dp());
}
EdgeInsets spacingLeft(){
return EdgeInsets.only(left: dp());
}
EdgeInsets spacingRight(){
return EdgeInsets.only(right: dp());
}
EdgeInsets spacingTop(){
return EdgeInsets.only(top: dp());
}
EdgeInsets spacingBottom(){
return EdgeInsets.only(bottom: dp());
}
EdgeInsets spacingVertical(){
return EdgeInsets.symmetric(vertical: dp());
}
EdgeInsets spacingHorizontal(){
return EdgeInsets.symmetric(horizontal: dp());
}
}
...@@ -33,5 +33,11 @@ class Images{ ...@@ -33,5 +33,11 @@ class Images{
static const img_home_treatment = "${imagesPath}img_home_treatment.png"; static const img_home_treatment = "${imagesPath}img_home_treatment.png";
static const ic_home_list = "${imagesPath}ic_home_list.png"; static const ic_home_list = "${imagesPath}ic_home_list.png";
static const img_blank_nomessage = "${imagesPath}img_blank_nomessage.png"; static const img_blank_nomessage = "${imagesPath}img_blank_nomessage.png";
static const tab_home_normal = "${imagesPath}tab_home_normal.png";
static const tab_home_selected = "${imagesPath}tab_home_selected.png";
static const tab_my_normal = "${imagesPath}tab_my_normal.png";
static const tab_my_selected = "${imagesPath}tab_my_selected.png";
static const tab_patient_normal = "${imagesPath}tab_patient_normal.png";
static const tab_patient_selected = "${imagesPath}tab_patient_selected.png";
} }
\ No newline at end of file
import 'package:dio/dio.dart';
class ApiPostSomeUrl {
/**
* 登录方法
* id 参数
*/
dynamic get(String curNum) async {
return await Dio().get(
"http://swyy.cying.com.cn/common/preheat",
queryParameters: {
"curNum": curNum,
},
);
}
}
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/jishuaishuai/MVVMDemo/ViewModelDemo.dart';
import 'package:provider/provider.dart';
class MVVMViewDemo extends StatefulWidget {
MVVMViewDemo({Key key}) : super(key: key);
@override
_MVVMViewDemoState createState() {
return _MVVMViewDemoState();
}
}
class _MVVMViewDemoState extends State<MVVMViewDemo> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("MVVM模式"),
),
body: ElevatedButton(
child: Text("点击调用get请求"),
onPressed: ()async{
context.read<ViewModelGet>().get("1");
},
),
);
}
}
\ No newline at end of file
import 'ModelDemo.dart';
import 'package:flutter/material.dart';
import 'dart:convert' as JSON;
class ViewModelGet extends ChangeNotifier{
ApiPostSomeUrl _model = ApiPostSomeUrl();
void get(String curNum) async{
var result = await _model.get(curNum);
print(result);
// Map<,Object>map =JSON.jsonDecode(result);
List list = JSON.jsonDecode(result);
print(list);
}
}
\ No newline at end of file
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/jishuaishuai/MVVMDemo/ViewDemo.dart';
class fifthDemo extends StatefulWidget { class fifthDemo extends StatefulWidget {
fifthDemo({Key key}) : super(key: key); // fifthDemo({Key key}) : super(key: key);
@override @override
_fifthDemoState createState() { _fifthDemoState createState() {
...@@ -35,7 +36,7 @@ class _fifthDemoState extends State<fifthDemo> { ...@@ -35,7 +36,7 @@ class _fifthDemoState extends State<fifthDemo> {
} }
class fifthListViewDemo extends StatefulWidget { class fifthListViewDemo extends StatefulWidget {
fifthListViewDemo({Key key}) : super(key: key); // fifthListViewDemo({Key key}) : super(key: key);
@override @override
_fifthListViewDemoState createState() { _fifthListViewDemoState createState() {
...@@ -71,11 +72,16 @@ class _fifthListViewDemoState extends State<fifthListViewDemo> { ...@@ -71,11 +72,16 @@ class _fifthListViewDemoState extends State<fifthListViewDemo> {
} }
return Container( return Container(
child: Flex( child: Flex(
direction: Axis.vertical,
children: [ children: [
Text(listArr[index].toString()), Text(listArr[index].toString()),
ElevatedButton(onPressed: (){ ElevatedButton(onPressed: (){
print("点击了"); Navigator.of(context).push(MaterialPageRoute(
}, child:Text("我是个按钮") ), builder: (context){
return MVVMViewDemo();
}
));
}, child:Text("点击进入MVVM设计模式页面") ),
Container( Container(
width: 100, width: 100,
height: 300, height: 300,
...@@ -86,10 +92,12 @@ class _fifthListViewDemoState extends State<fifthListViewDemo> { ...@@ -86,10 +92,12 @@ class _fifthListViewDemoState extends State<fifthListViewDemo> {
), ),
); );
}), }),
onRefresh: _onRefresh,
), ),
); );
} }
Future _onRefresh() async { Future _onRefresh() async {
await Future.delayed( await Future.delayed(
Duration(seconds: 2), Duration(seconds: 2),
......
import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/Images.dart'; import 'package:netrain_flutter_app/common/Images.dart';
import 'secondVC.dart'; import 'secondVC.dart';
...@@ -141,6 +142,9 @@ class imageiconDemo extends StatelessWidget { ...@@ -141,6 +142,9 @@ class imageiconDemo extends StatelessWidget {
// fit: BoxFit.fitWidth // fit: BoxFit.fitWidth
// ), // ),
Image.asset(Images.ic_my_info), Image.asset(Images.ic_my_info),
ElevatedButton(onPressed: (){
apiGet();
}, child: Text("测试点击事件请求"))
], ],
); );
...@@ -150,3 +154,10 @@ class imageiconDemo extends StatelessWidget { ...@@ -150,3 +154,10 @@ class imageiconDemo extends StatelessWidget {
} }
} }
class apiGet{
var result = Dio().get("http://api.td0f7/cn:8083/dio/dio/test?id=1");
}
\ No newline at end of file
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/jishuaishuai/fifthVC.dart';
class fourthDemo extends StatefulWidget { class fourthDemo extends StatefulWidget {
fourthDemo({Key key}) : super(key: key); fourthDemo({Key key}) : super(key: key);
...@@ -74,7 +75,9 @@ class _someDemoState extends State<someDemo> { ...@@ -74,7 +75,9 @@ class _someDemoState extends State<someDemo> {
Text(e.toString()), Text(e.toString()),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context){
return fifthDemo();
}));
}, },
child: Text("点击进入第5个页面")) child: Text("点击进入第5个页面"))
], ],
......
...@@ -17,7 +17,7 @@ class twoVCdemo extends StatelessWidget { ...@@ -17,7 +17,7 @@ class twoVCdemo extends StatelessWidget {
body: Column( body: Column(
children: [ children: [
ElevatedButton( ElevatedButton(
child: Text("第二页面的按钮,跳转带参数过去"), child: Text("传参数进入第三个页面"),
onPressed: () { onPressed: () {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (context) { builder: (context) {
...@@ -41,6 +41,28 @@ class twoVCdemo extends StatelessWidget { ...@@ -41,6 +41,28 @@ class twoVCdemo extends StatelessWidget {
direction: Axis.horizontal, direction: Axis.horizontal,
children: [ children: [
Image.asset(Images.ic_home_normal, alignment: Alignment.center,), Image.asset(Images.ic_home_normal, alignment: Alignment.center,),
Align(
alignment:Alignment(-0.5,0.5),
child: Stack(
alignment: AlignmentDirectional.center,
children: [
Container(
width: 100,
height: 30,
color: Colors.orange,
),
Container(
color: Colors.red,
child: Text("点击进入"),
),
Positioned(
right: 0,
top: 5,
child: Image.asset(Images.ic_home_normal)),
],
),
)
], ],
) )
......
...@@ -137,7 +137,7 @@ class _LayoutGroupState extends State<LayoutPage> { ...@@ -137,7 +137,7 @@ class _LayoutGroupState extends State<LayoutPage> {
), ),
), ),
FractionallySizedBox( FractionallySizedBox(
widthFactor: 0.5, widthFactor: 1,
child: Container( child: Container(
decoration: BoxDecoration(color: Colors.grey), decoration: BoxDecoration(color: Colors.grey),
child: Text('屏幕的二分之一'), child: Text('屏幕的二分之一'),
......
import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/common/Images.dart';
import 'package:netrain_flutter_app/laishanqi/netrain/maintab/DoctorHomePage.dart';
class doctorMainPage extends StatefulWidget {
@override
_doctorMainPageState createState() {
return _doctorMainPageState();
}
}
class _doctorMainPageState extends State<doctorMainPage> {
var currentIndex = 0;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: Container(
height: 50,
child: BottomNavigationBar(
backgroundColor: Colors.white,
selectedItemColor: AppColors.mainColor,
unselectedItemColor: AppColors.hintText,
selectedFontSize: 10,
unselectedFontSize: 10,
currentIndex: currentIndex,
onTap: (index) {
setState(() {
currentIndex = index;
});
},
items: [
BottomNavigationBarItem(
activeIcon: Image.asset(Images.tab_home_selected,width: 20,height: 20,),
icon: Image.asset(Images.tab_home_normal,width: 20,height: 20),
label: "首页"),
BottomNavigationBarItem(
activeIcon: Image.asset(Images.tab_patient_selected,width: 20,height: 20),
icon: Image.asset(Images.tab_patient_normal,width: 20,height: 20),
label: "患者"),
BottomNavigationBarItem(
activeIcon: Image.asset(Images.tab_my_selected,width: 20,height: 20),
icon: Image.asset(Images.tab_my_normal,width: 20,height: 20),
label: "我的"),
],
),
),
body: showBody(),
);
}
Widget showBody() {
if (currentIndex == 0) {
return DoctorHomePage();
} else if (currentIndex == 1) {
return Text("222");
} else {
return Text("33333");
}
}
}
...@@ -3,6 +3,7 @@ import 'package:flutter/cupertino.dart'; ...@@ -3,6 +3,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/AppColors.dart'; import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/common/Images.dart'; import 'package:netrain_flutter_app/common/Images.dart';
import 'package:netrain_flutter_app/common/Ext.dart';
class DoctorHomePage extends StatefulWidget { class DoctorHomePage extends StatefulWidget {
@override @override
...@@ -17,12 +18,11 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -17,12 +18,11 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
void initState() { void initState() {
super.initState(); super.initState();
_scrollController.addListener(() { _scrollController.addListener(() {
print("华东 ${_scrollController.offset}"); if (_scrollController.offset > 302.dp() && !isShowBlackTitle) {
if (_scrollController.offset > 270 && !isShowBlackTitle) {
setState(() { setState(() {
isShowBlackTitle = true; isShowBlackTitle = true;
}); });
} else if (_scrollController.offset < 270 && isShowBlackTitle) { } else if (_scrollController.offset < 302.dp() && isShowBlackTitle) {
setState(() { setState(() {
isShowBlackTitle = false; isShowBlackTitle = false;
}); });
...@@ -43,41 +43,57 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -43,41 +43,57 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
controller: _scrollController, controller: _scrollController,
slivers: [ slivers: [
SliverAppBar( SliverAppBar(
titleSpacing: 16, titleSpacing: 16.dp(),
toolbarHeight: 50, toolbarHeight: 50.dp(),
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
pinned: true, pinned: true,
floating: false, floating: false,
// snap: true,
stretch: true,
title: Container(
child: Text(
"我的工作站",
style: TextStyle(
fontSize: 21,
fontWeight: FontWeight.bold,
color: isShowBlackTitle ? Colors.black : Colors.white),
),
),
expandedHeight: 352.dp() - ScreenUtil.getStatusBarH(context),
flexibleSpace: FlexibleSpaceBar( flexibleSpace: FlexibleSpaceBar(
collapseMode: CollapseMode.pin, collapseMode: CollapseMode.pin,
// 拉伸的样式
stretchModes: [StretchMode.blurBackground,StretchMode.zoomBackground],
background: Container( background: Container(
color: Color(AppColors.mainColor), decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xff379BFF), Color(0xff0B7CEE)])),
child: Stack( child: Stack(
children: [ children: [
Positioned( Positioned(
child: ClipOval( child: ClipOval(
//圆形裁剪 //圆形裁剪
child: Container( child: Container(
height: 56, height: 56.dp(),
width: 56, width: 56.dp(),
constraints: constraints:
BoxConstraints(maxHeight: 100, maxWidth: 100), BoxConstraints(maxHeight: 100.dp(), maxWidth: 100.dp()),
foregroundDecoration: BoxDecoration( foregroundDecoration: BoxDecoration(
borderRadius: BorderRadius.circular(50), borderRadius: BorderRadius.circular(50.dp()),
border: Border.all( border: Border.all(
color: Colors.white, color: Colors.white,
width: 2, width: 2.dp(),
style: BorderStyle.solid)), style: BorderStyle.solid)),
child: Image.network( child: Image.network(
'http://pix2.tvzhe.com/thumb/star/60/87/260x346.jpg', 'http://pix2.tvzhe.com/thumb/star/60/87/260x346.jpg',
height: 56, height: 56.dp(),
width: 56, width: 56.dp(),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), ),
), ),
top: 106, top: 106.dp(),
left: 18, left: 18.dp(),
), ),
Positioned( Positioned(
child: Text( child: Text(
...@@ -87,72 +103,62 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -87,72 +103,62 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
fontSize: 18, fontSize: 18,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
top: 106, top: 106.dp(),
left: 82, left: 82.dp(),
), ),
Positioned( Positioned(
child: Text( child: Text(
"主任医师", "主任医师",
style: TextStyle(color: Colors.white, fontSize: 12), style: TextStyle(color: Colors.white, fontSize: 12),
), ),
top: 111, top: 111.dp(),
left: 144, left: 144.dp(),
), ),
Positioned( Positioned(
child: Container( child: Container(
width: 68, width: 68.dp(),
height: 10, height: 20.dp(),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white30, color: Colors.white30,
borderRadius: BorderRadius.circular(10)), borderRadius: BorderRadius.circular(10.dp())),
child: child: Row(
// Text(
// "主任医师",
// textAlign: TextAlign.center,
// style: TextStyle(
// backgroundColor: Colors.amber,
// color: Colors.white,
// fontSize: 11,
// ),
// ),
Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
"主任医师", "浏览主页",
textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: Colors.white, height: 1.1,
fontSize: 11, color: Colors.white,
fontSize: 11
), ),
), ),
Image.asset(Images.ic_more_white_little) Image.asset(Images.ic_more_white_little)
], ],
), ),
), ),
top: 138, top: 138.dp(),
left: 82, left: 82.dp(),
), ),
Positioned( Positioned(
child: Image.asset( child: Image.asset(
Images.ic_code, Images.ic_code,
height: 30, height: 30.dp(),
width: 30, width: 30.dp(),
), ),
top: 117, top: 117.dp(),
right: 16, right: 16.dp(),
), ),
Positioned( Positioned(
child: Container( child: Container(
child: _getStatisticsView(), child: _getStatisticsView(),
width: ScreenUtil.getScreenW(context), width: ScreenUtil.getScreenW(context),
), ),
top: 185, top: 185.dp(),
), ),
Positioned( Positioned(
child: Container( child: Container(
padding: EdgeInsets.only(left: 8.dp(),right: 8.dp()),
child: Flex( child: Flex(
direction: Axis.horizontal, direction: Axis.horizontal,
children: [ children: [
...@@ -162,37 +168,25 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -162,37 +168,25 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
), ),
width: ScreenUtil.getScreenW(context), width: ScreenUtil.getScreenW(context),
), ),
top: 253, top: 253.dp(),
left: 8,
right: 8,
), ),
], ],
), ),
), ),
), ),
expandedHeight: 322,
title: Container(
child: Text(
"我的工作站",
style: TextStyle(
fontSize: 21,
fontWeight: FontWeight.bold,
color: isShowBlackTitle ? Colors.black : Colors.white),
),
),
), ),
SliverToBoxAdapter( SliverToBoxAdapter(
child: Container( child: Container(
margin: EdgeInsets.only(top: 16, bottom: 16), margin: EdgeInsets.only(top: 16.dp(), bottom: 16.dp()),
child: Wrap( child: Wrap(
spacing: 8, spacing: 8.dp(),
children: [ children: [
Image.asset(Images.ic_home_list), Image.asset(Images.ic_home_list),
Text( Text(
"咨询列表", "咨询列表",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: Color(AppColors.EditTextColor), color: AppColors.EditTextColor,
fontSize: 18, fontSize: 18,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
...@@ -219,7 +213,7 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -219,7 +213,7 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
return Dismissible( return Dismissible(
background: Container( background: Container(
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
padding: EdgeInsets.only(right: 16), padding: EdgeInsets.only(right: 16.dp()),
color: Colors.red, color: Colors.red,
child: Text( child: Text(
"删除", "删除",
...@@ -238,28 +232,28 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -238,28 +232,28 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
}, },
child: Container( child: Container(
width: ScreenUtil.getScreenW(context), width: ScreenUtil.getScreenW(context),
height: 82, height: 82.dp(),
child: Stack( child: Stack(
children: [ children: [
Positioned( Positioned(
child: Image.asset( child: Image.asset(
Images.ic_doctor_avatar, Images.ic_doctor_avatar,
width: 50, width: 50.dp(),
height: 50, height: 50.dp(),
), ),
top: 16, top: 16.dp(),
left: 5, left: 5.dp(),
), ),
Positioned( Positioned(
child: Text( child: Text(
"${list[index]}", "${list[index]}",
style: TextStyle( style: TextStyle(
color: Color(AppColors.EditTextColor), color: AppColors.EditTextColor,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 16), fontSize: 16),
), ),
top: 16, top: 16.dp(),
left: 66, left: 66.dp(),
), ),
Positioned( Positioned(
width: ScreenUtil.getScreenW(context) * 0.7, width: ScreenUtil.getScreenW(context) * 0.7,
...@@ -268,10 +262,10 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -268,10 +262,10 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: Color(AppColors.color_999), fontSize: 14), color: AppColors.color_999, fontSize: 14),
), ),
bottom: 18, bottom: 18.dp(),
left: 66, left: 66.dp(),
), ),
Positioned( Positioned(
child: Text( child: Text(
...@@ -279,17 +273,17 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -279,17 +273,17 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: Color(AppColors.hintText), fontSize: 12), color: AppColors.hintText, fontSize: 12),
), ),
top: 16, top: 16.dp(),
right: 16, right: 16.dp(),
), ),
Positioned( Positioned(
child: Container( child: Container(
margin: EdgeInsets.only(left: 16, right: 16), margin: EdgeInsets.only(left: 16.dp(), right: 16.dp()),
width: ScreenUtil.getScreenW(context) - 32, width: ScreenUtil.getScreenW(context) - 32,
height: 1, height: 1,
color: Color(AppColors.dividerColor), color: AppColors.dividerColor,
), ),
bottom: 0, bottom: 0,
) )
...@@ -312,7 +306,7 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -312,7 +306,7 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
"您暂时没有新消息", "您暂时没有新消息",
style: TextStyle( style: TextStyle(
fontSize: 14, fontSize: 14,
color: Color(AppColors.text_default_color), color: AppColors.text_default_color,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
) )
...@@ -367,7 +361,8 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -367,7 +361,8 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
return Expanded( return Expanded(
flex: 1, flex: 1,
child: Container( child: Container(
margin: EdgeInsets.only(left: 8, right: 8), height: 83.dp(),
margin: 8.spacingHorizontal(),
child: Stack( child: Stack(
children: [ children: [
Image.asset(Images.img_home_pharmacy), Image.asset(Images.img_home_pharmacy),
...@@ -375,23 +370,23 @@ class _DoctorHomePageState extends State<DoctorHomePage> { ...@@ -375,23 +370,23 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
child: Text( child: Text(
name, name,
style: TextStyle( style: TextStyle(
color: Color(AppColors.mainColor), color: AppColors.mainColor,
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
top: 10, top: 10.dp(),
left: 10, left: 10.dp(),
), ),
Positioned( Positioned(
child: Text( child: Text(
num, num,
style: TextStyle( style: TextStyle(
color: Color(AppColors.mainColor), color: AppColors.mainColor,
fontSize: 36, fontSize: 36,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
bottom: 0, bottom: 0,
left: 10, left: 10.dp(),
), ),
], ],
), ),
......
import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/Ext.dart';
class PharmacyPage extends StatefulWidget {
@override
_PharmacyPageState createState() {
return _PharmacyPageState();
}
}
class _PharmacyPageState extends State<PharmacyPage> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return null;
}
}
\ No newline at end of file
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/AppColors.dart'; import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/douwen/dwMain.dart';
/** /**
* 注册页 * 注册页
...@@ -96,7 +95,7 @@ class _RegisterState extends State { ...@@ -96,7 +95,7 @@ class _RegisterState extends State {
Text( Text(
"密码由9-16位大小写字母、数字加特殊符号组成", "密码由9-16位大小写字母、数字加特殊符号组成",
style: style:
TextStyle(color: Color(AppColors.mainColor), fontSize: 12), TextStyle(color: AppColors.mainColor, fontSize: 12),
), ),
Container( Container(
margin: EdgeInsets.only(top: 20), margin: EdgeInsets.only(top: 20),
...@@ -106,9 +105,9 @@ class _RegisterState extends State { ...@@ -106,9 +105,9 @@ class _RegisterState extends State {
backgroundColor: backgroundColor:
MaterialStateProperty.resolveWith((states) { MaterialStateProperty.resolveWith((states) {
if (states.contains(MaterialState.disabled)) { if (states.contains(MaterialState.disabled)) {
return Color(AppColors.disabledColor); return AppColors.disabledColor;
} }
return Color(AppColors.mainColor); return AppColors.mainColor;
}), }),
), ),
child: Text( child: Text(
...@@ -123,7 +122,7 @@ class _RegisterState extends State { ...@@ -123,7 +122,7 @@ class _RegisterState extends State {
} }
onRegisterClick() { onRegisterClick() {
Navigator.pushNamed(context, "doctorHome"); Navigator.pushNamed(context, "doctor_MainPage");
if(_formKey.currentState.validate()){ if(_formKey.currentState.validate()){
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("请求注册"))); ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("请求注册")));
} }
...@@ -204,11 +203,11 @@ class _RegisterState extends State { ...@@ -204,11 +203,11 @@ class _RegisterState extends State {
enabledBorder: UnderlineInputBorder( enabledBorder: UnderlineInputBorder(
// 默认状态的下划线边框 // 默认状态的下划线边框
borderSide: borderSide:
BorderSide(color: Color(AppColors.dividerColor), width: 0.5)), BorderSide(color: AppColors.dividerColor, width: 0.5)),
focusedBorder: UnderlineInputBorder( focusedBorder: UnderlineInputBorder(
// 输入框获取焦点后 // 输入框获取焦点后
borderSide: borderSide:
BorderSide(color: Color(AppColors.mainColor), width: 0.5)), BorderSide(color: AppColors.mainColor, width: 0.5)),
errorBorder: UnderlineInputBorder( errorBorder: UnderlineInputBorder(
// 错误的时候 // 错误的时候
borderSide: BorderSide(color: Colors.red, width: 0.5)), borderSide: BorderSide(color: Colors.red, width: 0.5)),
......
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:netrain_flutter_app/jishuaishuai/MVVMDemo/ViewDemo.dart';
import 'package:netrain_flutter_app/jishuaishuai/MVVMDemo/ViewModelDemo.dart';
import 'package:netrain_flutter_app/xuehao/BottomNavpage.dart'; import 'package:netrain_flutter_app/xuehao/BottomNavpage.dart';
import 'package:netrain_flutter_app/xuehao/car_details.dart'; import 'package:netrain_flutter_app/xuehao/car_details.dart';
import 'package:netrain_flutter_app/common/AppColors.dart'; import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/xuehao/grid_page.dart'; import 'package:netrain_flutter_app/xuehao/grid_page.dart';
import 'package:netrain_flutter_app/xuehao/list_page.dart'; import 'package:netrain_flutter_app/xuehao/list_page.dart';
import 'package:provider/provider.dart';
import 'laishanqi/Stateful_page.dart'; import 'laishanqi/Stateful_page.dart';
import 'laishanqi/Stateless_page.dart'; import 'laishanqi/Stateless_page.dart';
import 'laishanqi/layout_page.dart'; import 'laishanqi/layout_page.dart';
import 'laishanqi/netrain/DoctorHomePage.dart'; import 'laishanqi/netrain/DoctorMain.dart';
import 'laishanqi/netrain/maintab/DoctorHomePage.dart';
import 'laishanqi/netrain/user/loginPage.dart'; import 'laishanqi/netrain/user/loginPage.dart';
import 'laishanqi/netrain/user/RegisterPage.dart'; import 'laishanqi/netrain/user/RegisterPage.dart';
import 'laishanqi/photo.dart'; import 'laishanqi/photo.dart';
...@@ -23,23 +30,34 @@ import 'zhangfeng/LayoutDemo.dart'; ...@@ -23,23 +30,34 @@ import 'zhangfeng/LayoutDemo.dart';
import 'jishuaishuai/firstVC.dart'; import 'jishuaishuai/firstVC.dart';
void main() { void main() {
runApp(MyApp()); runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => ViewModelGet(),
)
],
child: MyApp(),
)
);
// runApp(Login()); // runApp(Login());
// runApp(TestPage()); // runApp(TestPage());
UserModel.getModel(); UserModel.getModel();
print("启动"); print("启动"
);
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
// This widget is the root of your application. // This widget is the root of your application.
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
setDesignWHD(375, 812);
// 设置状态栏为透明 // 设置状态栏为透明
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor:Colors.transparent); SystemUiOverlayStyle systemUiOverlayStyle =
SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
return WillPopScope( return WillPopScope(
...@@ -47,13 +65,22 @@ class MyApp extends StatelessWidget { ...@@ -47,13 +65,22 @@ class MyApp extends StatelessWidget {
title: 'Flutter Demo', title: 'Flutter Demo',
initialRoute: "main", initialRoute: "main",
theme: ThemeData( theme: ThemeData(
primaryColor: Color(AppColors.titleBackgroundColor), primaryColor: AppColors.titleBackgroundColor,
hintColor: Color(AppColors.hintText), hintColor: AppColors.hintText,
accentColor: Color(AppColors.mainColor), accentColor: AppColors.mainColor,
dividerColor: Color(AppColors.dividerColor), dividerColor: AppColors.dividerColor,
scaffoldBackgroundColor: Color(AppColors.scaffoldBackgroundColor), scaffoldBackgroundColor: AppColors.scaffoldBackgroundColor,
visualDensity: VisualDensity.adaptivePlatformDensity, visualDensity: VisualDensity.adaptivePlatformDensity,
), ),
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('zh', 'CN'),
const Locale('en', 'US'),
],
routes: <String, WidgetBuilder>{ routes: <String, WidgetBuilder>{
"less": (context) => LessGroupPage(), "less": (context) => LessGroupPage(),
"ful": (context) => FulGroupPage(), "ful": (context) => FulGroupPage(),
...@@ -61,32 +88,32 @@ class MyApp extends StatelessWidget { ...@@ -61,32 +88,32 @@ class MyApp extends StatelessWidget {
"photo": (context) => PhotoApp(), "photo": (context) => PhotoApp(),
"register": (context) => RegisterPage(), "register": (context) => RegisterPage(),
"login": (context) => LoginPage(), "login": (context) => LoginPage(),
"listPage":(context) => List_Page(), "listPage": (context) => List_Page(),
"CustomTabPage":(context) => TabBarPage(), "CustomTabPage": (context) => TabBarPage(),
"LoginRequestPage":(context) => LoginRequestPage(), "LoginRequestPage": (context) => LoginRequestPage(),
"PageView":(context) => SampleAppPage(), "PageView": (context) => SampleAppPage(),
"LayoutDemo":(context) => LayoutDemo(), "LayoutDemo": (context) => LayoutDemo(),
"main": (context) => mainPage(), "main": (context) => mainPage(context),
"firstVC":(context) => jssPageDemo(), "firstVC": (context) => jssPageDemo(),
"car_details":(context) =>CarDetailsPage(), "car_details": (context) => CarDetailsPage(),
"student":(context) => jssPageDemo(), "student": (context) => jssPageDemo(),
"grid_page":(context) =>GridPage(), "grid_page": (context) => GridPage(),
"doctorHome":(context) => DoctorHomePage(), "doctorHome": (context) => DoctorHomePage(),
"bottom_page":(context) =>BottomNavPage(), "bottom_page": (context) => BottomNavPage(),
"doctor_MainPage": (context) => doctorMainPage(),
}, },
), ),
onWillPop: () async { onWillPop: () async {
Fluttertoast.showToast(msg: "退出"); Fluttertoast.showToast(msg: "退出");
return true; return true;
}); });
} }
} }
Widget mainPage(){
Widget mainPage(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("路由"), title: Text("NetRain Flutter学习计划"),
), ),
body: RouterNavigator(title: 'Flutter Demo Home Page'), body: RouterNavigator(title: 'Flutter Demo Home Page'),
); );
...@@ -106,43 +133,53 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -106,43 +133,53 @@ class _RouterNavigatorState extends State<RouterNavigator> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
child: Column( child: Container(
children: [ margin: EdgeInsets.only(left: 10, right: 10),
SwitchListTile( child: Wrap(
title: Text('${byName ? '' : '不'}通过路由名跳转'), spacing: 10,
value: byName, children: [
onChanged: (value) { SwitchListTile(
setState(() { title: Text('${byName ? '' : '不'}通过路由名跳转'),
byName = value; value: byName,
}); onChanged: (value) {
}), setState(() {
_item("less页面", LessGroupPage(), 'less'), byName = value;
_item("ful页面", FulGroupPage(), 'ful'), });
_item("layout页面", LayoutPage(), 'layout'), }),
_item("拍照页面", PhotoApp(), 'photo'), _item("登陆", LoginPage(), 'login',context),
_item("登陆", LoginPage(), 'login'), _item("首页", LessGroupPage(), 'doctor_MainPage',context),
_item("登录网络请求", LoginRequestPage(), 'LoginRequestPage'), _item("less页面", LessGroupPage(), 'less',context),
_item("CustomTabPage",TabBarPage(),'CustomTabPage'), _item("ful页面", FulGroupPage(), 'ful',context),
_item("PageView",SampleAppPage(),'PageView'), _item("layout页面", LayoutPage(), 'layout',context),
_item("LayoutDemo", LayoutDemo(), 'LayoutDemo'), _item("拍照页面", PhotoApp(), 'photo',context),
_item("listview页面",List_Page(),'listPage'), _item("登录网络请求", LoginRequestPage(), 'LoginRequestPage',context),
_item("jssDemo", jssPageDemo(), 'firstVC'), _item("CustomTabPage", TabBarPage(), 'CustomTabPage',context),
_item("jssDemo", jssPageDemo(), 'student'), _item("PageView", SampleAppPage(), 'PageView',context),
_item("gridView",GridPage(),'grid_page'), _item("LayoutDemo", LayoutDemo(), 'LayoutDemo',context),
_item("BottomNav",BottomNavPage(),'bottom_page'), _item("listview页面", List_Page(), 'listPage',context),
], _item("jssDemo", jssPageDemo(), 'firstVC',context),
_item("jssDemo", jssPageDemo(), 'student',context),
_item("gridView", GridPage(), 'grid_page',context),
_item("BottomNav", BottomNavPage(), 'bottom_page',context),
],
),
), ),
); );
} }
_item(String title, page, String routeName) { _item(String title, page, String routeName ,BuildContext context) {
return Container( return Container(
child: ElevatedButton( child: ElevatedButton(
onPressed: () { onPressed: () {
// Navigator.of(context).push(route)
if (byName) { if (byName) {
Navigator.pushNamed(context, routeName); Navigator.pushNamed(context, routeName);
} else { } else {
Navigator.push(context,MaterialPageRoute(builder: (context) => page,)); Navigator.push(
context,
MaterialPageRoute(
builder: (context) => page,
));
} }
}, },
child: Text(title), child: Text(title),
...@@ -150,4 +187,3 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -150,4 +187,3 @@ class _RouterNavigatorState extends State<RouterNavigator> {
); );
} }
} }
...@@ -80,7 +80,7 @@ class _HomePageState extends State<HomePage> { ...@@ -80,7 +80,7 @@ class _HomePageState extends State<HomePage> {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
elevation: 0, elevation: 0,
backgroundColor: Color(AppColors.blue_bg_color), backgroundColor: (AppColors.blue_bg_color),
title: Text( title: Text(
"基本信息", "基本信息",
style: TextStyle( style: TextStyle(
...@@ -108,7 +108,7 @@ class _HomePageState extends State<HomePage> { ...@@ -108,7 +108,7 @@ class _HomePageState extends State<HomePage> {
body: new Column(children: [ body: new Column(children: [
Container( Container(
height: 80, height: 80,
color: Color(AppColors.blue_bg_color), color: (AppColors.blue_bg_color),
child: Column( child: Column(
children: [ children: [
Spacer(), Spacer(),
...@@ -122,7 +122,7 @@ class _HomePageState extends State<HomePage> { ...@@ -122,7 +122,7 @@ class _HomePageState extends State<HomePage> {
width: 22, width: 22,
child: Text( child: Text(
"1", "1",
style: TextStyle(color: Color(AppColors.blue_bg_color)), style: TextStyle(color: (AppColors.blue_bg_color)),
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0), borderRadius: BorderRadius.circular(11.0),
...@@ -136,11 +136,11 @@ class _HomePageState extends State<HomePage> { ...@@ -136,11 +136,11 @@ class _HomePageState extends State<HomePage> {
width: 22, width: 22,
child: Text( child: Text(
"2", "2",
style: TextStyle(color: Color(AppColors.blue_bg_color)), style: TextStyle(color: (AppColors.blue_bg_color)),
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0), borderRadius: BorderRadius.circular(11.0),
color: Color(AppColors.white_transparent_50), color: (AppColors.white_transparent_50),
), ),
), ),
Spacer(), Spacer(),
...@@ -150,11 +150,11 @@ class _HomePageState extends State<HomePage> { ...@@ -150,11 +150,11 @@ class _HomePageState extends State<HomePage> {
width: 22, width: 22,
child: Text( child: Text(
"3", "3",
style: TextStyle(color: Color(AppColors.blue_bg_color)), style: TextStyle(color: (AppColors.blue_bg_color)),
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0), borderRadius: BorderRadius.circular(11.0),
color: Color(AppColors.white_transparent_50), color: (AppColors.white_transparent_50),
), ),
), ),
SizedBox(width: 54), SizedBox(width: 54),
...@@ -173,14 +173,14 @@ class _HomePageState extends State<HomePage> { ...@@ -173,14 +173,14 @@ class _HomePageState extends State<HomePage> {
Text( Text(
"提交证件", "提交证件",
style: TextStyle( style: TextStyle(
color: Color(AppColors.white_transparent_50), color: (AppColors.white_transparent_50),
fontSize: 12), fontSize: 12),
), ),
Spacer(), Spacer(),
Text( Text(
"审核完毕", "审核完毕",
style: TextStyle( style: TextStyle(
color: Color(AppColors.white_transparent_50), color: (AppColors.white_transparent_50),
fontSize: 12), fontSize: 12),
), ),
SizedBox(width: 41), SizedBox(width: 41),
...@@ -194,7 +194,7 @@ class _HomePageState extends State<HomePage> { ...@@ -194,7 +194,7 @@ class _HomePageState extends State<HomePage> {
margin: EdgeInsets.all(16), margin: EdgeInsets.all(16),
padding: EdgeInsets.fromLTRB(0, 0, 0, 16), padding: EdgeInsets.fromLTRB(0, 0, 0, 16),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(AppColors.blue_bg_color2), color: (AppColors.blue_bg_color2),
borderRadius: BorderRadius.circular(4.0), borderRadius: BorderRadius.circular(4.0),
), ),
child: Column( child: Column(
...@@ -203,7 +203,7 @@ class _HomePageState extends State<HomePage> { ...@@ -203,7 +203,7 @@ class _HomePageState extends State<HomePage> {
child: Text( child: Text(
"您完成所有认证资料,并完成互联网医院认证备案后,杏联医生工作室将为您提供以下功能:", "您完成所有认证资料,并完成互联网医院认证备案后,杏联医生工作室将为您提供以下功能:",
style: TextStyle( style: TextStyle(
fontSize: 12, color: Color(AppColors.text_default_color)), fontSize: 12, color: AppColors.text_default_color),
), ),
margin: EdgeInsets.all(10), margin: EdgeInsets.all(10),
), ),
...@@ -220,13 +220,13 @@ class _HomePageState extends State<HomePage> { ...@@ -220,13 +220,13 @@ class _HomePageState extends State<HomePage> {
"邀请患者", "邀请患者",
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
color: Color(AppColors.EditTextColor), color: (AppColors.EditTextColor),
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
Text( Text(
"专属二维码", "专属二维码",
style: TextStyle( style: TextStyle(
color: Color(AppColors.text_default_color), color: (AppColors.text_default_color),
fontSize: 12 fontSize: 12
), ),
) )
...@@ -249,13 +249,13 @@ class _HomePageState extends State<HomePage> { ...@@ -249,13 +249,13 @@ class _HomePageState extends State<HomePage> {
"电子处方权", "电子处方权",
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
color: Color(AppColors.EditTextColor), color: AppColors.EditTextColor,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
Text( Text(
"建立自己的诊室", "建立自己的诊室",
style: TextStyle( style: TextStyle(
color: Color(AppColors.text_default_color), color: AppColors.text_default_color,
fontSize: 12 fontSize: 12
), ),
) )
......
...@@ -7,8 +7,7 @@ class LoginApi { ...@@ -7,8 +7,7 @@ class LoginApi {
///示例请求 ///示例请求
static loginRequest(Map<String, dynamic> param, OnResult onResult) { static loginRequest(Map<String, dynamic> param, OnResult onResult) {
return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){ return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){
BaseHttpModel httpModel = data; UserModel userModel = UserModel.fromJson(data.data);
UserModel userModel = UserModel.fromJson(httpModel.data);
UserModel.saveModel(userModel); UserModel.saveModel(userModel);
print(UserModel.getModel().token); print(UserModel.getModel().token);
if(onResult != null){ if(onResult != null){
...@@ -16,4 +15,13 @@ class LoginApi { ...@@ -16,4 +15,13 @@ class LoginApi {
} }
}); });
} }
///上传头像
static uploadAvatarRequest(String avatarPath, OnResult onResult) {
return HttpManager.getInstance().request('file/upload', parameters: null,method: "POST", imagePath: avatarPath,onResult: (data,errorMsg){
if(onResult != null){
onResult(data, errorMsg);
}
});
}
} }
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:netrain_flutter_app/zhangfeng/UserModel.dart'; import 'package:netrain_flutter_app/zhangfeng/UserModel.dart';
import 'LoginApi.dart'; import 'LoginApi.dart';
import 'package:netrain_flutter_app/common/Images.dart'; import 'package:netrain_flutter_app/common/Images.dart';
import 'package:image_picker/image_picker.dart';//从相册里面选择图片或者拍照获取照片
import 'dart:io';
class LoginRequestPage extends StatefulWidget { class LoginRequestPage extends StatefulWidget {
final String title = "登录页"; final String title = "登录页";
...@@ -16,6 +19,7 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -16,6 +19,7 @@ class _LoginState extends State<LoginRequestPage> {
// This widget is the root of your application. // This widget is the root of your application.
final phoneTextField = TextEditingController(); final phoneTextField = TextEditingController();
final pwdTextField = TextEditingController(); final pwdTextField = TextEditingController();
PickedFile _image;
@override @override
void dispose() { void dispose() {
...@@ -51,6 +55,25 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -51,6 +55,25 @@ class _LoginState extends State<LoginRequestPage> {
Fluttertoast.showToast(msg:'退出成功'); Fluttertoast.showToast(msg:'退出成功');
} }
Future getImage() async {
var image = await ImagePicker.platform.pickImage(source: ImageSource.gallery);
_upLoadImage(image);//上传图片
setState(() {
_image = image;
});
}
_upLoadImage(PickedFile image) async {
LoginApi.uploadAvatarRequest(image.path, (httpModel, error){
if(error != null){
Fluttertoast.showToast(msg: error);
}else{
Fluttertoast.showToast(msg:'更改成功');
}
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
...@@ -111,6 +134,21 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -111,6 +134,21 @@ class _LoginState extends State<LoginRequestPage> {
onPressed: _loginAction, onPressed: _loginAction,
), ),
), ),
Container(
margin: EdgeInsets.only(top: 50),
width: 100,
height: 100,
child: ElevatedButton(
child: Text("上传头像"),
onPressed: getImage,
),
),
Container(
margin: EdgeInsets.only(top: 50),
width: 100,
height: 100,
child: Image.asset(_image != null ? _image.path : Images.lake),
),
], ],
), ),
), // This trailing comma makes auto-formatting nicer for build methods. ), // This trailing comma makes auto-formatting nicer for build methods.
......
...@@ -2,12 +2,10 @@ import 'package:json_annotation/json_annotation.dart'; ...@@ -2,12 +2,10 @@ import 'package:json_annotation/json_annotation.dart';
part 'BaseHttpModel.g.dart'; part 'BaseHttpModel.g.dart';
@JsonSerializable() @JsonSerializable()
class BaseHttpModel{ class BaseHttpModel{
final data; final data;
final code; int code;
@JsonKey(name:'message') String msg;
final msg;
BaseHttpModel(this.data, this.code, this.msg); BaseHttpModel(this.data, this.code, this.msg);
......
...@@ -9,8 +9,8 @@ part of 'BaseHttpModel.dart'; ...@@ -9,8 +9,8 @@ part of 'BaseHttpModel.dart';
BaseHttpModel _$BaseHttpModelFromJson(Map<String, dynamic> json) { BaseHttpModel _$BaseHttpModelFromJson(Map<String, dynamic> json) {
return BaseHttpModel( return BaseHttpModel(
json['data'], json['data'],
json['code'], json['code'] as int,
json['msg'], json['msg'] as String,
); );
} }
......
import 'dart:convert';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart'; import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart';
import 'package:netrain_flutter_app/zhangfeng/UserModel.dart';
import 'BaseHttpModel.dart'; import 'BaseHttpModel.dart';
import 'UrlPath.dart'; import 'UrlPath.dart';
typedef OnResult = void Function(BaseHttpModel t, String errorMsg) ; typedef OnResult = void Function(BaseHttpModel httpModel, String errorMsg) ;
class HttpManager { class HttpManager {
static HttpManager _instance = HttpManager._internal(); static HttpManager _instance = HttpManager._internal();
...@@ -14,8 +16,35 @@ class HttpManager { ...@@ -14,8 +16,35 @@ class HttpManager {
///通用全局单例,第一次使用时初始化 ///通用全局单例,第一次使用时初始化
HttpManager._internal({String baseUrl}) { HttpManager._internal({String baseUrl}) {
if (null == _dio) { if (null == _dio) {
///connectTimeout连接超时时长
///receiveTimeout响应流上前后两次接受到数据的间隔,单位为毫秒。如果两次间隔超过[receiveTimeout],[Dio] 将会抛出一个[DioErrorType.RECEIVE_TIMEOUT]的异常.注意: 这并不是接收数据的总时限
///sendTimeout请求超时时长
///如果返回数据是json(content-type),dio默认会自动将数据转为json,
///
_dio = new Dio(new BaseOptions( _dio = new Dio(new BaseOptions(
baseUrl: UrlPath.baseUrl, connectTimeout: 15000)); baseUrl: UrlPath.baseUrl, connectTimeout: 15000,sendTimeout: 15000));
// 添加拦截器
_dio.interceptors.add(InterceptorsWrapper(onRequest:
(RequestOptions options, RequestInterceptorHandler hander) {
print("\n================== 请求数据 ==========================");
print("url = ${options.uri.toString()}");
print("headers = ${options.headers}");
print("params = ${options.data}");
hander.next(options);
}, onResponse: (Response response, ResponseInterceptorHandler handler) {
print("\n================== 响应数据 ==========================");
print("code = ${response.statusCode}");
print("data = ${response.data}");
print("\n");
handler.next(response);
}, onError: (DioError e, ErrorInterceptorHandler handler) {
print("\n================== 错误响应数据 ======================");
print("type = ${e.type}");
print("message = ${e.message}");
print("stackTrace = ${e.stackTrace}");
print("\n");
handler.next(e);
}));
} }
} }
...@@ -48,15 +77,32 @@ class HttpManager { ...@@ -48,15 +77,32 @@ class HttpManager {
request(String url, request(String url,
{parameters, {parameters,
method = 'GET', method = 'GET',
OnResult onResult}) async { OnResult onResult,String imagePath}) async {
parameters = parameters ?? {}; parameters = parameters ?? {};
if(onResult==null){ if(onResult==null){
return; return;
} }
try { try {
FormData formdata;
if(imagePath != null){
var name = imagePath.substring(imagePath.lastIndexOf("/") + 1, imagePath.length);
var suffix = name.substring(name.lastIndexOf(".") + 1, name.length);
formdata = FormData.fromMap({
"file": await MultipartFile.fromFile(
imagePath, //图片路径
filename: name,
)
});
}
parameters = new Map<String, dynamic>.from(parameters);
Map<String,String> map = new Map<String,String>();
if(UserModel.getModel() != null) {
map[UserModel.getModel().header] = UserModel.getModel().tokenHead + UserModel.getModel().token;
}
Response response = await _dio.request(url, Response response = await _dio.request(url,
queryParameters: parameters, options: new Options(method: method)); queryParameters: parameters, data: formdata, options: new Options(method: method,headers: map,responseType: ResponseType.plain));
BaseHttpModel httpModel = BaseHttpModel.fromJson(response.data); Map<String, dynamic> result = json.decode(response.toString());
BaseHttpModel httpModel = BaseHttpModel.fromJson(result);
if (httpModel.isSuccess()) { if (httpModel.isSuccess()) {
onResult(httpModel, null); onResult(httpModel, null);
}else{ }else{
......
...@@ -24,6 +24,8 @@ environment: ...@@ -24,6 +24,8 @@ environment:
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
flutter_localizations:
sdk: flutter
test_package: test_package:
path: ../test_package path: ../test_package
...@@ -32,7 +34,7 @@ dependencies: ...@@ -32,7 +34,7 @@ dependencies:
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3 cupertino_icons: ^0.1.3
image_picker: ^0.8.1+3 image_picker: 0.7.4
fluttertoast: ^3.1.3 fluttertoast: ^3.1.3
http: 0.13.3 http: 0.13.3
mqtt_client: ^9.3.2 mqtt_client: ^9.3.2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment