Commit ec19dac5 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:
  完成注册页面
  修改页面,页面传值路由初探
  定义主体颜色
  路由传值取值
  修改

# Conflicts:
#	netrain_flutter_app/lib/main.dart
parents 556ea774 8d2f6f19
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 50; objectVersion = 51;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
...@@ -355,7 +355,7 @@ ...@@ -355,7 +355,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = K5YZT8RS9U; DEVELOPMENT_TEAM = 4TYNTWZC9Y;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
...@@ -493,7 +493,7 @@ ...@@ -493,7 +493,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = K5YZT8RS9U; DEVELOPMENT_TEAM = 4TYNTWZC9Y;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
...@@ -525,7 +525,7 @@ ...@@ -525,7 +525,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = K5YZT8RS9U; DEVELOPMENT_TEAM = 4TYNTWZC9Y;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
......
/// 项目颜色配置 /// 项目颜色配置
class AppColors{ class AppColors{
/// 标题背景颜色
static const titleBackgroundColor = 0xffffffff;
/// 主色 /// 主色
static const mainColor = 0xff2893FF; static const mainColor = 0xff2893FF;
/// hint颜色 /// hint颜色
static const hintText = 0xffb4b4b4; static const hintText = 0xffb4b4b4;
/// 输入框字体颜色 /// 输入框字体颜色
static const EditTextColor = 0xff333333; static const EditTextColor = 0xff333333;
/// 页面背景颜色
static const scaffoldBackgroundColor = 0xffffffff;
/// 分割线颜色
static const dividerColor = 0xffeeeeee;
/// 控件禁用时的颜色
static const disabledColor = 0xffdddddd;
} }
\ No newline at end of file
import 'package:flutter/material.dart';
class jssPageDemo extends StatelessWidget {
// const ({Key? key}) : super(key: key)
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("jss测试页面"),
),
body:Column(
children:[
RaisedButton(
onPressed:() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context){
return twoVCdemo();
},
settings: RouteSettings(
name: "我是传过去的",
arguments:"参数,是对象类型",
)
),
);
},
child: Text("点击进入下一页,页面传值与返回。"),
),
textDemo(),
buttonDemo(),
imageiconDemo(),
]
)
);
return Container(
child: Column(
children: [
textDemo(),
buttonDemo(),
imageiconDemo(),
],
)
);
}
}
class twoVCdemo extends StatelessWidget {
// const ({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("jssDemo第二个页面的标题"),
),
body: Column(
children: [
IconButton(
icon: Icon(Icons.home),
onPressed:() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context){
return nextViewDemo();
},
settings: RouteSettings(
name: "我是传过去的",
arguments:"参数,是对象类型",
),
//是否有返回
maintainState: false,
//类似iOS ture 弹窗式推送界面 false 是push
fullscreenDialog: false,
),
);
},
),
],
),
);
}
}
class nextViewDemo extends StatelessWidget {
// const nextViewDemo({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("jss测试第三界面"),
),
body: Column(
children: [
RaisedButton(onPressed: () {
Navigator.of(context).pop(
"我传过来值了,这是一个对象类型"
);
},
child: Text("点击返回传值"),
),
],
),
);
}
}
import 'dart:ffi';
import 'dart:html';
import 'package:flutter/material.dart';
class textDemo extends StatelessWidget { class textDemo extends StatelessWidget {
// const ({Key? key}) : super(key: key); // const ({Key? key}) : super(key: key);
...@@ -77,9 +203,9 @@ class imageiconDemo extends StatelessWidget { ...@@ -77,9 +203,9 @@ class imageiconDemo extends StatelessWidget {
children: [ children: [
Icon(Icons.add), Icon(Icons.add),
IconButton(onPressed: (){}, icon: Icon(Icons.home)), IconButton(onPressed: (){}, icon: Icon(Icons.home)),
Image.network("http://www.baidu.com/baidu.php?url=a00000KEJeCxDFezEVpFL9_MH8XSqbHklw_maA_-0O-JAG-gv2I-uvEAQqh-teALqpO_NZN1EbyMj5iOpf3Z1ZREUPx5_1lniEkZj6mijxFoM8VqoaPcH0KOxWwCyPbmri5Hlwk-A8u4pBUbGLW2x882fEua1eOAEbBWTdTqxEMA631a3yr2qBWOz88FPpAVsair-sXakr4y6eguntj86fZCDab3.DR_aOQZsYpb2glyIiUr2s1f_uQr1Fv20.U1Yk0ZDqVSXS_0KY5IissIpS_QMU8pi110KGUHY1PWT0Iybq0ZKGujYk0APGujY1rjc0mhbqn10k0AuY5H00TA6qn0KET1Ys0AFL5H00UMfqn0K1XWY0ThIYmyTqn0K8IM0qna3snj0snj0sn0K-ThTqn0KYTh7buHYdrH0knHm0mhwGujdKnWT1rj0sPHnLPYm1fHndrRmdrH64rjDkwjT3PHcsPsKbmvPb5fK9TdqGuAnqujcVmhwbX0KzIjY3P1T0TgKGujYs0Z7Wpyfqn0K9mWYsg100TZ0qn0KVIZ0qn0KbuAqs5H00ThCqn0KYIgnqnHT1P1DYnWD3P1nYP1RznWDYnW60mynqnfKsUWYs0ZK9I7qhUA7M5H00ugwGujYVnfK9TLKWm1Ys0ZNspy4Wm1Ys0AuWIgfqn0K9uAu_myTqnfKLuMFEUHY0mMfqnfKzug7Y5HDvnWRLnW64rHTvrjm0Tv-b5Hbsn16Lm179n1F9nHRvrj60ULfqn0KETMKY5H0WnaPDw-fWnansc10Wna3sc10WwDuRc10WwDuR0AVG5H00UgfqnWfkn0KVm1Ys0AdWgvuzUvYqn0Kbmy4dmhNxTAk9Uh-bT1Ys0A7bTgbqVSXS_0K9uZ7Y5H00pgPWUjYs0Z7VIjYs0A7bgLPEIgFWuHYsczn0mLFW5HRkrjcL", // Image.network("http://www.baidu.com/baidu.php?url=a00000KEJeCxDFezEVpFL9_MH8XSqbHklw_maA_-0O-JAG-gv2I-uvEAQqh-teALqpO_NZN1EbyMj5iOpf3Z1ZREUPx5_1lniEkZj6mijxFoM8VqoaPcH0KOxWwCyPbmri5Hlwk-A8u4pBUbGLW2x882fEua1eOAEbBWTdTqxEMA631a3yr2qBWOz88FPpAVsair-sXakr4y6eguntj86fZCDab3.DR_aOQZsYpb2glyIiUr2s1f_uQr1Fv20.U1Yk0ZDqVSXS_0KY5IissIpS_QMU8pi110KGUHY1PWT0Iybq0ZKGujYk0APGujY1rjc0mhbqn10k0AuY5H00TA6qn0KET1Ys0AFL5H00UMfqn0K1XWY0ThIYmyTqn0K8IM0qna3snj0snj0sn0K-ThTqn0KYTh7buHYdrH0knHm0mhwGujdKnWT1rj0sPHnLPYm1fHndrRmdrH64rjDkwjT3PHcsPsKbmvPb5fK9TdqGuAnqujcVmhwbX0KzIjY3P1T0TgKGujYs0Z7Wpyfqn0K9mWYsg100TZ0qn0KVIZ0qn0KbuAqs5H00ThCqn0KYIgnqnHT1P1DYnWD3P1nYP1RznWDYnW60mynqnfKsUWYs0ZK9I7qhUA7M5H00ugwGujYVnfK9TLKWm1Ys0ZNspy4Wm1Ys0AuWIgfqn0K9uAu_myTqnfKLuMFEUHY0mMfqnfKzug7Y5HDvnWRLnW64rHTvrjm0Tv-b5Hbsn16Lm179n1F9nHRvrj60ULfqn0KETMKY5H0WnaPDw-fWnansc10Wna3sc10WwDuRc10WwDuR0AVG5H00UgfqnWfkn0KVm1Ys0AdWgvuzUvYqn0Kbmy4dmhNxTAk9Uh-bT1Ys0A7bTgbqVSXS_0K9uZ7Y5H00pgPWUjYs0Z7VIjYs0A7bgLPEIgFWuHYsczn0mLFW5HRkrjcL",
fit: BoxFit.fitWidth // fit: BoxFit.fitWidth
), // ),
Image.asset("ic_home_normal.png") Image.asset("ic_home_normal.png")
], ],
); );
......
...@@ -13,8 +13,7 @@ class _HomePageState extends State { ...@@ -13,8 +13,7 @@ class _HomePageState extends State {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return Scaffold(
home: Scaffold(
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(
backgroundColor: Colors.white, backgroundColor: Colors.white,
selectedFontSize: 10, selectedFontSize: 10,
...@@ -37,7 +36,6 @@ class _HomePageState extends State { ...@@ -37,7 +36,6 @@ class _HomePageState extends State {
], ],
), ),
body: showBody(), body: showBody(),
),
); );
} }
......
...@@ -16,15 +16,32 @@ class _RegisterState extends State { ...@@ -16,15 +16,32 @@ class _RegisterState extends State {
final phoneController = TextEditingController(); final phoneController = TextEditingController();
final codeController = TextEditingController(); final codeController = TextEditingController();
final passwordController = TextEditingController(); final passwordController = TextEditingController();
var isShowPassword = false;
var isShowClean = false;
@override @override
Widget build(BuildContext context) { void initState() {
super.initState();
// 获取上一个页面的传值
List<String> args = ModalRoute.of(context).settings.arguments;
phoneController.text = args.first; nameController.addListener(() {
setState(() {});
});
phoneController.addListener(() {
setState(() {});
});
codeController.addListener(() {
setState(() {});
});
passwordController.addListener(() {
print("密码 ${passwordController.text}");
setState(() {
isShowClean = passwordController.text.isNotEmpty;
});
});
}
@override
Widget build(BuildContext context) {
return registerWidget(); return registerWidget();
} }
...@@ -38,51 +55,147 @@ class _RegisterState extends State { ...@@ -38,51 +55,147 @@ class _RegisterState extends State {
} }
Widget registerWidget() { Widget registerWidget() {
return MaterialApp( return Scaffold(
theme: ThemeData( appBar: AppBar(
primaryColor: Colors.white, leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).popUntil(ModalRoute.withName("main"));
// Navigator.of(context).pushNamed("login2");
},
),
centerTitle: true,
title: Text("注册"),
elevation: 0,
), ),
home: Scaffold( body: Container(
appBar: AppBar( margin: EdgeInsets.fromLTRB(16, 0, 16, 0),
leading: IconButton( child: ListView(
icon: Icon(Icons.arrow_back), children: [
onPressed: () { _getTextField(TextInputType.text,"请输入姓名", nameController, 10, false),
Navigator.of(context).popUntil(ModalRoute.withName("main")); _getTextField(TextInputType.number,"请输入手机号码", phoneController, 11, false),
// Navigator.of(context).pushNamed("login2"); Stack(
}, children: [
), _getTextField(TextInputType.number,"请输入验证码", codeController, 8, false),
centerTitle: true, Positioned(
title: Text("注册"), child: Text("获取验证码"),
elevation: 0, right: 16,
), top: 20,
body: Container( )
margin: EdgeInsets.fromLTRB(16, 16, 16, 0), ],
child: ListView( ),
children: [ _getPassWordField(),
_getTextField("请输入姓名",nameController), Text(
_getTextField("请输入手机号码",phoneController), "密码由9-16位大小写字母、数字加特殊符号组成",
Stack(children: [ style:
_getTextField("请输入验证码",codeController), TextStyle(color: Color(AppColors.mainColor), fontSize: 12),
// Positioned(child: ) ),
Container(
margin: EdgeInsets.only(top: 20),
height: 40,
child: ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.resolveWith((states) {
if (states.contains(MaterialState.disabled)) {
return Color(AppColors.disabledColor);
}
return Color(AppColors.mainColor);
}),
),
child: Text(
"注册",
style: TextStyle(color: Colors.white),
),
onPressed: checkIsAllEmpty() ? null : onRegisterClick),
)
],
)),
);
}
],), onRegisterClick() {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("注册")));
}
_getTextField("请输入9-16位密码",passwordController), /// 校验是否全部为空
], bool checkIsAllEmpty() {
), if (phoneController.text.isNotEmpty &&
)), nameController.text.isNotEmpty &&
codeController.text.isNotEmpty &&
passwordController.text.isNotEmpty) {
return false;
}
return true;
}
Widget _getPassWordField() {
TextField password =
_getTextField(TextInputType.number,"请输入9-16位密码", passwordController, 16, isShowPassword);
return Stack(
children: [
password,
Positioned(
right: 32,
top: 10,
child: Visibility(
visible: isShowClean,
child: IconButton(
icon: Icon(Icons.close),
onPressed: () {
setState(() {
passwordController.text = "";
});
}),
)),
Positioned(
right: 0,
top: 10,
child: Visibility(
visible: isShowClean,
child: IconButton(
icon: isShowPassword
? Icon(Icons.visibility_off)
: Icon(Icons.visibility),
onPressed: () {
setState(() {
isShowPassword = !password.obscureText;
});
},
))),
],
); );
} }
/// 输入框 /// 输入框
Widget _getTextField(String hintText,TextEditingController controller){ Widget _getTextField(TextInputType keyboardType,String hintText, TextEditingController controller,
int maxLength, bool isPassword) {
return TextField( return TextField(
style: TextStyle(color: Color(AppColors.EditTextColor),fontSize: 16), keyboardType: keyboardType,
obscureText: isPassword,
buildCounter: (context, {currentLength, isFocused, maxLength}) => null,
maxLength: maxLength,
autofocus: false, // 自动获取焦点
decoration: InputDecoration( decoration: InputDecoration(
labelStyle: TextStyle(height: 0.5),
//装饰
alignLabelWithHint: true,
contentPadding: EdgeInsets.only(top: 20, bottom: 10),
enabledBorder: UnderlineInputBorder(
// 默认输入状态的下划线边框
borderSide:
BorderSide(color: Color(AppColors.dividerColor), width: 0.5)),
focusedBorder: UnderlineInputBorder(
// 获取焦点后
borderSide:
BorderSide(color: Color(AppColors.mainColor), width: 0.5)),
errorBorder: UnderlineInputBorder(
// 错误的时候
borderSide: BorderSide(color: Colors.red, width: 0.5)),
hintText: hintText, hintText: hintText,
hintStyle: TextStyle(color: Color(AppColors.hintText)), // labelText: hintText.substring(3)
), ),
controller: controller, controller: controller,
); );
} }
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ import 'package:netrain_flutter_app/laishanqi/mqtt/MqttClient.dart'; ...@@ -5,7 +5,7 @@ import 'package:netrain_flutter_app/laishanqi/mqtt/MqttClient.dart';
import 'package:netrain_flutter_app/laishanqi/netrain/Http/HttpUtil.dart'; import 'package:netrain_flutter_app/laishanqi/netrain/Http/HttpUtil.dart';
import 'package:netrain_flutter_app/laishanqi/netrain/user/RegisterPage.dart'; import 'package:netrain_flutter_app/laishanqi/netrain/user/RegisterPage.dart';
import '../HomePage.dart'; import '../PharmacistHomePage.dart';
import '../../../common/Images.dart'; import '../../../common/Images.dart';
/// 登录页 /// 登录页
...@@ -21,22 +21,20 @@ class _LoginState extends State<LoginPage> { ...@@ -21,22 +21,20 @@ class _LoginState extends State<LoginPage> {
final codeController = TextEditingController(); final codeController = TextEditingController();
@override @override
Widget build(BuildContext context) { void initState() {
print("loginPage.dart initState"); super.initState();
var mqtt = MqttClient(); var mqtt = MqttClient();
mqtt.connect(); mqtt.connect();
HttpUtil.get(HttpUtil.global_config).then((Response value) { HttpUtil.get(HttpUtil.global_config).then((Response value) {
Fluttertoast.showToast(msg: "global_config 请求成功 "); Fluttertoast.showToast(msg: "global_config 请求成功 ");
}); });
}
return MaterialApp( @override
title: '登陆页', Widget build(BuildContext context) {
theme: ThemeData(
primarySwatch: Colors.blue, return Scaffold(
),
home: Scaffold(
body: SingleChildScrollView( body: SingleChildScrollView(
child: Container( child: Container(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
...@@ -136,7 +134,6 @@ class _LoginState extends State<LoginPage> { ...@@ -136,7 +134,6 @@ class _LoginState extends State<LoginPage> {
), ),
), ),
), ),
),
); );
} }
......
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/xuehao/car_details.dart';
import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/xuehao/list_page.dart'; import 'package:netrain_flutter_app/xuehao/list_page.dart';
import 'package:netrain_flutter_app/zhangfeng/TestPage.dart'; import 'package:netrain_flutter_app/zhangfeng/TestPage.dart';
...@@ -11,6 +13,8 @@ import 'laishanqi/netrain/user/RegisterPage.dart'; ...@@ -11,6 +13,8 @@ import 'laishanqi/netrain/user/RegisterPage.dart';
import 'laishanqi/photo.dart'; import 'laishanqi/photo.dart';
import 'zhangfeng/UserModel.dart'; import 'zhangfeng/UserModel.dart';
import 'jishuaishuai/student.dart';
import 'zhangfeng/LoginPage.dart'; import 'zhangfeng/LoginPage.dart';
void main() { void main() {
...@@ -30,7 +34,11 @@ class MyApp extends StatelessWidget { ...@@ -30,7 +34,11 @@ class MyApp extends StatelessWidget {
title: 'Flutter Demo', title: 'Flutter Demo',
initialRoute: "main", initialRoute: "main",
theme: ThemeData( theme: ThemeData(
primarySwatch: Colors.blue, primaryColor: Color(AppColors.titleBackgroundColor),
hintColor: Color(AppColors.hintText),
accentColor: Color(AppColors.mainColor),
dividerColor: Color(AppColors.dividerColor),
scaffoldBackgroundColor: Color(AppColors.scaffoldBackgroundColor),
visualDensity: VisualDensity.adaptivePlatformDensity, visualDensity: VisualDensity.adaptivePlatformDensity,
), ),
routes: <String, WidgetBuilder>{ routes: <String, WidgetBuilder>{
...@@ -44,12 +52,15 @@ class MyApp extends StatelessWidget { ...@@ -44,12 +52,15 @@ class MyApp extends StatelessWidget {
"LoginRequestPage":(context) => LoginRequestPage(), "LoginRequestPage":(context) => LoginRequestPage(),
"TestPage": (context) => SampleAppPage(), "TestPage": (context) => SampleAppPage(),
"main": (context) => mainPage(), "main": (context) => mainPage(),
"student":(context) => jssPageDemo(),
"car_details":(context) =>CarDetailsPage()
}, },
), ),
onWillPop: () async { onWillPop: () async {
Fluttertoast.showToast(msg: "退出"); Fluttertoast.showToast(msg: "退出");
return true; return true;
}); });
} }
} }
...@@ -94,7 +105,7 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -94,7 +105,7 @@ class _RouterNavigatorState extends State<RouterNavigator> {
_item("登录网络请求", LoginRequestPage(), 'LoginRequestPage'), _item("登录网络请求", LoginRequestPage(), 'LoginRequestPage'),
_item("zhangfengTest页面",List_Page(),'TestPage'), _item("zhangfengTest页面",List_Page(),'TestPage'),
_item("listview页面",List_Page(),'listPage'), _item("listview页面",List_Page(),'listPage'),
_item("jssDemo", jssPageDemo(), 'student')
], ],
), ),
); );
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/xuehao/Car.dart';
/** /**
* @author xuehao * @author xuehao
* on 2021/7/9 * on 2021/7/9
*/ */
class CarDetailsPage extends StatefulWidget { class CarDetailsPage extends StatefulWidget {
String name, imageUrl;
CarDetailsPage({Key key, @required this.name, @required this.imageUrl})
: super(key: key);
@override @override
_CarDetailsState createState() => _CarDetailsState(name, imageUrl); _CarDetailsState createState() => _CarDetailsState();
} }
class _CarDetailsState extends State<CarDetailsPage> { class _CarDetailsState extends State<CarDetailsPage> {
String name, imageUrl; Car args;
_CarDetailsState(this.name, this.imageUrl);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
args = ModalRoute.of(context).settings.arguments;
return MaterialApp( return MaterialApp(
title: "car_details", title: "car_details",
home: Scaffold( home: Scaffold(
...@@ -37,9 +32,8 @@ class _CarDetailsState extends State<CarDetailsPage> { ...@@ -37,9 +32,8 @@ class _CarDetailsState extends State<CarDetailsPage> {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text(name), Text(args.name),
SizedBox(height: 40), Image.network(args.imageUrl),
Image.network(imageUrl),
], ],
), ),
), ),
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:netrain_flutter_app/xuehao/car_details.dart';
import 'Car.dart'; import 'Car.dart';
class List_Page extends StatefulWidget { class List_Page extends StatefulWidget {
...@@ -11,58 +9,73 @@ class List_Page extends StatefulWidget { ...@@ -11,58 +9,73 @@ class List_Page extends StatefulWidget {
EasyRefreshController _controller = EasyRefreshController(); EasyRefreshController _controller = EasyRefreshController();
class _ListPageState extends State<List_Page> { class _ListPageState extends State<List_Page> with WidgetsBindingObserver {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new MaterialApp( return new Scaffold(
title: "listPage", appBar: AppBar(
theme: ThemeData( title: Text("ListView"),
primarySwatch: Colors.blue, centerTitle: true,
//leading 返回按键
//GestureDetector 用于事件触发
leading: GestureDetector(
onTap: () {
//当前页面出栈
Navigator.pop(context);
},
//左上角返回的小箭头
child: Icon(Icons.arrow_back_ios),
), ),
home: Scaffold( ),
appBar: AppBar( body: EasyRefresh(
title: Text("ListView"), //下拉刷新头布局、可以自定义
centerTitle: true, header: TaurusHeader(),
//leading 返回按键 //上拉加载尾布局,可以自定义
//GestureDetector 用于事件触发 footer: TaurusFooter(),
leading: GestureDetector( enableControlFinishRefresh: true,
onTap: () { enableControlFinishLoad: true,
//当前页面出栈 //刷新和加载的控制器,用于控制刷新和加载
Navigator.pop(context); controller: _controller,
}, child: ListView.builder(
//左上角返回的小箭头 //返回数据条数
child: Icon(Icons.arrow_back_ios), itemCount: datas.length,
), //itemBuilder 需要返回一个Widget
), itemBuilder: (context,index){
body: EasyRefresh( return _getDatas(index);
//下拉刷新头布局、可以自定义 },
header: TaurusHeader(), ),
//上拉加载尾布局,可以自定义 //刷新动作被触发
footer: TaurusFooter(), onRefresh: () async {
enableControlFinishRefresh: true, refreshData();
enableControlFinishLoad: true, },
//刷新和加载的控制器,用于控制刷新和加载 //加载动作被触发
controller: _controller, onLoad: () async {
child: ListView.builder( loadData();
//返回数据条数 },
itemCount: datas.length, ),
//itemBuilder 需要返回一个Widget );
itemBuilder: _getDatas, }
),
//刷新动作被触发 void dispose() {
onRefresh: () async { super.dispose();
refreshData(); WidgetsBinding.instance.removeObserver(this);
}, print("dispose");
//加载动作被触发 }
onLoad: () async {
loadData(); @override
}, void initState() {
), super.initState();
)); WidgetsBinding.instance.addObserver(this);
print("initState");
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print(state);
} }
///获取item视图 ///获取item视图
Widget _getDatas(BuildContext context, int position) { Widget _getDatas(int position) {
return Container( return Container(
child: GestureDetector( child: GestureDetector(
child: Card( child: Card(
...@@ -85,15 +98,14 @@ class _ListPageState extends State<List_Page> { ...@@ -85,15 +98,14 @@ class _ListPageState extends State<List_Page> {
), ),
onTap: () { onTap: () {
var data = datas[position]; var data = datas[position];
Fluttertoast.showToast(msg: "我点击了${data.name}"); Navigator.pushNamed(context, "car_details", arguments: data);
Navigator.push(context, new MaterialPageRoute(builder: (context) => new CarDetailsPage(name: data.name,imageUrl: data.imageUrl,)));
}, },
)); ));
} }
///刷新数据 ///刷新数据
Future<void> refreshData() async { Future<void> refreshData() async {
await Future.delayed(Duration(seconds: 3), () { await Future.delayed(Duration(seconds: 2), () {
setState(() { setState(() {
for (int i = 0; i < datas.length; i++) { for (int i = 0; i < datas.length; i++) {
datas[i].name = "刷新后的数据$i"; datas[i].name = "刷新后的数据$i";
...@@ -105,7 +117,7 @@ class _ListPageState extends State<List_Page> { ...@@ -105,7 +117,7 @@ class _ListPageState extends State<List_Page> {
///加载数据 ///加载数据
Future<void> loadData() async { Future<void> loadData() async {
await Future.delayed(Duration(seconds: 3), () { await Future.delayed(Duration(seconds: 2), () {
setState(() { setState(() {
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
datas.add(Car( datas.add(Car(
......
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