import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:velocity_x/src/extensions/iterable_ext.dart'; import 'package:velocity_x/src/extensions/string_ext.dart'; import 'package:aku_new_community/extensions/num_ext.dart'; import 'package:aku_new_community/extensions/widget_list_ext.dart'; import 'package:aku_new_community/utils/application_utils.dart'; import 'package:aku_new_community/widget/bee_scaffold.dart'; class AllApplicationNewPage extends StatefulWidget { const AllApplicationNewPage({Key? key}) : super(key: key); @override _AllApplicationNewPageState createState() => _AllApplicationNewPageState(); } class _AllApplicationNewPageState extends State { List rootTypes = ['物业服务', '出行安全', '居民生活', '关于社区', '智慧服务', '附近市场']; List getApplications(int index) { switch (index) { case 0: return ['报事报修', '设施预约', '生活缴费', '装修管理']; case 1: return [ '开门码', '物品出门', '地理信息', '小蜜蜂任务', ]; case 2: return ['便民电话', '问卷调查', '活动投票', '快递包裹', '投诉表扬', '业委会', '社区介绍', '借还管理']; case 3: return ['服务浏览', '周边企业', '住房说明', '电子商务']; case 4: return ['智慧养老', '任务发布', '周边服务', '共享投屏']; case 5: return ['自营商城', '邻家宠物', '共享停车', '二手市场']; default: return []; } } @override Widget build(BuildContext context) { return BeeScaffold( title: '全部应用', body: ListView( padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w), children: rootTypes .mapIndexed((e, index) => _applicationTile(index)) .toList() .sepWidget(separate: 16.hb), )); } Container _applicationTile(int index) { return Container( width: 686.w, padding: EdgeInsets.symmetric( vertical: 32.w, ), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.w)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Padding( padding: EdgeInsets.only(left: 32.w, bottom: 24.w), child: rootTypes[index] .text .size(32.sp) .color(Color(0xFF2B2B2B)) .bold .make(), ), ConstrainedBox( constraints: BoxConstraints( maxHeight: getApplications(index).length ~/ 4 * 140.w + ((getApplications(index).length - 4) ~/ 4 * 30.w)), child: GridView.count( shrinkWrap: true, crossAxisCount: 4, physics: NeverScrollableScrollPhysics(), children: ApplicationUtil(getApplications(index)) .elements .map((e) => applicationItem(e)) .toList(), ), ), ], ), ); } Widget applicationItem(AppElement appElement) { return GestureDetector( onTap: appElement.onTap, child: Column( mainAxisSize: MainAxisSize.min, children: [ Image.asset( appElement.imgPath, width: 96.w, height: 96.w, ), 8.hb, appElement.title.text.size(24.sp).color(Color(0xFF333333)).make(), ], ), ); } }