diff --git a/lib/register.dart b/lib/register.dart index a901c01..1bee69e 100644 --- a/lib/register.dart +++ b/lib/register.dart @@ -70,10 +70,10 @@ class BaseWidgetRegister { 'profile_header', DefaultWidgetCreater((model) => MineHeader(model))); WidgetFactory.regist( 'profile_earning', DefaultWidgetCreater((model) => MineData(model))); - WidgetFactory.regist( - 'profile_functions', DefaultWidgetCreater((model) => MineQuickEntry())); + WidgetFactory.regist('profile_functions', + DefaultWidgetCreater((model) => MineQuickEntry(model))); WidgetFactory.regist('profile_my_functions', - DefaultWidgetCreater((model) => MineQuickEntry())); + DefaultWidgetCreater((model) => MineQuickEntry(model))); WidgetFactory.regist('profile_carousel', DefaultWidgetCreater((model) => HomeBannerWidget(model))); diff --git a/lib/widgets/mine/mine_quick_entry/bloc/mine_quick_entry_bloc.dart b/lib/widgets/mine/mine_quick_entry/bloc/mine_quick_entry_bloc.dart deleted file mode 100644 index 1f33e03..0000000 --- a/lib/widgets/mine/mine_quick_entry/bloc/mine_quick_entry_bloc.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'dart:async'; - -import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/models/mine_quick_entry_model.dart'; -import 'package:zhiying_comm/util/base_bloc.dart'; -import 'package:zhiying_comm/zhiying_comm.dart'; - -class MineQuickEntryBloc extends BlocBase { - List _icons = List(); - - StreamController> _iconsController = - StreamController>(); - - Stream> get outData => _iconsController.stream; - - @override - void dispose() { - _iconsController.close(); - _iconsController = null; - } - - void loadData(int id) { - NetUtil.request('/api/v1/mod', - method: NetMethod.POST, - params: Map.from({ - 'ids': [id] - }), - onCache: (data) {}, onSuccess: (data) { - String key = id.toString(); - - Map json = Map.from(data); - if (json.containsKey(key)) { - List list = json[key]; - _icons = list.map((item) { - return MineQuickEntryModel.fromJson(Map.from(item)); - }).toList(); - } - - _iconsController.add(_icons); - }); - } -} diff --git a/lib/widgets/mine/mine_quick_entry/mine_quick_entry.dart b/lib/widgets/mine/mine_quick_entry/mine_quick_entry.dart index 1901d55..ea6f0fe 100644 --- a/lib/widgets/mine/mine_quick_entry/mine_quick_entry.dart +++ b/lib/widgets/mine/mine_quick_entry/mine_quick_entry.dart @@ -1,51 +1,96 @@ -import 'package:flutter/material.dart'; -import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/bloc/mine_quick_entry_bloc.dart'; -import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/mine_quick_entry_sk.dart'; -import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/models/mine_quick_entry_model.dart'; -import 'package:zhiying_comm/util/base_bloc.dart'; - -class MineQuickEntry extends StatefulWidget { - @override - _MineQuickEntryState createState() => _MineQuickEntryState(); -} - -class _MineQuickEntryState extends State { - @override - Widget build(BuildContext context) { - return BlocProvider( - bloc: MineQuickEntryBloc(), - child: _MineQuickEntryContainer(), - ); - } -} +import 'dart:convert' as convert; -class _MineQuickEntryContainer extends StatefulWidget { - @override - _MineQuickEntryContainerState createState() => - _MineQuickEntryContainerState(); -} - -class _MineQuickEntryContainerState extends State<_MineQuickEntryContainer> { - MineQuickEntryBloc _bloc; +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/model/mine_quick_model.dart'; +import 'package:zhiying_comm/zhiying_comm.dart'; - @override - void initState() { - _bloc = BlocProvider.of(context); - _bloc.loadData(4); +class MineQuickEntry extends StatelessWidget { + final Map data; + Map json; + MineQuickModel model; - super.initState(); + MineQuickEntry(this.data, {Key key}) : super(key: key) { + String d = data['data']; + json = convert.jsonDecode(d); + model = MineQuickModel.fromJson(Map.from(json)); } @override Widget build(BuildContext context) { - return StreamBuilder>( - stream: _bloc.outData, - builder: (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.data == null) { - return MineQuickEntrySkeleton(); - } + int column = int.tryParse(model.layout) ?? 4; - return MineQuickEntrySkeleton(); - }); + return (model?.items?.length ?? 0) <= 0 + ? Container() + : Container( + margin: EdgeInsets.only( + left: 12.5, + right: 12.5, + top: 6, + bottom: 6, + ), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(7.5), + color: HexColor.fromHex(model.myFunctionsBgColor)), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (model?.title ?? '') == '' + ? Container() + : Container( + margin: + EdgeInsets.only(left: 12.5, right: 12.5, top: 12.5), + child: Text( + model.title, + style: TextStyle( + fontSize: 15, fontWeight: FontWeight.w500), + ), + ), + GridView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: column, + crossAxisSpacing: 1, + mainAxisSpacing: 1, + childAspectRatio: 1, + ), + itemCount: model?.items?.length ?? 0, + itemBuilder: (BuildContext context, int index) { + return GestureDetector( + child: Container( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 36, + height: 36, + margin: EdgeInsets.only(bottom: 4), + child: CachedNetworkImage( + imageUrl: model.items[index].icon, + fit: BoxFit.cover, + ), + ), + Text( + model.items[index].name, + style: TextStyle( + color: HexColor.fromHex('#333333'), + fontSize: 11), + ) + ], + ), + ), + ), + onTap: () { + RouterUtil.route(model.items[index].toJson(), context); + }, + ); + }, + ), + ], + ), + ); } } diff --git a/lib/widgets/mine/mine_quick_entry/model/mine_quick_model.dart b/lib/widgets/mine/mine_quick_entry/model/mine_quick_model.dart new file mode 100644 index 0000000..9073953 --- /dev/null +++ b/lib/widgets/mine/mine_quick_entry/model/mine_quick_model.dart @@ -0,0 +1,68 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'mine_quick_model.g.dart'; + +@JsonSerializable() +class MineQuickModel extends Object { + @JsonKey(name: 'my_functions_text') + String title; + + @JsonKey(name: 'my_functions_text_color') + String titleColor; + + @JsonKey(name: 'layout') + String layout; + + @JsonKey(name: 'functions_bg_color') + String myFunctionsBgColor; + + @JsonKey(name: 'functions_list') + List items; + + MineQuickModel( + this.title, + this.titleColor, + this.layout, + this.myFunctionsBgColor, + this.items, + ); + + factory MineQuickModel.fromJson(Map srcJson) => + _$MineQuickModelFromJson(srcJson); + + Map toJson() => _$MineQuickModelToJson(this); +} + +@JsonSerializable() +class MineQuickItemModel extends Object { + @JsonKey(name: 'name') + String name; + + @JsonKey(name: 'name_color') + String nameColor; + + @JsonKey(name: 'icon') + String icon; + + @JsonKey(name: 'required_login') + String requiredLogin; + + @JsonKey(name: 'required_taobao_auth') + String requiredTaobaoAuth; + + @JsonKey(name: 'skip_identifier') + String skipIdentifier; + + MineQuickItemModel( + this.name, + this.icon, + this.requiredLogin, + this.requiredTaobaoAuth, + this.skipIdentifier, + ); + + factory MineQuickItemModel.fromJson(Map srcJson) => + _$MineQuickItemModelFromJson(srcJson); + + Map toJson() => _$MineQuickItemModelToJson(this); +} diff --git a/lib/widgets/mine/mine_quick_entry/model/mine_quick_model.g.dart b/lib/widgets/mine/mine_quick_entry/model/mine_quick_model.g.dart new file mode 100644 index 0000000..4c3fa45 --- /dev/null +++ b/lib/widgets/mine/mine_quick_entry/model/mine_quick_model.g.dart @@ -0,0 +1,50 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'mine_quick_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +MineQuickModel _$MineQuickModelFromJson(Map json) { + return MineQuickModel( + json['my_functions_text'] as String, + json['my_functions_text_color'] as String, + json['layout'] as String, + json['functions_bg_color'] as String, + (json['functions_list'] as List) + ?.map((e) => e == null + ? null + : MineQuickItemModel.fromJson(e as Map)) + ?.toList(), + ); +} + +Map _$MineQuickModelToJson(MineQuickModel instance) => + { + 'my_functions_text': instance.title, + 'my_functions_text_color': instance.titleColor, + 'layout': instance.layout, + 'functions_bg_color': instance.myFunctionsBgColor, + 'functions_list': instance.items, + }; + +MineQuickItemModel _$MineQuickItemModelFromJson(Map json) { + return MineQuickItemModel( + json['name'] as String, + json['icon'] as String, + json['required_login'] as String, + json['required_taobao_auth'] as String, + json['skip_identifier'] as String, + )..nameColor = json['name_color'] as String; +} + +Map _$MineQuickItemModelToJson(MineQuickItemModel instance) => + { + 'name': instance.name, + 'name_color': instance.nameColor, + 'icon': instance.icon, + 'required_login': instance.requiredLogin, + 'required_taobao_auth': instance.requiredTaobaoAuth, + 'skip_identifier': instance.skipIdentifier, + }; diff --git a/lib/widgets/mine/mine_quick_entry/models/mine_quick_entry_model.dart b/lib/widgets/mine/mine_quick_entry/models/mine_quick_entry_model.dart deleted file mode 100644 index 72097e9..0000000 --- a/lib/widgets/mine/mine_quick_entry/models/mine_quick_entry_model.dart +++ /dev/null @@ -1,3 +0,0 @@ -class MineQuickEntryModel { - static fromJson(Map map) {} -}