Commit fcd57b20 authored by “Icebear”'s avatar “Icebear”

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

* 'master' of http://git.naiterui.com/zouzhisheng/netrain_flutter_app:
  MVVM的ViewModel拿到接口了,等待解析
  修改颜色使用方式,增加扩展方法,扩展了长度单位的使用方法
  调整按钮顺序
  完善首页demo
  首页demo
  listview练习  刷新练习
  bottomNavigationBar、底部导航栏切换,权重比布局
  view model?
parents 1c94789d 38e9efb9
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 = 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 = Color(0xFF2893FF);
static const blue_bg_color2 = Color(0xFFEEF9FF);
static const text_default_color = Color(0xff666666);
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());
}
}
...@@ -21,4 +21,23 @@ class Images{ ...@@ -21,4 +21,23 @@ class Images{
static const ic_login_button = "${imagesPath}login_button.png"; static const ic_login_button = "${imagesPath}login_button.png";
static const ic_doctor_avatar = "${imagesPath}ic_doctor_avatar.png"; static const ic_doctor_avatar = "${imagesPath}ic_doctor_avatar.png";
static const lake = "${imagesPath}lake.png"; static const lake = "${imagesPath}lake.png";
static const ic_bottom_01 = "${imagesPath}nav_01.png";
static const ic_bottom_02 = "${imagesPath}nav_02.png";
static const ic_bottom_03 = "${imagesPath}nav_03.png";
static const ic_bottom_03_true = "${imagesPath}nav_03_true.png";
static const ic_friend = "${imagesPath}ic_friend.png";
static const ic_prescription_home = "${imagesPath}ic_prescription_home.png";
static const ic_code = "${imagesPath}ic_code.png";
static const ic_more_white_little = "${imagesPath}ic_more_white_little.png";
static const img_home_pharmacy = "${imagesPath}img_home_pharmacy.png";
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:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/widgets.dart';
import 'package:netrain_flutter_app/douwen/custom/BaseView.dart';
import 'package:netrain_flutter_app/douwen/custom/BaseViewModel.dart';
class Demo2 extends BaseView {
Demo2() : super(BaseViewModel()) {
builder = (context, value, child) => Container(
child: Column(
children: [
Row(
children: [
_item("setNormal", () {
viewModel.setNormal();
}),
_item("setEmpty", () {
viewModel.setEmpty();
}),
_item("setError", () {
viewModel.setError();
}),
],
),
setReplaceView(Row(
children: [
ValueListenableBuilder(
valueListenable: viewModel.num,
builder: (context, value, child) =>
Text("点击了${viewModel.num.value}次")),
ElevatedButton(
onPressed: () {
viewModel.click();
},
child: Text("点击"))
],
)),
],
));
}
_item(String title, VoidCallback onPressed) {
return Container(
child: RaisedButton(
onPressed: onPressed,
child: Text(title),
),
);
}
}
import 'package:flutter/widgets.dart';
import 'package:netrain_flutter_app/douwen/custom/BaseViewModel.dart';
import 'package:provider/provider.dart';
import 'EmptyPage.dart';
import 'ErrorPage.dart';
import 'ViewState.dart';
class BaseView extends StatefulWidget {
BaseViewModel viewModel;
Widget Function(BuildContext context, BaseViewModel value, Widget child)
builder;
Widget _mReplaceView;
Widget emptyView = EmptyPage();
Widget errorView = ErrorPage();
BaseView(this.viewModel) {
}
Widget setReplaceView(Widget replaceView) {
_mReplaceView = replaceView;
switch (viewModel.viewState ?? ViewState.Normal) {
case ViewState.Normal:
return _mReplaceView;
case ViewState.Empty:
return emptyView;
case ViewState.Error:
return errorView;
case ViewState.Loading:
return _mReplaceView;
default:
return _mReplaceView;
}
}
@override
State<StatefulWidget> createState() {
return _BaseViewState();
}
}
class _BaseViewState extends State<BaseView> {
BaseViewModel viewModel;
@override
void initState() {
viewModel = widget.viewModel;
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (content) => viewModel,
child: Consumer<BaseViewModel>(
builder: widget.builder,
),
);
}
}
import 'package:flutter/widgets.dart';
import 'ViewState.dart';
class BaseViewModel with ChangeNotifier {
var _viewState;
var num = ValueNotifier<int>(0);
set viewState(ViewState viewState) => setViewState(viewState);
get viewState => _viewState;
void click() {
num.value = (num.value ?? 0) + 1;
num.notifyListeners();
}
void setNormal() {
viewState = ViewState.Normal;
}
void setEmpty() {
viewState = ViewState.Empty;
}
void setLoading() {
viewState = ViewState.Loading;
}
void setError() {
viewState = ViewState.Error;
}
setViewState(ViewState viewState) {
if (_viewState == viewState) {
return;
}
_viewState = viewState;
notifyListeners();
}
}
import 'package:flutter/widgets.dart';
class EmptyPage extends Container{
@override
Widget build(BuildContext context) {
return Center(
child: Container(
child: Text("This is EmptyView"),
),
);
}
}
\ No newline at end of file
import 'package:flutter/widgets.dart';
class ErrorPage extends Container{
@override
Widget build(BuildContext context) {
return Center(
child: Container(
child: Text("This is ErrorView"),
),
);
}
}
\ No newline at end of file
enum ViewState { Normal, Empty, Error, Loading }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:netrain_flutter_app/common/Images.dart'; import 'package:netrain_flutter_app/common/Images.dart';
import 'package:netrain_flutter_app/douwen/custom/BaseView.dart';
import 'package:netrain_flutter_app/douwen/custom/BaseViewModel.dart';
import 'Demo2.dart';
import 'secondpage.dart'; import 'secondpage.dart';
void main() { void main() {
...@@ -14,6 +17,8 @@ void main() { ...@@ -14,6 +17,8 @@ void main() {
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
// This widget is the root of your application. // This widget is the root of your application.
BaseViewModel viewModel = BaseViewModel();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WillPopScope( return WillPopScope(
...@@ -24,14 +29,16 @@ class MyApp extends StatelessWidget { ...@@ -24,14 +29,16 @@ class MyApp extends StatelessWidget {
primarySwatch: Colors.blue, primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity, visualDensity: VisualDensity.adaptivePlatformDensity,
), ),
home: Scaffold( initialRoute: "key1",
routes: <String, WidgetBuilder>{
"key1": (context) =>
Scaffold(
body: Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("路由"), title: Text("这个是标题"),
),
body: RouterNavigator(title: 'Flutter Demo Home Page'),
), ),
routes: <String, WidgetBuilder>{ body:Demo2(),
"key1": (context) => MyApp(), )),
"key2": (context) => Second() "key2": (context) => Second()
}, },
), ),
...@@ -40,34 +47,6 @@ class MyApp extends StatelessWidget { ...@@ -40,34 +47,6 @@ class MyApp extends StatelessWidget {
return true; return true;
}); });
} }
}
class RouterNavigator extends StatefulWidget {
RouterNavigator({Key key, this.title}) : super(key: key);
final String title;
@override
_RouterNavigatorState createState() => _RouterNavigatorState();
}
class _RouterNavigatorState extends State<RouterNavigator> {
bool byName = false;
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: [
_item("跳转", () async {
var result = await Navigator.pushNamed(context, "key2",
arguments: "this is value");
print("返回值:$result");
}),
Image.asset(Images.bg_my_01)
],
),
);
}
_item(String title, VoidCallback onPressed) { _item(String title, VoidCallback onPressed) {
return Container( return Container(
......
...@@ -39,7 +39,10 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -39,7 +39,10 @@ class _RouterNavigatorState extends State<RouterNavigator> {
child: Column( child: Column(
children: [ children: [
_item("跳转", () { _item("跳转", () {
Navigator.popUntil(context,ModalRoute.withName("/")); Navigator.of(context).popUntil(ModalRoute.withName("key1"));
}),
_item("跳转", () {
Navigator.pushNamed(context,"key2");
}) })
], ],
), ),
......
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);
@override
_fifthDemoState createState() {
return _fifthDemoState();
}
}
class _fifthDemoState extends State<fifthDemo> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("第五个页面"),
),
body: fifthListViewDemo(),
);
}
}
class fifthListViewDemo extends StatefulWidget {
// fifthListViewDemo({Key key}) : super(key: key);
@override
_fifthListViewDemoState createState() {
return _fifthListViewDemoState();
}
}
class _fifthListViewDemoState extends State<fifthListViewDemo> {
List<int>listArr = List();
@override
void initState() {
super.initState();
for(var i = 0; i<100 ;i++){
listArr.add(i);
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scrollbar(
child: RefreshIndicator(
child: ListView.builder(itemBuilder:(BuildContext context, int index){
if (index == 2) {
}
return Container(
child: Flex(
direction: Axis.vertical,
children: [
Text(listArr[index].toString()),
ElevatedButton(onPressed: (){
Navigator.of(context).push(MaterialPageRoute(
builder: (context){
return MVVMViewDemo();
}
));
}, child:Text("点击进入MVVM设计模式页面") ),
Container(
width: 100,
height: 300,
color: Colors.orange,
)
],
),
);
}),
onRefresh: _onRefresh,
),
);
}
Future _onRefresh() async {
await Future.delayed(
Duration(seconds: 2),
() {
print("object");
},
);
return "";
}
}
\ No newline at end of file
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';
class jssPageDemo extends StatelessWidget { class jssPageDemo extends StatelessWidget {
// const ({Key? key}) : super(key: key) // const ({Key? key}) : super(key: key)
...@@ -91,14 +94,17 @@ class buttonDemo extends StatelessWidget { ...@@ -91,14 +94,17 @@ class buttonDemo extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
children: [ children: [
//改用ElevatedButton
RaisedButton( RaisedButton(
onPressed: (){}, onPressed: (){},
child:Text("漂浮按钮") child:Text("漂浮按钮")
), ),
//改用 TextButton
FlatButton( FlatButton(
onPressed: (){}, onPressed: (){},
child: Text("扁平按钮") child: Text("扁平按钮")
), ),
//改用 TextButton
FlatButton.icon( FlatButton.icon(
onPressed: (){}, onPressed: (){},
icon: Icon(Icons.outbound), icon: Icon(Icons.outbound),
...@@ -106,6 +112,7 @@ class buttonDemo extends StatelessWidget { ...@@ -106,6 +112,7 @@ class buttonDemo extends StatelessWidget {
color: Colors.black, color: Colors.black,
textColor: Colors.white, textColor: Colors.white,
), ),
//改用 OutlinedButton
OutlineButton(onPressed: (){}, OutlineButton(onPressed: (){},
child: Text("边框按钮"), child: Text("边框按钮"),
), ),
...@@ -135,6 +142,9 @@ class imageiconDemo extends StatelessWidget { ...@@ -135,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("测试点击事件请求"))
], ],
); );
...@@ -144,3 +154,10 @@ class imageiconDemo extends StatelessWidget { ...@@ -144,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);
@override
_fourthDemoState createState() {
return _fourthDemoState();
}
}
class _fourthDemoState extends State<fourthDemo> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("jss测试第四个页面"),
),
body: someDemo());
}
}
class someDemo extends StatefulWidget {
someDemo({Key key}) : super(key: key);
@override
_someDemoState createState() {
return _someDemoState();
}
}
class _someDemoState extends State<someDemo> {
List<int> listArrData = List();
@override
void initState() {
super.initState();
for (var i = 0; i < 100; i++) {
listArrData.add(i);
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scrollbar(
child: RefreshIndicator(
child: ListView(
//y轴
scrollDirection: Axis.vertical,
children: listArrData
.map((e) => Container(
width: 200,
height: 100,
child: Flex(
direction: Axis.vertical,
children: [
Text(e.toString()),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context){
return fifthDemo();
}));
},
child: Text("点击进入第5个页面"))
],
),
decoration: BoxDecoration(
color: Colors.red,
),
//旋转跳跃我闭着眼
// transform: Matrix4.rotationZ(0.5),
))
.toList(),
),
onRefresh: _onRefresh,
));
}
Future _onRefresh() async {
await Future.delayed(
Duration(seconds: 2),
() {
print("object");
},
);
return "";
}
}
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 'thirdVC.dart'; import 'thirdVC.dart';
class twoVCdemo extends StatelessWidget { class twoVCdemo extends StatelessWidget {
// const ({Key? key}) : super(key: key); // const ({Key? key}) : super(key: key);
...@@ -12,20 +11,21 @@ class twoVCdemo extends StatelessWidget { ...@@ -12,20 +11,21 @@ class twoVCdemo extends StatelessWidget {
appBar: AppBar( appBar: AppBar(
title: Text("jssDemo第二个页面的标题"), title: Text("jssDemo第二个页面的标题"),
), ),
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) {
return nextViewDemo(); return nextViewDemo();
}, },
settings: RouteSettings( settings: RouteSettings(
name: "我是传过去的", name: "我是传过去的",
arguments:"参数,是对象类型", arguments: "参数,是对象类型",
), ),
//是否有返回 //是否有返回
maintainState: false, maintainState: false,
...@@ -35,12 +35,34 @@ class twoVCdemo extends StatelessWidget { ...@@ -35,12 +35,34 @@ class twoVCdemo extends StatelessWidget {
); );
}, },
), ),
Flex(direction:Axis.horizontal,
Flex(
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)),
],
),
)
], ],
) )
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/jishuaishuai/fourthVC.dart';
class nextViewDemo extends StatelessWidget { class nextViewDemo extends StatelessWidget {
...@@ -7,13 +8,16 @@ class nextViewDemo extends StatelessWidget { ...@@ -7,13 +8,16 @@ class nextViewDemo extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: Colors.black26,
appBar: AppBar( appBar: AppBar(
title: Text("jss测试第三界面"), title: Text("jss测试第三界面"),
), ),
body: Column( body: Container(
child: Flex(
direction: Axis.vertical,
children: [ children: [
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
...@@ -23,11 +27,132 @@ class nextViewDemo extends StatelessWidget { ...@@ -23,11 +27,132 @@ class nextViewDemo extends StatelessWidget {
}, },
child: Text("点击返回传值"), child: Text("点击返回传值"),
), ),
ElevatedButton(onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder:(context){
return fourthDemo();
},
settings: RouteSettings(
name: "thirdVC"
)
)
);
}, child: Container(
child: Text("点击进入第四个页面"),
)
),
listViewDemo(),
WarpDemo(),
],
),
)
);
}
}
class listViewDemo extends StatefulWidget {
listViewDemo({Key key}) : super(key: key);
@override
_listViewDemoState createState() {
return _listViewDemoState(
);
}
}
class _listViewDemoState extends State<listViewDemo> {
@override
void initState() {
super.initState();
//创建时
}
@override
void dispose() {
//销毁时
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
width: 600,
height: 300,
color: Colors.grey,
child:Align(
alignment:Alignment(-0.5,0.5),
child: Stack(
alignment: AlignmentDirectional.topStart,
children: [
Container(
width: 100,
height: 100,
color: Colors.orange,
),
Positioned(
left: 20,
right: 30,
top: 10,
bottom: 20,
child: Container(
color: Colors.red,
)),
], ],
), ),
)
);
}
}
class WarpDemo extends StatefulWidget {
WarpDemo({Key key}) : super(key: key);
@override
_WarpDemoState createState() {
return _WarpDemoState();
}
}
class _WarpDemoState extends State<WarpDemo> {
List<int>listArr = List();
@override
void initState() {
super.initState();
for(var i = 0;i < 10;i++){
listArr.add(i);
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Wrap(
// spacing: 10.0,
runAlignment: WrapAlignment.center,
// runSpacing: 1,
children: listArr.map((e) => Container(
height: 100,
width: 100,
child: Text(e.toString()),
color: Colors.blue,
)).toList(
)
); );
} }
} }
\ No newline at end of file
...@@ -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");
}
}
}
import 'package:flustars/flustars.dart';
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
_DoctorHomePageState createState() => _DoctorHomePageState();
}
class _DoctorHomePageState extends State<DoctorHomePage> {
final _scrollController = ScrollController();
var isShowBlackTitle = false;
@override
void initState() {
super.initState();
_scrollController.addListener(() {
if (_scrollController.offset > 302.dp() && !isShowBlackTitle) {
setState(() {
isShowBlackTitle = true;
});
} else if (_scrollController.offset < 302.dp() && isShowBlackTitle) {
setState(() {
isShowBlackTitle = false;
});
}
});
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
physics: BouncingScrollPhysics(),
controller: _scrollController,
slivers: [
SliverAppBar(
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(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xff379BFF), Color(0xff0B7CEE)])),
child: Stack(
children: [
Positioned(
child: ClipOval(
//圆形裁剪
child: Container(
height: 56.dp(),
width: 56.dp(),
constraints:
BoxConstraints(maxHeight: 100.dp(), maxWidth: 100.dp()),
foregroundDecoration: BoxDecoration(
borderRadius: BorderRadius.circular(50.dp()),
border: Border.all(
color: Colors.white,
width: 2.dp(),
style: BorderStyle.solid)),
child: Image.network(
'http://pix2.tvzhe.com/thumb/star/60/87/260x346.jpg',
height: 56.dp(),
width: 56.dp(),
fit: BoxFit.cover,
),
),
),
top: 106.dp(),
left: 18.dp(),
),
Positioned(
child: Text(
"愚鱼余",
style: TextStyle(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.bold),
),
top: 106.dp(),
left: 82.dp(),
),
Positioned(
child: Text(
"主任医师",
style: TextStyle(color: Colors.white, fontSize: 12),
),
top: 111.dp(),
left: 144.dp(),
),
Positioned(
child: Container(
width: 68.dp(),
height: 20.dp(),
decoration: BoxDecoration(
color: Colors.white30,
borderRadius: BorderRadius.circular(10.dp())),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"浏览主页",
style: TextStyle(
height: 1.1,
color: Colors.white,
fontSize: 11
),
),
Image.asset(Images.ic_more_white_little)
],
),
),
top: 138.dp(),
left: 82.dp(),
),
Positioned(
child: Image.asset(
Images.ic_code,
height: 30.dp(),
width: 30.dp(),
),
top: 117.dp(),
right: 16.dp(),
),
Positioned(
child: Container(
child: _getStatisticsView(),
width: ScreenUtil.getScreenW(context),
),
top: 185.dp(),
),
Positioned(
child: Container(
padding: EdgeInsets.only(left: 8.dp(),right: 8.dp()),
child: Flex(
direction: Axis.horizontal,
children: [
_getTab("药房续方", "12"),
_getTab("等待接诊", "10"),
],
),
width: ScreenUtil.getScreenW(context),
),
top: 253.dp(),
),
],
),
),
),
),
SliverToBoxAdapter(
child: Container(
margin: EdgeInsets.only(top: 16.dp(), bottom: 16.dp()),
child: Wrap(
spacing: 8.dp(),
children: [
Image.asset(Images.ic_home_list),
Text(
"咨询列表",
textAlign: TextAlign.center,
style: TextStyle(
color: AppColors.EditTextColor,
fontSize: 18,
fontWeight: FontWeight.bold),
),
],
),
),
),
_getChatList(),
],
),
);
}
List<String> list = List.generate(10, (index) => "马云 $index");
var showEmpty = false;
/// 咨询列表
Widget _getChatList() {
return list.isEmpty
? _getEmptyView()
: SliverList(
delegate:
SliverChildBuilderDelegate((BuildContext context, int index) {
return Dismissible(
background: Container(
alignment: Alignment.centerRight,
padding: EdgeInsets.only(right: 16.dp()),
color: Colors.red,
child: Text(
"删除",
style: TextStyle(color: Colors.white),
textAlign: TextAlign.center,
),
),
key: Key("${list[index]}"),
onDismissed: (direction) {
setState(() {
print(
"删除成功? ${list.remove(list[index])}, ${list.toString()}");
});
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text("删除了 $index")));
},
child: Container(
width: ScreenUtil.getScreenW(context),
height: 82.dp(),
child: Stack(
children: [
Positioned(
child: Image.asset(
Images.ic_doctor_avatar,
width: 50.dp(),
height: 50.dp(),
),
top: 16.dp(),
left: 5.dp(),
),
Positioned(
child: Text(
"${list[index]}",
style: TextStyle(
color: AppColors.EditTextColor,
fontWeight: FontWeight.bold,
fontSize: 16),
),
top: 16.dp(),
left: 66.dp(),
),
Positioned(
width: ScreenUtil.getScreenW(context) * 0.7,
child: Text(
"感冒发烧流鼻涕,建议您多喝热水建议您多喝热水建议您多喝热水建议您多喝热水建议您多喝热",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: AppColors.color_999, fontSize: 14),
),
bottom: 18.dp(),
left: 66.dp(),
),
Positioned(
child: Text(
"刚刚",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: AppColors.hintText, fontSize: 12),
),
top: 16.dp(),
right: 16.dp(),
),
Positioned(
child: Container(
margin: EdgeInsets.only(left: 16.dp(), right: 16.dp()),
width: ScreenUtil.getScreenW(context) - 32,
height: 1,
color: AppColors.dividerColor,
),
bottom: 0,
)
],
),
),
);
}, childCount: list.length));
}
/// 咨询列表的空数据视图
Widget _getEmptyView() {
return SliverList(
delegate: SliverChildListDelegate([
Image.asset(
Images.img_blank_nomessage,
fit: BoxFit.none,
),
Text(
"您暂时没有新消息",
style: TextStyle(
fontSize: 14,
color: AppColors.text_default_color,
),
textAlign: TextAlign.center,
)
]));
}
/// 中间的医生统计数据
Widget _getStatisticsView() {
return Flex(
direction: Axis.horizontal,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: getStatisticsChild("123", "患者人数"),
flex: 1,
),
Expanded(
child: getStatisticsChild("537", "累计处方次数"),
flex: 1,
),
Expanded(
child: getStatisticsChild("189", "累计问诊次数"),
flex: 1,
),
// getStatisticsChild("537", "累计处方次数"),
// getStatisticsChild("189", "累计问诊次数"),
],
);
}
Column getStatisticsChild(String num, String name) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
num,
style: TextStyle(
color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold),
),
Text(
name,
style: TextStyle(color: Color(0xccffffff), fontSize: 11),
),
],
);
}
/// 药房续方和等待接诊
Widget _getTab(String name, String num) {
return Expanded(
flex: 1,
child: Container(
height: 83.dp(),
margin: 8.spacingHorizontal(),
child: Stack(
children: [
Image.asset(Images.img_home_pharmacy),
Positioned(
child: Text(
name,
style: TextStyle(
color: AppColors.mainColor,
fontSize: 14,
fontWeight: FontWeight.bold),
),
top: 10.dp(),
left: 10.dp(),
),
Positioned(
child: Text(
num,
style: TextStyle(
color: AppColors.mainColor,
fontSize: 36,
fontWeight: FontWeight.bold),
),
bottom: 0,
left: 10.dp(),
),
],
),
),
);
}
}
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/Ext.dart';
class DoctorHomePage extends StatefulWidget { class PharmacyPage extends StatefulWidget {
@override @override
_DoctorHomePageState createState() => _DoctorHomePageState(); _PharmacyPageState createState() {
return _PharmacyPageState();
}
} }
class _DoctorHomePageState extends State<DoctorHomePage>{ class _PharmacyPageState extends State<PharmacyPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
...@@ -20,6 +22,7 @@ class _DoctorHomePageState extends State<DoctorHomePage>{ ...@@ -20,6 +22,7 @@ class _DoctorHomePageState extends State<DoctorHomePage>{
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container(); // 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,6 +122,7 @@ class _RegisterState extends State { ...@@ -123,6 +122,7 @@ class _RegisterState extends State {
} }
onRegisterClick() { onRegisterClick() {
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("请求注册")));
} }
...@@ -203,11 +203,11 @@ class _RegisterState extends State { ...@@ -203,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_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/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/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';
...@@ -20,32 +30,57 @@ import 'zhangfeng/LayoutDemo.dart'; ...@@ -20,32 +30,57 @@ 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);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
return WillPopScope( return WillPopScope(
child: MaterialApp( child: MaterialApp(
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(),
...@@ -53,31 +88,32 @@ class MyApp extends StatelessWidget { ...@@ -53,31 +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(),
"car_details":(context) =>CarDetailsPage(), "grid_page": (context) => GridPage(),
"grid_page":(context) =>GridPage() "doctorHome": (context) => DoctorHomePage(),
"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'),
); );
...@@ -97,7 +133,10 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -97,7 +133,10 @@ class _RouterNavigatorState extends State<RouterNavigator> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
child: Column( child: Container(
margin: EdgeInsets.only(left: 10, right: 10),
child: Wrap(
spacing: 10,
children: [ children: [
SwitchListTile( SwitchListTile(
title: Text('${byName ? '' : '不'}通过路由名跳转'), title: Text('${byName ? '' : '不'}通过路由名跳转'),
...@@ -107,32 +146,40 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -107,32 +146,40 @@ class _RouterNavigatorState extends State<RouterNavigator> {
byName = value; byName = value;
}); });
}), }),
_item("less页面", LessGroupPage(), 'less'), _item("登陆", LoginPage(), 'login',context),
_item("ful页面", FulGroupPage(), 'ful'), _item("首页", LessGroupPage(), 'doctor_MainPage',context),
_item("layout页面", LayoutPage(), 'layout'), _item("less页面", LessGroupPage(), 'less',context),
_item("拍照页面", PhotoApp(), 'photo'), _item("ful页面", FulGroupPage(), 'ful',context),
_item("登陆", LoginPage(), 'login'), _item("layout页面", LayoutPage(), 'layout',context),
_item("登录网络请求", LoginRequestPage(), 'LoginRequestPage'), _item("拍照页面", PhotoApp(), 'photo',context),
_item("CustomTabPage",TabBarPage(),'CustomTabPage'), _item("登录网络请求", LoginRequestPage(), 'LoginRequestPage',context),
_item("PageView",SampleAppPage(),'PageView'), _item("CustomTabPage", TabBarPage(), 'CustomTabPage',context),
_item("LayoutDemo", LayoutDemo(), 'LayoutDemo'), _item("PageView", SampleAppPage(), 'PageView',context),
_item("listview页面",List_Page(),'listPage'), _item("LayoutDemo", LayoutDemo(), 'LayoutDemo',context),
_item("jssDemo", jssPageDemo(), 'firstVC'), _item("listview页面", List_Page(), 'listPage',context),
_item("jssDemo", jssPageDemo(), 'student'), _item("jssDemo", jssPageDemo(), 'firstVC',context),
_item("gridView",GridPage(),'grid_page') _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),
...@@ -140,4 +187,3 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -140,4 +187,3 @@ class _RouterNavigatorState extends State<RouterNavigator> {
); );
} }
} }
import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/common/Images.dart';
/**
* @author xuehao
* on 2021/7/14
*/
class BottomNavPage extends StatefulWidget {
BottomNavPage({Key key}) : super(key: key);
@override
_BottomNavPageState createState() => _BottomNavPageState();
}
class _BottomNavPageState extends State<BottomNavPage> {
int _index = 0;
@override
Widget build(BuildContext context) {
List<BottomNavigationBarItem> _bottomNavigationbar = [
BottomNavigationBarItem(
title: Text("工作站"),
icon: Image.asset(Images.ic_bottom_01),
),
BottomNavigationBarItem(
title: Text("消息"),
icon: Image.asset(Images.ic_bottom_02),
),
BottomNavigationBarItem(
//显示的字样
title: Text("我的"),
//未选中时的图片
icon: Image.asset(Images.ic_bottom_03),
//选中后的图片
activeIcon: Image.asset(Images.ic_bottom_03_true),
),
];
List<Widget> _widgetItems = [
HomePage(),
MsgPage(),
UserCenter(),
];
return new MaterialApp(
title: "bottom_page",
home: Scaffold(
bottomNavigationBar: BottomNavigationBar(
items: _bottomNavigationbar,
type: BottomNavigationBarType.fixed,
currentIndex: _index,
onTap: (index) {
_changePage(index);
},
),
body: _widgetItems[_index]),
);
}
_changePage(int index) {
setState(() {
_index = index;
});
}
}
class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);
@override
_HomePageState createState() {
return _HomePageState();
}
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
backgroundColor: (AppColors.blue_bg_color),
title: Text(
"基本信息",
style: TextStyle(
fontSize: 16,
),
),
centerTitle: true,
leading: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Icon(Icons.arrow_back_ios),
),
actions: [
Container(
margin: EdgeInsets.fromLTRB(0, 0, 10, 0),
alignment: Alignment.centerRight,
child: Text(
"稍后提交",
textAlign: TextAlign.center,
),
)
],
),
body: new Column(children: [
Container(
height: 80,
color: (AppColors.blue_bg_color),
child: Column(
children: [
Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(width: 54),
Container(
alignment: Alignment.center,
height: 22,
width: 22,
child: Text(
"1",
style: TextStyle(color: (AppColors.blue_bg_color)),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0),
color: Colors.white,
),
),
Spacer(),
Container(
alignment: Alignment.center,
height: 22,
width: 22,
child: Text(
"2",
style: TextStyle(color: (AppColors.blue_bg_color)),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0),
color: (AppColors.white_transparent_50),
),
),
Spacer(),
Container(
alignment: Alignment.center,
height: 22,
width: 22,
child: Text(
"3",
style: TextStyle(color: (AppColors.blue_bg_color)),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11.0),
color: (AppColors.white_transparent_50),
),
),
SizedBox(width: 54),
],
),
SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(width: 41),
Text(
"基本信息",
style: TextStyle(color: Colors.white, fontSize: 12),
),
Spacer(),
Text(
"提交证件",
style: TextStyle(
color: (AppColors.white_transparent_50),
fontSize: 12),
),
Spacer(),
Text(
"审核完毕",
style: TextStyle(
color: (AppColors.white_transparent_50),
fontSize: 12),
),
SizedBox(width: 41),
],
),
Spacer(),
],
),
),
Container(
margin: EdgeInsets.all(16),
padding: EdgeInsets.fromLTRB(0, 0, 0, 16),
decoration: BoxDecoration(
color: (AppColors.blue_bg_color2),
borderRadius: BorderRadius.circular(4.0),
),
child: Column(
children: [
Container(
child: Text(
"您完成所有认证资料,并完成互联网医院认证备案后,杏联医生工作室将为您提供以下功能:",
style: TextStyle(
fontSize: 12, color: AppColors.text_default_color),
),
margin: EdgeInsets.all(10),
),
Row(
children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
child: Row(
children: [
Column(
children: [
Text(
"邀请患者",
style: TextStyle(
fontSize: 16,
color: (AppColors.EditTextColor),
fontWeight: FontWeight.bold),
),
Text(
"专属二维码",
style: TextStyle(
color: (AppColors.text_default_color),
fontSize: 12
),
)
],
),
SizedBox(width: 16),
Image.asset(Images.ic_friend)
],
),
),
flex: 1,
),
Expanded(
child: Container(
child: Row(
children: [
Column(
children: [
Text(
"电子处方权",
style: TextStyle(
fontSize: 16,
color: AppColors.EditTextColor,
fontWeight: FontWeight.bold),
),
Text(
"建立自己的诊室",
style: TextStyle(
color: AppColors.text_default_color,
fontSize: 12
),
)
],
),
SizedBox(width: 16),
Image.asset(Images.ic_prescription_home)
],
),
),
flex: 1,
),
],
),
],
),
)
]),
);
}
}
class MsgPage extends StatefulWidget {
MsgPage({Key key}) : super(key: key);
@override
_MsgPageState createState() {
return _MsgPageState();
}
}
class _MsgPageState extends State<MsgPage> {
@override
Widget build(BuildContext context) {
return Center(
child: Text("消息"),
);
}
}
class UserCenter extends StatefulWidget {
UserCenter({Key key}) : super(key: key);
@override
_UserCenterState createState() {
return _UserCenterState();
}
}
class _UserCenterState extends State<UserCenter> {
@override
Widget build(BuildContext context) {
return Center(
child: Text("个人中心"),
);
}
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class CirclePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = new Paint();
paint.isAntiAlias = true;
paint.strokeWidth = 0.0;
paint.color = Colors.white;
paint.invertColors = false;
canvas.drawCircle(
Offset(size.width / 2, size.height / 2), size.height / 2, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
...@@ -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
...@@ -43,6 +45,8 @@ dependencies: ...@@ -43,6 +45,8 @@ dependencies:
convert: ^3.0.1 #转码器 convert: ^3.0.1 #转码器
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
flustars: ^2.0.1 #强大的工具类库 flustars: ^2.0.1 #强大的工具类库
shared_preferences: ^2.0.6
provider: ^4.1.0
dev_dependencies: dev_dependencies:
......
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