Commit ed94d18a authored by jishuaishuai's avatar jishuaishuai

解决冲突

parents fd93b7de 838d0fe1
/// 项目颜色配置
class AppColors{
/// 主色
static const mainColor = 0xff2893FF;
/// hint颜色
static const hintText = 0xffb4b4b4;
/// 输入框字体颜色
static const EditTextColor = 0xff333333;
}
\ No newline at end of file
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/laishanqi/netrain/Images.dart'; import 'package:netrain_flutter_app/common/Images.dart';
import 'secondpage.dart'; import 'secondpage.dart';
......
...@@ -42,9 +42,11 @@ class _LayoutGroupState extends State<LayoutPage> { ...@@ -42,9 +42,11 @@ class _LayoutGroupState extends State<LayoutPage> {
blurRadius: 15, blurRadius: 15,
spreadRadius: -5) spreadRadius: -5)
]), ]),
child: RaisedButton( child: ElevatedButton(
child: Text("按钮"), child: Text("按钮"),
onPressed: () {}, onPressed: () {
Navigator.pushNamed(context, "register");
},
)), )),
Container( Container(
margin: EdgeInsets.all(10), margin: EdgeInsets.all(10),
......
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'Images.dart'; import '../../common/Images.dart';
class HomePage extends StatefulWidget { class HomePage extends StatefulWidget {
@override @override
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:netrain_flutter_app/common/AppColors.dart';
import 'package:netrain_flutter_app/douwen/dwMain.dart';
/** /**
* 注册页 * 注册页
*/ */
class RegisterPage extends StatefulWidget{ class RegisterPage extends StatefulWidget {
@override @override
State createState() => _RegisterState(); State createState() => _RegisterState();
} }
class _RegisterState extends State{ class _RegisterState extends State {
// 输入框控制器
final nameController = TextEditingController();
final phoneController = TextEditingController();
final codeController = TextEditingController();
final passwordController = TextEditingController();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// 获取上一个页面的传值
List<String> args = ModalRoute.of(context).settings.arguments;
phoneController.text = args.first;
return registerWidget(); return registerWidget();
} }
Widget registerWidget() { @override
void dispose() {
super.dispose();
nameController.dispose();
phoneController.dispose();
codeController.dispose();
passwordController.dispose();
}
Widget registerWidget() {
return MaterialApp( return MaterialApp(
theme: ThemeData( theme: ThemeData(
primaryColor: Colors.white, primaryColor: Colors.white,
), ),
home: Scaffold( home: Scaffold(
appBar: AppBar( appBar: AppBar(
leading: IconButton( leading: IconButton(
icon: Icon(Icons.arrow_back), icon: Icon(Icons.arrow_back),
onPressed: (){ onPressed: () {
Navigator.of(context).pushNamed("/"); Navigator.of(context).popUntil(ModalRoute.withName("main"));
}, // Navigator.of(context).pushNamed("login2");
},
),
centerTitle: true,
title: Text("注册"),
elevation: 0,
), ),
centerTitle: true, body: Container(
title: Text("注册"), margin: EdgeInsets.fromLTRB(16, 16, 16, 0),
elevation: 0, child: ListView(
), children: [
body: ListView( _getTextField("请输入姓名",nameController),
children: [ _getTextField("请输入手机号码",phoneController),
Stack(children: [
], _getTextField("请输入验证码",codeController),
), // Positioned(child: )
),
);
],),
_getTextField("请输入9-16位密码",passwordController),
],
),
)),
);
} }
/// 输入框
Widget _getTextField(String hintText,TextEditingController controller){
return TextField(
style: TextStyle(color: Color(AppColors.EditTextColor),fontSize: 16),
decoration: InputDecoration(
hintText: hintText,
hintStyle: TextStyle(color: Color(AppColors.hintText)),
),
controller: controller,
);
}
} }
\ No newline at end of file
...@@ -6,7 +6,7 @@ import 'package:netrain_flutter_app/laishanqi/netrain/Http/HttpUtil.dart'; ...@@ -6,7 +6,7 @@ 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 '../HomePage.dart';
import '../Images.dart'; import '../../../common/Images.dart';
/// 登录页 /// 登录页
class LoginPage extends StatefulWidget { class LoginPage extends StatefulWidget {
...@@ -22,10 +22,11 @@ class _LoginState extends State<LoginPage> { ...@@ -22,10 +22,11 @@ class _LoginState extends State<LoginPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
print("loginPage.dart 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 请求成功 ");
}); });
...@@ -107,7 +108,9 @@ class _LoginState extends State<LoginPage> { ...@@ -107,7 +108,9 @@ class _LoginState extends State<LoginPage> {
children: [ children: [
MaterialButton( MaterialButton(
onPressed: () { onPressed: () {
Navigator.pushNamed(context, "register"); // 跳转到注册页,把手机号传递过去
Navigator.pushNamed(context, "register",
arguments: [phoneController.text]);
// Navigator.push(context,MaterialPageRoute(builder: (context) => RegisterPage())); // Navigator.push(context,MaterialPageRoute(builder: (context) => RegisterPage()));
}, },
child: Text( child: Text(
...@@ -116,7 +119,16 @@ class _LoginState extends State<LoginPage> { ...@@ -116,7 +119,16 @@ class _LoginState extends State<LoginPage> {
), ),
), ),
Text(" | ", style: TextStyle(color: Colors.blue)), Text(" | ", style: TextStyle(color: Colors.blue)),
Text("忘记密码", style: TextStyle(color: Colors.blue)) MaterialButton(
onPressed: () {
Navigator.pushNamed(context, "layout");
// Navigator.push(context,MaterialPageRoute(builder: (context) => RegisterPage()));
},
child: Text(
"忘记密码",
style: TextStyle(color: Colors.blue),
),
),
], ],
), ),
), ),
......
...@@ -8,6 +8,7 @@ import 'laishanqi/layout_page.dart'; ...@@ -8,6 +8,7 @@ import 'laishanqi/layout_page.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';
import 'zhangfeng/UserModel.dart';
import 'jishuaishuai/student.dart'; import 'jishuaishuai/student.dart';
...@@ -17,6 +18,7 @@ void main() { ...@@ -17,6 +18,7 @@ void main() {
runApp(MyApp()); runApp(MyApp());
// runApp(Login()); // runApp(Login());
// runApp(TestPage()); // runApp(TestPage());
UserModel.getModel();
print("启动"); print("启动");
} }
...@@ -24,35 +26,43 @@ class MyApp extends StatelessWidget { ...@@ -24,35 +26,43 @@ 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) {
return WillPopScope(child: MaterialApp( return WillPopScope(
title: 'Flutter Demo', child: MaterialApp(
initialRoute: "/", title: 'Flutter Demo',
theme: ThemeData( initialRoute: "main",
primarySwatch: Colors.blue, theme: ThemeData(
visualDensity: VisualDensity.adaptivePlatformDensity, primarySwatch: Colors.blue,
), visualDensity: VisualDensity.adaptivePlatformDensity,
home: Scaffold(
appBar: AppBar(
title: Text("路由"),
), ),
body: RouterNavigator(title: 'Flutter Demo Home Page'), routes: <String, WidgetBuilder>{
"less": (context) => LessGroupPage(),
"ful": (context) => FulGroupPage(),
"layout": (context) => LayoutPage(),
"photo": (context) => PhotoApp(),
"register": (context) => RegisterPage(),
"login": (context) => LoginPage(),
"listPage":(context) => List_Page(),
"LoginRequestPage":(context) => LoginRequestPage(),
"main": (context) => mainPage(),
"student":(context) => jssPageDemo()
},
), ),
routes: <String, WidgetBuilder>{ onWillPop: () async {
"less": (context) => LessGroupPage(), Fluttertoast.showToast(msg: "退出");
"ful": (context) => FulGroupPage(), return true;
"layout": (context) => LayoutPage(), });
"photo": (context) => PhotoApp(),
"register": (context) => RegisterPage(),
"listPage":(context) => List_Page(),
"student":(context) => jssPageDemo()
},
), onWillPop: ()async{
Fluttertoast.showToast(msg: "退出");
return true;
});
} }
}
Widget mainPage(){
return Scaffold(
appBar: AppBar(
title: Text("路由"),
),
body: RouterNavigator(title: 'Flutter Demo Home Page'),
);
} }
class RouterNavigator extends StatefulWidget { class RouterNavigator extends StatefulWidget {
...@@ -64,7 +74,7 @@ class RouterNavigator extends StatefulWidget { ...@@ -64,7 +74,7 @@ class RouterNavigator extends StatefulWidget {
} }
class _RouterNavigatorState extends State<RouterNavigator> { class _RouterNavigatorState extends State<RouterNavigator> {
bool byName = false; bool byName = true;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -84,7 +94,7 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -84,7 +94,7 @@ class _RouterNavigatorState extends State<RouterNavigator> {
_item("layout页面", LayoutPage(), 'layout'), _item("layout页面", LayoutPage(), 'layout'),
_item("拍照页面", PhotoApp(), 'photo'), _item("拍照页面", PhotoApp(), 'photo'),
_item("登陆", LoginPage(), 'login'), _item("登陆", LoginPage(), 'login'),
_item("登录网络请求", LoginRequestPage(), 'loginRequest'), _item("登录网络请求", LoginRequestPage(), 'LoginRequestPage'),
_item("listview页面",List_Page(),'listPage'), _item("listview页面",List_Page(),'listPage'),
_item("jssDemo", jssPageDemo(), 'student') _item("jssDemo", jssPageDemo(), 'student')
], ],
...@@ -94,13 +104,12 @@ class _RouterNavigatorState extends State<RouterNavigator> { ...@@ -94,13 +104,12 @@ class _RouterNavigatorState extends State<RouterNavigator> {
_item(String title, page, String routeName) { _item(String title, page, String routeName) {
return Container( return Container(
child: RaisedButton( child: ElevatedButton(
onPressed: () { onPressed: () {
if (byName) { if (byName) {
Navigator.pushNamed(context, routeName); Navigator.pushNamed(context, routeName);
} else { } else {
Navigator.push( Navigator.push(context,MaterialPageRoute(builder: (context) => page,));
context, MaterialPageRoute(builder: (context) => page));
} }
}, },
child: Text(title), child: Text(title),
......
import 'package:flutter/material.dart';
/**
* @author xuehao
* on 2021/7/9
*/
class CarDetailsPage extends StatefulWidget {
String name, imageUrl;
CarDetailsPage({Key key, @required this.name, @required this.imageUrl})
: super(key: key);
@override
_CarDetailsState createState() => _CarDetailsState(name, imageUrl);
}
class _CarDetailsState extends State<CarDetailsPage> {
String name, imageUrl;
_CarDetailsState(this.name, this.imageUrl);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "car_details",
home: Scaffold(
appBar: AppBar(
title: Text("汽车详情"),
centerTitle: true,
leading: new IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(Icons.arrow_back_ios)),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(name),
SizedBox(height: 40),
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: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 {
...@@ -85,6 +86,7 @@ class _ListPageState extends State<List_Page> { ...@@ -85,6 +86,7 @@ class _ListPageState extends State<List_Page> {
onTap: () { onTap: () {
var data = datas[position]; var data = datas[position];
Fluttertoast.showToast(msg: "我点击了${data.name}"); Fluttertoast.showToast(msg: "我点击了${data.name}");
Navigator.push(context, new MaterialPageRoute(builder: (context) => new CarDetailsPage(name: data.name,imageUrl: data.imageUrl,)));
}, },
)); ));
} }
......
import 'Network/HttpManager.dart'; import 'Network/HttpManager.dart';
import 'Network/BaseHttpModel.dart'; import 'Network/BaseHttpModel.dart';
import 'Network/UrlPath.dart'; import 'UserModel.dart';
/// 所有接口类 /// 所有接口类
class LoginApi { class LoginApi {
///示例请求 ///示例请求
static loginRequest(Map<String, dynamic> param) { static loginRequest(Map<String, dynamic> param, OnResult onResult) {
return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){ return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){
BaseHttpModel httpModel = data; BaseHttpModel httpModel = data;
print(httpModel.data); UserModel userModel = UserModel.fromJson(httpModel.data);
UserModel.saveModel(userModel);
if(onResult != null){
onResult(data, errorMsg);
}
}); });
} }
} }
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/zhangfeng/UserModel.dart';
import 'LoginApi.dart'; import 'LoginApi.dart';
class LoginRequestPage extends StatefulWidget { class LoginRequestPage extends StatefulWidget {
final String title = "登录页"; final String title = "登录页";
@override @override
_LoginState createState() => _LoginState(); _LoginState createState() => _LoginState();
} }
...@@ -12,6 +13,10 @@ class LoginRequestPage extends StatefulWidget { ...@@ -12,6 +13,10 @@ class LoginRequestPage extends StatefulWidget {
class _LoginState extends State<LoginRequestPage> { class _LoginState extends State<LoginRequestPage> {
// This widget is the root of your application. // This widget is the root of your application.
void _loginAction() { void _loginAction() {
if(UserModel.getModel() != null){
Fluttertoast.showToast(msg:'已经登录');
return;
}
Map<String,String> map = new Map<String,String>(); Map<String,String> map = new Map<String,String>();
map['workNumber'] = 'NTR000007'; map['workNumber'] = 'NTR000007';
map['password'] = '123456'; map['password'] = '123456';
...@@ -20,7 +25,17 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -20,7 +25,17 @@ class _LoginState extends State<LoginRequestPage> {
map['client_id'] = 'app'; map['client_id'] = 'app';
map['client_secret'] = '123456'; map['client_secret'] = '123456';
map['platform'] = '0'; map['platform'] = '0';
LoginApi.loginRequest(map); LoginApi.loginRequest(map, (httpModel, error){
if(error != null){
Fluttertoast.showToast(msg: error);
}else{
Fluttertoast.showToast(msg:'登录成功');
}
});
}
void _logoutAction() {
UserModel.removeModel();
Fluttertoast.showToast(msg:'退出成功');
} }
@override @override
...@@ -37,6 +52,10 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -37,6 +52,10 @@ class _LoginState extends State<LoginRequestPage> {
onPressed: _loginAction, onPressed: _loginAction,
child:Icon(Icons.add), child:Icon(Icons.add),
), ),
FloatingActionButton(
onPressed: _logoutAction,
child:Icon(Icons.add),
),
], ],
), ),
), // This trailing comma makes auto-formatting nicer for build methods. ), // This trailing comma makes auto-formatting nicer for build methods.
......
import 'package:json_annotation/json_annotation.dart';
part 'NestModel.g.dart';
@JsonSerializable()
class NestModel{
final name;
final email;
final List<NestModel> childrens;
final NestModel nest;
NestModel(this.name, this.email, this.childrens,this.nest);
factory NestModel.fromJson(Map<String, dynamic> json) => _$NestModelFromJson(json);
Map<String, dynamic> toJson() => _$NestModelToJson(this);
}
\ No newline at end of file
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'NestModel.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
NestModel _$NestModelFromJson(Map<String, dynamic> json) {
return NestModel(
json['name'],
json['email'],
(json['childrens'] as List)
?.map((e) =>
e == null ? null : NestModel.fromJson(e as Map<String, dynamic>))
?.toList(),
json['nest'] == null
? null
: NestModel.fromJson(json['nest'] as Map<String, dynamic>),
);
}
Map<String, dynamic> _$NestModelToJson(NestModel instance) => <String, dynamic>{
'name': instance.name,
'email': instance.email,
'childrens': instance.childrens,
'nest': instance.nest,
};
...@@ -6,6 +6,7 @@ part 'BaseHttpModel.g.dart'; ...@@ -6,6 +6,7 @@ part 'BaseHttpModel.g.dart';
class BaseHttpModel{ class BaseHttpModel{
final data; final data;
final code; final code;
@JsonKey(name:'message')
final msg; final msg;
BaseHttpModel(this.data, this.code, this.msg); BaseHttpModel(this.data, this.code, this.msg);
...@@ -14,7 +15,7 @@ class BaseHttpModel{ ...@@ -14,7 +15,7 @@ class BaseHttpModel{
Map<String, dynamic> toJson() => _$BaseHttpModelToJson(this); Map<String, dynamic> toJson() => _$BaseHttpModelToJson(this);
bool isSuccess(){ bool isSuccess(){
return this.code == 200; return this.code == 0;
} }
String errorMsg() { String errorMsg() {
......
...@@ -3,6 +3,8 @@ import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart'; ...@@ -3,6 +3,8 @@ import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart';
import 'BaseHttpModel.dart'; import 'BaseHttpModel.dart';
import 'UrlPath.dart'; import 'UrlPath.dart';
typedef OnResult = void Function(BaseHttpModel t, String errorMsg) ;
class HttpManager { class HttpManager {
static HttpManager _instance = HttpManager._internal(); static HttpManager _instance = HttpManager._internal();
Dio _dio; Dio _dio;
...@@ -46,7 +48,7 @@ class HttpManager { ...@@ -46,7 +48,7 @@ class HttpManager {
request(String url, request(String url,
{parameters, {parameters,
method = 'GET', method = 'GET',
Function(BaseHttpModel t, String errorMsg) onResult}) async { OnResult onResult}) async {
parameters = parameters ?? {}; parameters = parameters ?? {};
if(onResult==null){ if(onResult==null){
return; return;
...@@ -55,7 +57,7 @@ class HttpManager { ...@@ -55,7 +57,7 @@ class HttpManager {
Response response = await _dio.request(url, Response response = await _dio.request(url,
queryParameters: parameters, options: new Options(method: method)); queryParameters: parameters, options: new Options(method: method));
BaseHttpModel httpModel = BaseHttpModel.fromJson(response.data); BaseHttpModel httpModel = BaseHttpModel.fromJson(response.data);
if (httpModel.isSuccess() == true) { if (httpModel.isSuccess()) {
onResult(httpModel, null); onResult(httpModel, null);
}else{ }else{
onResult(httpModel, httpModel.errorMsg()); onResult(httpModel, httpModel.errorMsg());
......
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class SaveModel {
// factory UserData() => getInstance();
// static UserData get instance => getInstance();
// static UserData _instance;
//
// static UserData getInstance() {
// if (_instance == null) {
// _instance = new UserData._internal();
// }
// return _instance;
// }
//
// UserData._internal() {
//
// }
static saveModel(dynamic model,String modelName) async {
SharedPreferences pref= await SharedPreferences.getInstance();
//将data转换成json字符串
var jsonStr = json.encode(model);
pref.setString(modelName,jsonStr);
}
// 读取 SharedPreferences
static Future<Map> getModel(String modelName) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final jsonStr = prefs.getString(modelName);
if(jsonStr != null && jsonStr.length > 0){
//先将json字符串转json
Map json = jsonDecode(jsonStr);
return json;
}
return null;
}
static removeModel(String modelName) async{
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(modelName,"");
}
}
\ No newline at end of file
import 'package:json_annotation/json_annotation.dart';
import 'package:netrain_flutter_app/zhangfeng/Network/SaveModel.dart';
part 'UserModel.g.dart';
@JsonSerializable()
class UserModel{
static UserModel sharedModelInstance_;
final token;
final header;
final tokenHead;
UserModel(this.token, this.header, this.tokenHead);
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
Map<String, dynamic> toJson() => _$UserModelToJson(this);
static UserModel getModel(){
if(sharedModelInstance_ == null){
SaveModel.getModel('UserModel').then((json) => {
if(json != null){
sharedModelInstance_ = new UserModel.fromJson(json)
}
});
}
return sharedModelInstance_;
}
static removeModel() {
SaveModel.removeModel('UserModel');
sharedModelInstance_ = null;
}
static saveModel(UserModel userModel){
sharedModelInstance_ = userModel;
SaveModel.saveModel(userModel,'UserModel');
}
}
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'UserModel.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
UserModel _$UserModelFromJson(Map<String, dynamic> json) {
return UserModel(
json['token'],
json['header'],
json['tokenHead'],
);
}
Map<String, dynamic> _$UserModelToJson(UserModel instance) => <String, dynamic>{
'token': instance.token,
'header': instance.header,
'tokenHead': instance.tokenHead,
};
...@@ -42,7 +42,7 @@ dependencies: ...@@ -42,7 +42,7 @@ dependencies:
dio: ^4.0.0 #网络库 dio: ^4.0.0 #网络库
convert: ^3.0.1 #转码器 convert: ^3.0.1 #转码器
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
shared_preferences: ^2.0.6
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