| @@ -1,5 +1,6 @@ | |||
| import 'package:flutter/cupertino.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_model.dart'; | |||
| import 'package:zhiying_base_widget/pages/setting_page/setting_page_bloc.dart'; | |||
| @@ -44,6 +45,7 @@ class _SettingContainerState extends State<_SettingContainer> { | |||
| void initState() { | |||
| _bloc = BlocProvider.of<SettingPageBloc>(context); | |||
| _bloc.loadData(widget.data['skip_identifier']); | |||
| super.initState(); | |||
| } | |||
| @@ -53,15 +55,22 @@ class _SettingContainerState extends State<_SettingContainer> { | |||
| stream: _bloc.outData, | |||
| builder: (BuildContext context, AsyncSnapshot snapshot) { | |||
| 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( | |||
| backgroundColor: Color(0xfff9f9f9), | |||
| appBar: _createNav(style), | |||
| body: SingleChildScrollView( | |||
| 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; | |||
| StreamController<SettingPageStyleModel> _styleController = | |||
| StreamController<SettingPageStyleModel>(); | |||
| StreamController<SettingPageStyleModel>(); | |||
| Stream<SettingPageStyleModel> get outData => _styleController.stream; | |||
| @@ -21,13 +21,18 @@ class SettingPageBloc extends BlocBase { | |||
| void loadData(String skipIdentifier) async { | |||
| 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.onRequest()); | |||
| _loadData(await api.onRequest()); | |||
| } | |||
| void _loadData(dynamic data) { | |||
| Map<String, dynamic> json = Map<String, dynamic>.from(data); | |||
| if (json == null || json.length == 0) { | |||
| return; | |||
| } | |||
| String d = json['data']; | |||
| Map<String, dynamic> da = Map<String, dynamic>.from(convert.jsonDecode(d)); | |||
| _style = SettingPageStyleModel.fromJson(da); | |||
| @@ -3,7 +3,6 @@ import 'dart:convert' as convert; | |||
| import 'package:flutter/material.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_sk.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_header/mine_header_bloc.dart'; | |||
| @@ -21,24 +20,10 @@ class MineData extends StatefulWidget { | |||
| } | |||
| class _MineDataState extends State<MineData> { | |||
| UserInfoModel _user; | |||
| bool _isSketelon = true; | |||
| @override | |||
| 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'; | |||
| int result = int.tryParse(value); | |||
| @@ -52,13 +37,13 @@ class _MineDataState extends State<MineData> { | |||
| return MineProfileDataModel(name: item.name, value: '¥0'); | |||
| }).toList(); | |||
| MineProfileModel profile = MineProfileModel( | |||
| username:'', | |||
| avatar:'', | |||
| inviteCode:'', | |||
| userLvName:'', | |||
| userLvIcon:'', | |||
| total:'', | |||
| gridViews:list, | |||
| username: '', | |||
| avatar: '', | |||
| inviteCode: '', | |||
| userLvName: '', | |||
| userLvIcon: '', | |||
| total: '', | |||
| gridViews: list, | |||
| ); | |||
| return MineDataWidget(profile, widget.data); | |||
| } | |||
| @@ -3,7 +3,6 @@ import 'package:flutter/material.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_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_comm/util/base_bloc.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| @@ -18,24 +17,14 @@ class MineHeader extends StatefulWidget { | |||
| } | |||
| class _MineHeaderState extends State<MineHeader> { | |||
| UserInfoModel _user; | |||
| bool _isSketelon = true; | |||
| @override | |||
| 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); | |||
| } | |||
| @@ -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:zhiying_base_widget/widgets/mine/mine_header/model/mine_header_model.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 { | |||
| final Map<String, dynamic> data; | |||
| @@ -39,37 +39,38 @@ class _MineStaticContainerState extends State<MineStaticContainer> { | |||
| fit: BoxFit.cover)), | |||
| ), | |||
| onTap: () { | |||
| // RouterUtil.route(SkipModel.fromJson(widget.json), widget.json, context); | |||
| RouterUtil.route( | |||
| SkipModel.fromJson(widget.json), widget.json, context); | |||
| }, | |||
| ), | |||
| Expanded( | |||
| 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), | |||
| )), | |||
| ], | |||
| )) | |||
| ], | |||
| ), | |||
| ); | |||