@@ -1,5 +1,6 @@ | |||||
import 'package:flutter/cupertino.dart'; | import 'package:flutter/cupertino.dart'; | ||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:provider/provider.dart'; | |||||
import 'package:zhiying_base_widget/pages/setting_page/models/setting_page_style_item_model.dart'; | import 'package:zhiying_base_widget/pages/setting_page/models/setting_page_style_item_model.dart'; | ||||
import 'package:zhiying_base_widget/pages/setting_page/models/setting_page_style_model.dart'; | import 'package:zhiying_base_widget/pages/setting_page/models/setting_page_style_model.dart'; | ||||
import 'package:zhiying_base_widget/pages/setting_page/setting_page_bloc.dart'; | import 'package:zhiying_base_widget/pages/setting_page/setting_page_bloc.dart'; | ||||
@@ -44,6 +45,7 @@ class _SettingContainerState extends State<_SettingContainer> { | |||||
void initState() { | void initState() { | ||||
_bloc = BlocProvider.of<SettingPageBloc>(context); | _bloc = BlocProvider.of<SettingPageBloc>(context); | ||||
_bloc.loadData(widget.data['skip_identifier']); | _bloc.loadData(widget.data['skip_identifier']); | ||||
super.initState(); | super.initState(); | ||||
} | } | ||||
@@ -53,15 +55,22 @@ class _SettingContainerState extends State<_SettingContainer> { | |||||
stream: _bloc.outData, | stream: _bloc.outData, | ||||
builder: (BuildContext context, AsyncSnapshot snapshot) { | builder: (BuildContext context, AsyncSnapshot snapshot) { | ||||
SettingPageStyleModel style = snapshot.data; | SettingPageStyleModel style = snapshot.data; | ||||
List<Widget> widgets = List(); | |||||
widgets.addAll(style?.settings?.map((list) { | |||||
return _createSection(list); | |||||
})?.toList() ?? | |||||
[]); | |||||
widgets.add(Provider.of<UserInfoNotifier>(context).userInfo == null | |||||
? Container() | |||||
: _createLogout()); | |||||
return Scaffold( | return Scaffold( | ||||
backgroundColor: Color(0xfff9f9f9), | backgroundColor: Color(0xfff9f9f9), | ||||
appBar: _createNav(style), | appBar: _createNav(style), | ||||
body: SingleChildScrollView( | body: SingleChildScrollView( | ||||
child: Column( | child: Column( | ||||
children: style?.settings?.map((list) { | |||||
return _createSection(list); | |||||
})?.toList() ?? | |||||
[], | |||||
children: widgets, | |||||
), | ), | ||||
)); | )); | ||||
}); | }); | ||||
@@ -151,4 +160,29 @@ class _SettingContainerState extends State<_SettingContainer> { | |||||
}, | }, | ||||
); | ); | ||||
} | } | ||||
Widget _createLogout() { | |||||
return GestureDetector( | |||||
child: Container( | |||||
color: Colors.white, | |||||
width: double.infinity, | |||||
height: 50, | |||||
margin: EdgeInsets.only(top: 10), | |||||
child: Center( | |||||
child: Text( | |||||
'退出登录', | |||||
style: TextStyle( | |||||
fontSize: 13, | |||||
color: Color(0xffff4242), | |||||
fontWeight: FontWeight.bold, | |||||
), | |||||
), | |||||
), | |||||
), | |||||
onTap: () { | |||||
Logger.debug('退出登录'); | |||||
Provider.of<UserInfoNotifier>(context, listen: false).unLogin(); | |||||
}, | |||||
); | |||||
} | |||||
} | } |
@@ -9,7 +9,7 @@ class SettingPageBloc extends BlocBase { | |||||
SettingPageStyleModel _style; | SettingPageStyleModel _style; | ||||
StreamController<SettingPageStyleModel> _styleController = | StreamController<SettingPageStyleModel> _styleController = | ||||
StreamController<SettingPageStyleModel>(); | |||||
StreamController<SettingPageStyleModel>(); | |||||
Stream<SettingPageStyleModel> get outData => _styleController.stream; | Stream<SettingPageStyleModel> get outData => _styleController.stream; | ||||
@@ -21,13 +21,18 @@ class SettingPageBloc extends BlocBase { | |||||
void loadData(String skipIdentifier) async { | void loadData(String skipIdentifier) async { | ||||
Api api = Api( | Api api = Api( | ||||
'/api/v1/mod/${skipIdentifier.toString()}', method: NetMethod.GET,); | |||||
'/api/v1/mod/${skipIdentifier.toString()}', | |||||
method: NetMethod.GET, | |||||
); | |||||
_loadData(await api.onCache()); | _loadData(await api.onCache()); | ||||
_loadData(await api.onRequest()); | |||||
_loadData(await api.onRequest()); | |||||
} | } | ||||
void _loadData(dynamic data) { | void _loadData(dynamic data) { | ||||
Map<String, dynamic> json = Map<String, dynamic>.from(data); | Map<String, dynamic> json = Map<String, dynamic>.from(data); | ||||
if (json == null || json.length == 0) { | |||||
return; | |||||
} | |||||
String d = json['data']; | String d = json['data']; | ||||
Map<String, dynamic> da = Map<String, dynamic>.from(convert.jsonDecode(d)); | Map<String, dynamic> da = Map<String, dynamic>.from(convert.jsonDecode(d)); | ||||
_style = SettingPageStyleModel.fromJson(da); | _style = SettingPageStyleModel.fromJson(da); | ||||
@@ -3,7 +3,6 @@ import 'dart:convert' as convert; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_data/mine_data_container.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_data/mine_data_container.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_data/mine_data_sk.dart'; | |||||
import 'package:zhiying_base_widget/widgets/mine/mine_data/mine_data_widget.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_data/mine_data_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_data/model/mine_data_model.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_data/model/mine_data_model.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_bloc.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_bloc.dart'; | ||||
@@ -21,24 +20,10 @@ class MineData extends StatefulWidget { | |||||
} | } | ||||
class _MineDataState extends State<MineData> { | class _MineDataState extends State<MineData> { | ||||
UserInfoModel _user; | |||||
bool _isSketelon = true; | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
if (_isSketelon) { | |||||
Provider.of<UserInfoNotifier>(context).getUserInfoModel().then((user) { | |||||
setState(() { | |||||
_user = user; | |||||
_isSketelon = false; | |||||
}); | |||||
}); | |||||
} | |||||
if (_isSketelon) { | |||||
return MineDataSkeleton(); | |||||
} | |||||
if (_user == null) { | |||||
UserInfoModel user = Provider.of<UserInfoNotifier>(context).userInfo; | |||||
if (user == null) { | |||||
String value = '123'; | String value = '123'; | ||||
int result = int.tryParse(value); | int result = int.tryParse(value); | ||||
@@ -52,13 +37,13 @@ class _MineDataState extends State<MineData> { | |||||
return MineProfileDataModel(name: item.name, value: '¥0'); | return MineProfileDataModel(name: item.name, value: '¥0'); | ||||
}).toList(); | }).toList(); | ||||
MineProfileModel profile = MineProfileModel( | MineProfileModel profile = MineProfileModel( | ||||
username:'', | |||||
avatar:'', | |||||
inviteCode:'', | |||||
userLvName:'', | |||||
userLvIcon:'', | |||||
total:'', | |||||
gridViews:list, | |||||
username: '', | |||||
avatar: '', | |||||
inviteCode: '', | |||||
userLvName: '', | |||||
userLvIcon: '', | |||||
total: '', | |||||
gridViews: list, | |||||
); | ); | ||||
return MineDataWidget(profile, widget.data); | return MineDataWidget(profile, widget.data); | ||||
} | } | ||||
@@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; | |||||
import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_bloc.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_bloc.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_container.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_container.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_sk.dart'; | |||||
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_static_container.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header_static_container.dart'; | ||||
import 'package:zhiying_comm/util/base_bloc.dart'; | import 'package:zhiying_comm/util/base_bloc.dart'; | ||||
import 'package:zhiying_comm/zhiying_comm.dart'; | import 'package:zhiying_comm/zhiying_comm.dart'; | ||||
@@ -18,24 +17,14 @@ class MineHeader extends StatefulWidget { | |||||
} | } | ||||
class _MineHeaderState extends State<MineHeader> { | class _MineHeaderState extends State<MineHeader> { | ||||
UserInfoModel _user; | |||||
bool _isSketelon = true; | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
if (_isSketelon) { | |||||
Provider.of<UserInfoNotifier>(context).getUserInfoModel().then((user) { | |||||
setState(() { | |||||
_user = user; | |||||
_isSketelon = false; | |||||
}); | |||||
}); | |||||
} | |||||
// if (_isSketelon) { | |||||
// return MineHeaderSkeleton(); | |||||
// } | |||||
if (_isSketelon) { | |||||
return MineHeaderSkeleton(); | |||||
} | |||||
if (_user == null) { | |||||
UserInfoModel user = Provider.of<UserInfoNotifier>(context).userInfo; | |||||
if (user == null) { | |||||
// 未登录 | // 未登录 | ||||
return MineStaticContainer(widget.data); | return MineStaticContainer(widget.data); | ||||
} | } | ||||
@@ -1,10 +1,10 @@ | |||||
import 'dart:convert' as convert; | |||||
import 'package:cached_network_image/cached_network_image.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:zhiying_base_widget/widgets/mine/mine_header/model/mine_header_model.dart'; | import 'package:zhiying_base_widget/widgets/mine/mine_header/model/mine_header_model.dart'; | ||||
import 'package:zhiying_comm/zhiying_comm.dart'; | import 'package:zhiying_comm/zhiying_comm.dart'; | ||||
import 'package:cached_network_image/cached_network_image.dart'; | |||||
import 'dart:convert' as convert; | |||||
// 未登录状态个人中心头部 | // 未登录状态个人中心头部 | ||||
class MineStaticContainer extends StatefulWidget { | class MineStaticContainer extends StatefulWidget { | ||||
final Map<String, dynamic> data; | final Map<String, dynamic> data; | ||||
@@ -39,37 +39,38 @@ class _MineStaticContainerState extends State<MineStaticContainer> { | |||||
fit: BoxFit.cover)), | fit: BoxFit.cover)), | ||||
), | ), | ||||
onTap: () { | onTap: () { | ||||
// RouterUtil.route(SkipModel.fromJson(widget.json), widget.json, context); | |||||
RouterUtil.route( | |||||
SkipModel.fromJson(widget.json), widget.json, context); | |||||
}, | }, | ||||
), | ), | ||||
Expanded( | Expanded( | ||||
child: Column( | child: Column( | ||||
mainAxisAlignment: MainAxisAlignment.start, | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: <Widget>[ | |||||
Container( | |||||
width: 120, | |||||
height: 20, | |||||
child: Text( | |||||
widget.staticModel.loginName, | |||||
style: TextStyle( | |||||
color: HexColor.fromHex( | |||||
widget.staticModel.loginColor), | |||||
fontSize: 17), | |||||
), | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(top: 8), | |||||
width: 80, | |||||
child: Text( | |||||
widget.staticModel.loginNameHelpText, | |||||
style: TextStyle( | |||||
color: HexColor.fromHex( | |||||
widget.staticModel.loginColor), | |||||
fontSize: 13), | |||||
)), | |||||
], | |||||
)) | |||||
mainAxisAlignment: MainAxisAlignment.start, | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: <Widget>[ | |||||
Container( | |||||
width: 120, | |||||
height: 20, | |||||
child: Text( | |||||
widget.staticModel.loginName, | |||||
style: TextStyle( | |||||
color: HexColor.fromHex( | |||||
widget.staticModel?.loginColor ?? '#ffffff'), | |||||
fontSize: 17), | |||||
), | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(top: 8), | |||||
width: 80, | |||||
child: Text( | |||||
widget.staticModel.loginNameHelpText, | |||||
style: TextStyle( | |||||
color: HexColor.fromHex( | |||||
widget.staticModel?.loginColor ?? '#ffffff'), | |||||
fontSize: 13), | |||||
)), | |||||
], | |||||
)) | |||||
], | ], | ||||
), | ), | ||||
); | ); | ||||