登录后重新渲染个人页面bug fixed

This commit is contained in:
cxc
2022-06-28 16:21:47 +08:00
parent 2a933199ed
commit 7974cfd1ed
8 changed files with 161 additions and 82 deletions

View File

@ -22,6 +22,7 @@ class RegionSelector extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SizedBox(
width: 420,
height: 100,
child: Consumer<RegionProvider>(
builder: (context, regionProvider, child) => Column(
@ -54,12 +55,17 @@ class RegionSelector extends StatelessWidget {
// SizedBox(width: 8),
Row(
children: [
InkWell(
(regionProvider.tempProvinceName != '')
? InkWell(
child: Icon(Icons.close,
size: 20, color: Colors.grey[500]),
onTap: () {}),
size: 30,
color: Colors.grey[500]),
onTap: () {
regionProvider.clearTemp();
})
: const SizedBox(),
Icon(Icons.keyboard_arrow_down,
size: 28, color: Colors.grey[500]),
size: 30, color: Colors.grey[500]),
],
)
],

View File

@ -1,5 +1,6 @@
import 'package:fengshui_compass/bottom_navigation_widget.dart';
import 'package:fengshui_compass/states/region.dart';
import 'package:fengshui_compass/states/token.dart';
import 'package:fengshui_compass/utils/color.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
@ -10,8 +11,13 @@ void main() {
///屏幕刷新率和显示率不一致时的优化
// GestureBinding.instance.resamplingEnabled = true;
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => RegionProvider(),
),
ChangeNotifierProvider(create: (context) => TokenProvider()),
],
child: const MyApp(),
),
);

View File

@ -44,10 +44,6 @@ class _CompassState extends State<CompassPage> {
var listb = [];
var listc = [];
// 省市名称,用于获取磁偏角
String proviceName = '';
String cityName = '';
void initDevice() {}
@override
@ -275,6 +271,11 @@ class _CompassState extends State<CompassPage> {
title: Text('选择城市校准磁偏角'),
content: RegionSelector(),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text('关闭')),
TextButton(
onPressed: () {
Provider.of<RegionProvider>(context, listen: false)

View File

@ -2,17 +2,17 @@ import 'package:fengshui_compass/components/custom_textfield_widget.dart';
import 'package:fengshui_compass/models/login_bean.dart';
import 'package:fengshui_compass/net/dio_utils.dart';
import 'package:fengshui_compass/pages/register_page.dart';
import 'package:fengshui_compass/states/token.dart';
import 'package:fengshui_compass/utils/token_helper.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import '../components/controller.dart';
import '../models/user_bean.dart';
import '../utils/user_helper.dart';
class LoginPage extends StatefulWidget {
final String username;
const LoginPage({Key key, this.username}) : super(key: key);
@override
@ -20,7 +20,6 @@ class LoginPage extends StatefulWidget {
}
class _LoginPageState extends State<LoginPage> {
final FocusNode _userNameFocusNode = FocusNode();
final FocusNode _passwordFocusNode = FocusNode();
@ -39,10 +38,8 @@ class _LoginPageState extends State<LoginPage> {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
// appBar: AppBar(
// elevation: 0,
@ -109,11 +106,13 @@ class _LoginPageState extends State<LoginPage> {
submit: (value) {
if (value.length != 11) {
Fluttertoast.showToast(msg: "请输入11位手机号");
FocusScope.of(context).requestFocus(_userNameFocusNode);
FocusScope.of(context)
.requestFocus(_userNameFocusNode);
return;
}
_userNameFocusNode.unfocus();
FocusScope.of(context).requestFocus(_passwordFocusNode);
FocusScope.of(context)
.requestFocus(_passwordFocusNode);
},
focusNode: _userNameFocusNode,
prefixIconData: Icons.phone_android_outlined,
@ -126,7 +125,8 @@ class _LoginPageState extends State<LoginPage> {
submit: (value) {
if (value.length < 5) {
Fluttertoast.showToast(msg: "请输入5位以上密码");
FocusScope.of(context).requestFocus(_passwordFocusNode);
FocusScope.of(context)
.requestFocus(_passwordFocusNode);
return;
}
_userNameFocusNode.unfocus();
@ -163,12 +163,14 @@ class _LoginPageState extends State<LoginPage> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("没有账号, "),
TextButton(onPressed: (){
TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RegisterPage()));
}, child: const Text("点击注册"))
},
child: const Text("点击注册"))
],
)
],
@ -207,23 +209,20 @@ class _LoginPageState extends State<LoginPage> {
);
if (responseInfo.success) {
Map<String, dynamic> res = {
"token": responseInfo.token.toString()
};
Map<String, dynamic> res = {"token": responseInfo.token.toString()};
LoginBean loginBean = LoginBean.fromMap(res);
TokenHelper.getInstance.loginBean = loginBean;
// 将token添加到状态管理器中
Provider.of<TokenProvider>(context, listen: false).setToken(loginBean);
Fluttertoast.showToast(msg: "登录成功");
//关闭当前页面
Navigator.of(context).pop(true);
//发送消息更新我的页面显示内容
loginStreamController.add(0);
// loginStreamController.add(0);
} else {
//登录失败页面小提示
Fluttertoast.showToast(msg: responseInfo.msg);
}
}
}

View File

@ -1,9 +1,9 @@
import 'package:fengshui_compass/pages/personal_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../bottom_navigation_widget.dart';
import '../utils/navigator_utils.dart';
import '../states/token.dart';
import '../utils/token_helper.dart';
// 用户未登录页面
@ -28,7 +28,13 @@ class _PersonalLoginPageState extends State<PersonalLoginPage> {
child: Column(
children: [
Padding(padding: EdgeInsets.only(top: 80)),
SizedBox(height: 120,child: ClipRRect(borderRadius: BorderRadius.circular(60),child: Image.asset("assets/images/ic_launcher.png"),),),
SizedBox(
height: 120,
child: ClipRRect(
borderRadius: BorderRadius.circular(60),
child: Image.asset("assets/images/ic_launcher.png"),
),
),
Padding(padding: EdgeInsets.only(top: 30)),
ListTile(
title: Text("关于我们"),
@ -69,11 +75,13 @@ class _PersonalLoginPageState extends State<PersonalLoginPage> {
if (isExit) {
TokenHelper.getInstance.clear();
Navigator.of(context).push(
MaterialPageRoute(builder: (context) {
//在状态管理器中清除token
Provider.of<TokenProvider>(context, listen: false)
.clearToken();
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return BottomNavigationWidget();
})
);
}));
}
})
],

View File

@ -1,10 +1,9 @@
import 'package:fengshui_compass/components/controller.dart';
import 'package:fengshui_compass/pages/personal_login_page.dart';
import 'package:fengshui_compass/pages/personal_nologin_page.dart';
import 'package:fengshui_compass/states/token.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../utils/token_helper.dart';
import 'package:provider/provider.dart';
class PersonalPage extends StatefulWidget {
const PersonalPage({Key key}) : super(key: key);
@ -14,29 +13,48 @@ class PersonalPage extends StatefulWidget {
}
class _PersonalPageState extends State<PersonalPage> {
@override
void initState() {
super.initState();
loginStreamController.stream.listen((event) {
setState(() {});
});
}
@override
void dispose() {
loginStreamController.close();
super.dispose();
}
// @override
// void initState() {
// super.initState();
// loginStreamController.stream.listen((event) {
// setState(() {});
// });
// }
//
// @override
// void dispose() {
// loginStreamController.close();
// super.dispose();
// }
@override
Widget build(BuildContext context) {
// 判断用户是否登陆
if (TokenHelper.getInstance.isLogin) {
return Consumer<TokenProvider>(builder: (builder, tokenProvider, child) {
if (tokenProvider.isLogin) {
// 构建已登录页面
return PersonalLoginPage();
} else {
// 构建未登录页面
return PersonalNoLoginPage();
}
});
}
}
// );
//
// // 判断用户是否登陆
// if
//
// (
//
// TokenHelper.getInstance.isLogin
//
// ) {
// print(TokenHelper.getInstance.isLogin);
// // 构建已登录页面
// return PersonalLoginPage();
// } else {
// // 构建未登录页面
// return PersonalNoLoginPage();
// }
// }}

View File

@ -63,9 +63,17 @@ class RegionProvider extends ChangeNotifier {
notifyListeners();
}
// 覆盖临时的变量
resetTemp() async {
_tempProvinceName = _provinceName;
_tempCityName = _cityName;
notifyListeners();
}
// 将临时的省市名设为空
clearTemp() {
_tempProvinceName = '';
_tempCityName = '';
notifyListeners();
}
}

33
lib/states/token.dart Normal file
View File

@ -0,0 +1,33 @@
import 'package:fengshui_compass/utils/sp_utils.dart';
import 'package:flutter/material.dart';
import '../models/login_bean.dart';
class TokenProvider extends ChangeNotifier {
TokenProvider() {
loadToken();
}
LoginBean _loginBean;
bool get isLogin => _loginBean != null;
loadToken() {
Map<String, dynamic> map = SPUtil.getObject("token_bean");
if (map != null) {
//加载缓存
_loginBean = LoginBean.fromMap(map);
}
notifyListeners();
}
clearToken() {
_loginBean = null;
notifyListeners();
}
setToken(LoginBean lb) {
_loginBean = lb;
notifyListeners();
}
}