import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/widgets/we_app_bar.dart'; import 'package:wow_english/pages/shop/home/widgets/product_item.dart'; import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/toast_util.dart'; import 'bloc/shop_home_bloc.dart'; class ShopHomePage extends StatelessWidget { const ShopHomePage({super.key}); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => ShopHomeBloc()..add(RequestDataEvent()), child: _ShopHomeView(), ); } } class _ShopHomeView extends StatelessWidget { @override Widget build(BuildContext context) { return BlocListener( listener: (context, state) {}, child: _shopHomeWidget(), ); } Widget _shopHomeWidget() => BlocBuilder(builder: (context, state) { final bloc = BlocProvider.of(context); return Scaffold( appBar: WEAppBar( actions: [ IconButton( icon: Image.asset( 'check_lesson'.assetPng, width: 40, height: 40, ), color: Colors.white, onPressed: () { pushNamed(AppRouteName.exLesson).then((value) => { if (value != null) {bloc.exchangeResult = value['exchange']} }); }, ), IconButton( icon: Image.asset( 'shop'.assetPng, width: 40, height: 40, ), color: Colors.white, onPressed: () { pushNamed(AppRouteName.shopDesc); }, ) ], onBack: () { popPage(data: {'exchange': bloc.exchangeResult}); }, ), body: Center( child: Padding( padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 24.w), child: GridView.builder( itemCount: bloc.productDatas.length, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, childAspectRatio: 2, mainAxisSpacing: 16.h, crossAxisSpacing: 12.w, ), itemBuilder: (BuildContext context, int index) { final productEntity = bloc.productDatas[index]; return ProductItem( onTap: () { pushNamed(AppRouteName.pay, arguments: productEntity); }, entity: productEntity); }), ), ), ); }); }