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{
/// 标题背景颜色
static const titleBackgroundColor = 0xffffffff;
static const titleBackgroundColor = Color(0xffffffff);
/// 主色
static const mainColor = 0xff2893FF;
static const mainColor = Color(0xff2893FF);
/// hint颜色
static const hintText = 0xffb4b4b4;
static const hintText = Color(0xffb4b4b4);
/// 输入框字体颜色
static const EditTextColor = 0xff333333;
static const color_999 = 0xff999999;
static const EditTextColor = Color(0xff333333);
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{
static const img_home_treatment = "${imagesPath}img_home_treatment.png";
static const ic_home_list = "${imagesPath}ic_home_list.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:netrain_flutter_app/jishuaishuai/MVVMDemo/ViewDemo.dart';
class fifthDemo extends StatefulWidget {
fifthDemo({Key key}) : super(key: key);
// fifthDemo({Key key}) : super(key: key);
@override
_fifthDemoState createState() {
......@@ -35,7 +36,7 @@ class _fifthDemoState extends State<fifthDemo> {
}
class fifthListViewDemo extends StatefulWidget {
fifthListViewDemo({Key key}) : super(key: key);
// fifthListViewDemo({Key key}) : super(key: key);
@override
_fifthListViewDemoState createState() {
......@@ -71,11 +72,16 @@ class _fifthListViewDemoState extends State<fifthListViewDemo> {
}
return Container(
child: Flex(
direction: Axis.vertical,
children: [
Text(listArr[index].toString()),
ElevatedButton(onPressed: (){
print("点击了");
}, child:Text("我是个按钮") ),
Navigator.of(context).push(MaterialPageRoute(
builder: (context){
return MVVMViewDemo();
}
));
}, child:Text("点击进入MVVM设计模式页面") ),
Container(
width: 100,
height: 300,
......@@ -86,10 +92,12 @@ class _fifthListViewDemoState extends State<fifthListViewDemo> {
),
);
}),
onRefresh: _onRefresh,
),
);
}
Future _onRefresh() async {
await Future.delayed(
Duration(seconds: 2),
......
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/Images.dart';
import 'secondVC.dart';
......@@ -141,6 +142,9 @@ class imageiconDemo extends StatelessWidget {
// fit: BoxFit.fitWidth
// ),
Image.asset(Images.ic_my_info),
ElevatedButton(onPressed: (){
apiGet();
}, child: Text("测试点击事件请求"))
],
);
......@@ -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:netrain_flutter_app/jishuaishuai/fifthVC.dart';
class fourthDemo extends StatefulWidget {
fourthDemo({Key key}) : super(key: key);
......@@ -74,7 +75,9 @@ class _someDemoState extends State<someDemo> {
Text(e.toString()),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context){
return fifthDemo();
}));
},
child: Text("点击进入第5个页面"))
],
......
......@@ -17,7 +17,7 @@ class twoVCdemo extends StatelessWidget {
body: Column(
children: [
ElevatedButton(
child: Text("第二页面的按钮,跳转带参数过去"),
child: Text("传参数进入第三个页面"),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) {
......@@ -41,6 +41,28 @@ class twoVCdemo extends StatelessWidget {
direction: Axis.horizontal,
children: [
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> {
),
),
FractionallySizedBox(
widthFactor: 0.5,
widthFactor: 1,
child: Container(
decoration: BoxDecoration(color: Colors.grey),
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';
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/common/Ext.dart';
class DoctorHomePage extends StatefulWidget {
@override
......@@ -17,12 +18,11 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
void initState() {
super.initState();
_scrollController.addListener(() {
print("华东 ${_scrollController.offset}");
if (_scrollController.offset > 270 && !isShowBlackTitle) {
if (_scrollController.offset > 302.dp() && !isShowBlackTitle) {
setState(() {
isShowBlackTitle = true;
});
} else if (_scrollController.offset < 270 && isShowBlackTitle) {
} else if (_scrollController.offset < 302.dp() && isShowBlackTitle) {
setState(() {
isShowBlackTitle = false;
});
......@@ -43,41 +43,57 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
controller: _scrollController,
slivers: [
SliverAppBar(
titleSpacing: 16,
toolbarHeight: 50,
titleSpacing: 16.dp(),
toolbarHeight: 50.dp(),
automaticallyImplyLeading: false,
pinned: true,
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(
collapseMode: CollapseMode.pin,
// 拉伸的样式
stretchModes: [StretchMode.blurBackground,StretchMode.zoomBackground],
background: Container(
color: Color(AppColors.mainColor),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xff379BFF), Color(0xff0B7CEE)])),
child: Stack(
children: [
Positioned(
child: ClipOval(
//圆形裁剪
child: Container(
height: 56,
width: 56,
height: 56.dp(),
width: 56.dp(),
constraints:
BoxConstraints(maxHeight: 100, maxWidth: 100),
BoxConstraints(maxHeight: 100.dp(), maxWidth: 100.dp()),
foregroundDecoration: BoxDecoration(
borderRadius: BorderRadius.circular(50),
borderRadius: BorderRadius.circular(50.dp()),
border: Border.all(
color: Colors.white,
width: 2,
width: 2.dp(),
style: BorderStyle.solid)),
child: Image.network(
'http://pix2.tvzhe.com/thumb/star/60/87/260x346.jpg',
height: 56,
width: 56,
height: 56.dp(),
width: 56.dp(),
fit: BoxFit.cover,
),
),
),
top: 106,
left: 18,
top: 106.dp(),
left: 18.dp(),
),
Positioned(
child: Text(
......@@ -87,72 +103,62 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
fontSize: 18,
fontWeight: FontWeight.bold),
),
top: 106,
left: 82,
top: 106.dp(),
left: 82.dp(),
),
Positioned(
child: Text(
"主任医师",
style: TextStyle(color: Colors.white, fontSize: 12),
),
top: 111,
left: 144,
top: 111.dp(),
left: 144.dp(),
),
Positioned(
child: Container(
width: 68,
height: 10,
width: 68.dp(),
height: 20.dp(),
decoration: BoxDecoration(
color: Colors.white30,
borderRadius: BorderRadius.circular(10)),
child:
// Text(
// "主任医师",
// textAlign: TextAlign.center,
// style: TextStyle(
// backgroundColor: Colors.amber,
// color: Colors.white,
// fontSize: 11,
// ),
// ),
Row(
borderRadius: BorderRadius.circular(10.dp())),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"主任医师",
textAlign: TextAlign.center,
"浏览主页",
style: TextStyle(
height: 1.1,
color: Colors.white,
fontSize: 11,
fontSize: 11
),
),
Image.asset(Images.ic_more_white_little)
],
),
),
top: 138,
left: 82,
top: 138.dp(),
left: 82.dp(),
),
Positioned(
child: Image.asset(
Images.ic_code,
height: 30,
width: 30,
height: 30.dp(),
width: 30.dp(),
),
top: 117,
right: 16,
top: 117.dp(),
right: 16.dp(),
),
Positioned(
child: Container(
child: _getStatisticsView(),
width: ScreenUtil.getScreenW(context),
),
top: 185,
top: 185.dp(),
),
Positioned(
child: Container(
padding: EdgeInsets.only(left: 8.dp(),right: 8.dp()),
child: Flex(
direction: Axis.horizontal,
children: [
......@@ -162,37 +168,25 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
),
width: ScreenUtil.getScreenW(context),
),
top: 253,
left: 8,
right: 8,
top: 253.dp(),
),
],
),
),
),
expandedHeight: 322,
title: Container(
child: Text(
"我的工作站",
style: TextStyle(
fontSize: 21,
fontWeight: FontWeight.bold,
color: isShowBlackTitle ? Colors.black : Colors.white),
),
),
),
SliverToBoxAdapter(
child: Container(
margin: EdgeInsets.only(top: 16, bottom: 16),
margin: EdgeInsets.only(top: 16.dp(), bottom: 16.dp()),
child: Wrap(
spacing: 8,
spacing: 8.dp(),
children: [
Image.asset(Images.ic_home_list),
Text(
"咨询列表",
textAlign: TextAlign.center,
style: TextStyle(
color: Color(AppColors.EditTextColor),
color: AppColors.EditTextColor,
fontSize: 18,
fontWeight: FontWeight.bold),
),
......@@ -219,7 +213,7 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
return Dismissible(
background: Container(
alignment: Alignment.centerRight,
padding: EdgeInsets.only(right: 16),
padding: EdgeInsets.only(right: 16.dp()),
color: Colors.red,
child: Text(
"删除",
......@@ -238,28 +232,28 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
},
child: Container(
width: ScreenUtil.getScreenW(context),
height: 82,
height: 82.dp(),
child: Stack(
children: [
Positioned(
child: Image.asset(
Images.ic_doctor_avatar,
width: 50,
height: 50,
width: 50.dp(),
height: 50.dp(),
),
top: 16,
left: 5,
top: 16.dp(),
left: 5.dp(),
),
Positioned(
child: Text(
"${list[index]}",
style: TextStyle(
color: Color(AppColors.EditTextColor),
color: AppColors.EditTextColor,
fontWeight: FontWeight.bold,
fontSize: 16),
),
top: 16,
left: 66,
top: 16.dp(),
left: 66.dp(),
),
Positioned(
width: ScreenUtil.getScreenW(context) * 0.7,
......@@ -268,10 +262,10 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Color(AppColors.color_999), fontSize: 14),
color: AppColors.color_999, fontSize: 14),
),
bottom: 18,
left: 66,
bottom: 18.dp(),
left: 66.dp(),
),
Positioned(
child: Text(
......@@ -279,17 +273,17 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Color(AppColors.hintText), fontSize: 12),
color: AppColors.hintText, fontSize: 12),
),
top: 16,
right: 16,
top: 16.dp(),
right: 16.dp(),
),
Positioned(
child: Container(
margin: EdgeInsets.only(left: 16, right: 16),
margin: EdgeInsets.only(left: 16.dp(), right: 16.dp()),
width: ScreenUtil.getScreenW(context) - 32,
height: 1,
color: Color(AppColors.dividerColor),
color: AppColors.dividerColor,
),
bottom: 0,
)
......@@ -312,7 +306,7 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
"您暂时没有新消息",
style: TextStyle(
fontSize: 14,
color: Color(AppColors.text_default_color),
color: AppColors.text_default_color,
),
textAlign: TextAlign.center,
)
......@@ -367,7 +361,8 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
return Expanded(
flex: 1,
child: Container(
margin: EdgeInsets.only(left: 8, right: 8),
height: 83.dp(),
margin: 8.spacingHorizontal(),
child: Stack(
children: [
Image.asset(Images.img_home_pharmacy),
......@@ -375,23 +370,23 @@ class _DoctorHomePageState extends State<DoctorHomePage> {
child: Text(
name,
style: TextStyle(
color: Color(AppColors.mainColor),
color: AppColors.mainColor,
fontSize: 14,
fontWeight: FontWeight.bold),
),
top: 10,
left: 10,
top: 10.dp(),
left: 10.dp(),
),
Positioned(
child: Text(
num,
style: TextStyle(
color: Color(AppColors.mainColor),
color: AppColors.mainColor,
fontSize: 36,
fontWeight: FontWeight.bold),
),
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:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/douwen/dwMain.dart';
/**
* 注册页
......@@ -96,7 +95,7 @@ class _RegisterState extends State {
Text(
"密码由9-16位大小写字母、数字加特殊符号组成",
style:
TextStyle(color: Color(AppColors.mainColor), fontSize: 12),
TextStyle(color: AppColors.mainColor, fontSize: 12),
),
Container(
margin: EdgeInsets.only(top: 20),
......@@ -106,9 +105,9 @@ class _RegisterState extends State {
backgroundColor:
MaterialStateProperty.resolveWith((states) {
if (states.contains(MaterialState.disabled)) {
return Color(AppColors.disabledColor);
return AppColors.disabledColor;
}
return Color(AppColors.mainColor);
return AppColors.mainColor;
}),
),
child: Text(
......@@ -123,7 +122,7 @@ class _RegisterState extends State {
}
onRegisterClick() {
Navigator.pushNamed(context, "doctorHome");
Navigator.pushNamed(context, "doctor_MainPage");
if(_formKey.currentState.validate()){
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("请求注册")));
}
......@@ -204,11 +203,11 @@ class _RegisterState extends State {
enabledBorder: UnderlineInputBorder(
// 默认状态的下划线边框
borderSide:
BorderSide(color: Color(AppColors.dividerColor), width: 0.5)),
BorderSide(color: AppColors.dividerColor, width: 0.5)),
focusedBorder: UnderlineInputBorder(
// 输入框获取焦点后
borderSide:
BorderSide(color: Color(AppColors.mainColor), width: 0.5)),
BorderSide(color: AppColors.mainColor, width: 0.5)),
errorBorder: UnderlineInputBorder(
// 错误的时候
borderSide: BorderSide(color: Colors.red, width: 0.5)),
......
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.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/car_details.dart';
import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/xuehao/grid_page.dart';
import 'package:netrain_flutter_app/xuehao/list_page.dart';
import 'package:provider/provider.dart';
import 'laishanqi/Stateful_page.dart';
import 'laishanqi/Stateless_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/RegisterPage.dart';
import 'laishanqi/photo.dart';
......@@ -23,23 +30,34 @@ import 'zhangfeng/LayoutDemo.dart';
import 'jishuaishuai/firstVC.dart';
void main() {
runApp(MyApp());
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => ViewModelGet(),
)
],
child: MyApp(),
)
);
// runApp(Login());
// runApp(TestPage());
UserModel.getModel();
print("启动");
print("启动"
);
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
setDesignWHD(375, 812);
// 设置状态栏为透明
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor:Colors.transparent);
SystemUiOverlayStyle systemUiOverlayStyle =
SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
return WillPopScope(
......@@ -47,13 +65,22 @@ class MyApp extends StatelessWidget {
title: 'Flutter Demo',
initialRoute: "main",
theme: ThemeData(
primaryColor: Color(AppColors.titleBackgroundColor),
hintColor: Color(AppColors.hintText),
accentColor: Color(AppColors.mainColor),
dividerColor: Color(AppColors.dividerColor),
scaffoldBackgroundColor: Color(AppColors.scaffoldBackgroundColor),
primaryColor: AppColors.titleBackgroundColor,
hintColor: AppColors.hintText,
accentColor: AppColors.mainColor,
dividerColor: AppColors.dividerColor,
scaffoldBackgroundColor: AppColors.scaffoldBackgroundColor,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('zh', 'CN'),
const Locale('en', 'US'),
],
routes: <String, WidgetBuilder>{
"less": (context) => LessGroupPage(),
"ful": (context) => FulGroupPage(),
......@@ -61,32 +88,32 @@ class MyApp extends StatelessWidget {
"photo": (context) => PhotoApp(),
"register": (context) => RegisterPage(),
"login": (context) => LoginPage(),
"listPage":(context) => List_Page(),
"CustomTabPage":(context) => TabBarPage(),
"LoginRequestPage":(context) => LoginRequestPage(),
"PageView":(context) => SampleAppPage(),
"LayoutDemo":(context) => LayoutDemo(),
"main": (context) => mainPage(),
"firstVC":(context) => jssPageDemo(),
"car_details":(context) =>CarDetailsPage(),
"student":(context) => jssPageDemo(),
"grid_page":(context) =>GridPage(),
"doctorHome":(context) => DoctorHomePage(),
"bottom_page":(context) =>BottomNavPage(),
"listPage": (context) => List_Page(),
"CustomTabPage": (context) => TabBarPage(),
"LoginRequestPage": (context) => LoginRequestPage(),
"PageView": (context) => SampleAppPage(),
"LayoutDemo": (context) => LayoutDemo(),
"main": (context) => mainPage(context),
"firstVC": (context) => jssPageDemo(),
"car_details": (context) => CarDetailsPage(),
"student": (context) => jssPageDemo(),
"grid_page": (context) => GridPage(),
"doctorHome": (context) => DoctorHomePage(),
"bottom_page": (context) => BottomNavPage(),
"doctor_MainPage": (context) => doctorMainPage(),
},
),
onWillPop: () async {
Fluttertoast.showToast(msg: "退出");
return true;
});
}
}
Widget mainPage(){
Widget mainPage(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("路由"),
title: Text("NetRain Flutter学习计划"),
),
body: RouterNavigator(title: 'Flutter Demo Home Page'),
);
......@@ -106,7 +133,10 @@ class _RouterNavigatorState extends State<RouterNavigator> {
@override
Widget build(BuildContext context) {
return Container(
child: Column(
child: Container(
margin: EdgeInsets.only(left: 10, right: 10),
child: Wrap(
spacing: 10,
children: [
SwitchListTile(
title: Text('${byName ? '' : '不'}通过路由名跳转'),
......@@ -116,33 +146,40 @@ class _RouterNavigatorState extends State<RouterNavigator> {
byName = value;
});
}),
_item("less页面", LessGroupPage(), 'less'),
_item("ful页面", FulGroupPage(), 'ful'),
_item("layout页面", LayoutPage(), 'layout'),
_item("拍照页面", PhotoApp(), 'photo'),
_item("登陆", LoginPage(), 'login'),
_item("登录网络请求", LoginRequestPage(), 'LoginRequestPage'),
_item("CustomTabPage",TabBarPage(),'CustomTabPage'),
_item("PageView",SampleAppPage(),'PageView'),
_item("LayoutDemo", LayoutDemo(), 'LayoutDemo'),
_item("listview页面",List_Page(),'listPage'),
_item("jssDemo", jssPageDemo(), 'firstVC'),
_item("jssDemo", jssPageDemo(), 'student'),
_item("gridView",GridPage(),'grid_page'),
_item("BottomNav",BottomNavPage(),'bottom_page'),
_item("登陆", LoginPage(), 'login',context),
_item("首页", LessGroupPage(), 'doctor_MainPage',context),
_item("less页面", LessGroupPage(), 'less',context),
_item("ful页面", FulGroupPage(), 'ful',context),
_item("layout页面", LayoutPage(), 'layout',context),
_item("拍照页面", PhotoApp(), 'photo',context),
_item("登录网络请求", LoginRequestPage(), 'LoginRequestPage',context),
_item("CustomTabPage", TabBarPage(), 'CustomTabPage',context),
_item("PageView", SampleAppPage(), 'PageView',context),
_item("LayoutDemo", LayoutDemo(), 'LayoutDemo',context),
_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(
child: ElevatedButton(
onPressed: () {
// Navigator.of(context).push(route)
if (byName) {
Navigator.pushNamed(context, routeName);
} else {
Navigator.push(context,MaterialPageRoute(builder: (context) => page,));
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => page,
));
}
},
child: Text(title),
......@@ -150,4 +187,3 @@ class _RouterNavigatorState extends State<RouterNavigator> {
);
}
}
......@@ -80,7 +80,7 @@ class _HomePageState extends State<HomePage> {
return Scaffold(
appBar: AppBar(
elevation: 0,
backgroundColor: Color(AppColors.blue_bg_color),
backgroundColor: (AppColors.blue_bg_color),
title: Text(
"基本信息",
style: TextStyle(
......@@ -108,7 +108,7 @@ class _HomePageState extends State<HomePage> {
body: new Column(children: [
Container(
height: 80,
color: Color(AppColors.blue_bg_color),
color: (AppColors.blue_bg_color),
child: Column(
children: [
Spacer(),
......@@ -122,7 +122,7 @@ class _HomePageState extends State<HomePage> {
width: 22,
child: Text(
"1",
style: TextStyle(color: Color(AppColors.blue_bg_color)),
style: TextStyle(color: (AppColors.blue_bg_color)),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0),
......@@ -136,11 +136,11 @@ class _HomePageState extends State<HomePage> {
width: 22,
child: Text(
"2",
style: TextStyle(color: Color(AppColors.blue_bg_color)),
style: TextStyle(color: (AppColors.blue_bg_color)),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0),
color: Color(AppColors.white_transparent_50),
color: (AppColors.white_transparent_50),
),
),
Spacer(),
......@@ -150,11 +150,11 @@ class _HomePageState extends State<HomePage> {
width: 22,
child: Text(
"3",
style: TextStyle(color: Color(AppColors.blue_bg_color)),
style: TextStyle(color: (AppColors.blue_bg_color)),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0),
color: Color(AppColors.white_transparent_50),
color: (AppColors.white_transparent_50),
),
),
SizedBox(width: 54),
......@@ -173,14 +173,14 @@ class _HomePageState extends State<HomePage> {
Text(
"提交证件",
style: TextStyle(
color: Color(AppColors.white_transparent_50),
color: (AppColors.white_transparent_50),
fontSize: 12),
),
Spacer(),
Text(
"审核完毕",
style: TextStyle(
color: Color(AppColors.white_transparent_50),
color: (AppColors.white_transparent_50),
fontSize: 12),
),
SizedBox(width: 41),
......@@ -194,7 +194,7 @@ class _HomePageState extends State<HomePage> {
margin: EdgeInsets.all(16),
padding: EdgeInsets.fromLTRB(0, 0, 0, 16),
decoration: BoxDecoration(
color: Color(AppColors.blue_bg_color2),
color: (AppColors.blue_bg_color2),
borderRadius: BorderRadius.circular(4.0),
),
child: Column(
......@@ -203,7 +203,7 @@ class _HomePageState extends State<HomePage> {
child: Text(
"您完成所有认证资料,并完成互联网医院认证备案后,杏联医生工作室将为您提供以下功能:",
style: TextStyle(
fontSize: 12, color: Color(AppColors.text_default_color)),
fontSize: 12, color: AppColors.text_default_color),
),
margin: EdgeInsets.all(10),
),
......@@ -220,13 +220,13 @@ class _HomePageState extends State<HomePage> {
"邀请患者",
style: TextStyle(
fontSize: 16,
color: Color(AppColors.EditTextColor),
color: (AppColors.EditTextColor),
fontWeight: FontWeight.bold),
),
Text(
"专属二维码",
style: TextStyle(
color: Color(AppColors.text_default_color),
color: (AppColors.text_default_color),
fontSize: 12
),
)
......@@ -249,13 +249,13 @@ class _HomePageState extends State<HomePage> {
"电子处方权",
style: TextStyle(
fontSize: 16,
color: Color(AppColors.EditTextColor),
color: AppColors.EditTextColor,
fontWeight: FontWeight.bold),
),
Text(
"建立自己的诊室",
style: TextStyle(
color: Color(AppColors.text_default_color),
color: AppColors.text_default_color,
fontSize: 12
),
)
......
......@@ -7,8 +7,7 @@ class LoginApi {
///示例请求
static loginRequest(Map<String, dynamic> param, OnResult onResult) {
return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){
BaseHttpModel httpModel = data;
UserModel userModel = UserModel.fromJson(httpModel.data);
UserModel userModel = UserModel.fromJson(data.data);
UserModel.saveModel(userModel);
print(UserModel.getModel().token);
if(onResult != null){
......@@ -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/widgets.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:netrain_flutter_app/zhangfeng/UserModel.dart';
import 'LoginApi.dart';
import 'package:netrain_flutter_app/common/Images.dart';
import 'package:image_picker/image_picker.dart';//从相册里面选择图片或者拍照获取照片
import 'dart:io';
class LoginRequestPage extends StatefulWidget {
final String title = "登录页";
......@@ -16,6 +19,7 @@ class _LoginState extends State<LoginRequestPage> {
// This widget is the root of your application.
final phoneTextField = TextEditingController();
final pwdTextField = TextEditingController();
PickedFile _image;
@override
void dispose() {
......@@ -51,6 +55,25 @@ class _LoginState extends State<LoginRequestPage> {
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
Widget build(BuildContext context) {
return Scaffold(
......@@ -111,6 +134,21 @@ class _LoginState extends State<LoginRequestPage> {
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.
......
......@@ -2,12 +2,10 @@ import 'package:json_annotation/json_annotation.dart';
part 'BaseHttpModel.g.dart';
@JsonSerializable()
class BaseHttpModel{
final data;
final code;
@JsonKey(name:'message')
final msg;
int code;
String msg;
BaseHttpModel(this.data, this.code, this.msg);
......
......@@ -9,8 +9,8 @@ part of 'BaseHttpModel.dart';
BaseHttpModel _$BaseHttpModelFromJson(Map<String, dynamic> json) {
return BaseHttpModel(
json['data'],
json['code'],
json['msg'],
json['code'] as int,
json['msg'] as String,
);
}
......
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart';
import 'package:netrain_flutter_app/zhangfeng/UserModel.dart';
import 'BaseHttpModel.dart';
import 'UrlPath.dart';
typedef OnResult = void Function(BaseHttpModel t, String errorMsg) ;
typedef OnResult = void Function(BaseHttpModel httpModel, String errorMsg) ;
class HttpManager {
static HttpManager _instance = HttpManager._internal();
......@@ -14,8 +16,35 @@ class HttpManager {
///通用全局单例,第一次使用时初始化
HttpManager._internal({String baseUrl}) {
if (null == _dio) {
///connectTimeout连接超时时长
///receiveTimeout响应流上前后两次接受到数据的间隔,单位为毫秒。如果两次间隔超过[receiveTimeout],[Dio] 将会抛出一个[DioErrorType.RECEIVE_TIMEOUT]的异常.注意: 这并不是接收数据的总时限
///sendTimeout请求超时时长
///如果返回数据是json(content-type),dio默认会自动将数据转为json,
///
_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 {
request(String url,
{parameters,
method = 'GET',
OnResult onResult}) async {
OnResult onResult,String imagePath}) async {
parameters = parameters ?? {};
if(onResult==null){
return;
}
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,
queryParameters: parameters, options: new Options(method: method));
BaseHttpModel httpModel = BaseHttpModel.fromJson(response.data);
queryParameters: parameters, data: formdata, options: new Options(method: method,headers: map,responseType: ResponseType.plain));
Map<String, dynamic> result = json.decode(response.toString());
BaseHttpModel httpModel = BaseHttpModel.fromJson(result);
if (httpModel.isSuccess()) {
onResult(httpModel, null);
}else{
......
......@@ -24,6 +24,8 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
test_package:
path: ../test_package
......@@ -32,7 +34,7 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
image_picker: ^0.8.1+3
image_picker: 0.7.4
fluttertoast: ^3.1.3
http: 0.13.3
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