exchange_lesson_page.dart 4.81 KB
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/textfield_customer_widget.dart';
import 'package:wow_english/pages/shop/exchane/widegts/exchange_result_dialog.dart';
import 'package:wow_english/route/route.dart';

import 'bloc/exchange_lesson_bloc.dart';

class ExchangeLessonPage extends StatelessWidget {
  const ExchangeLessonPage({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => ExchangeLessonBloc(),
      child: _ExchangeLessonPage(),
    );
  }
}

class _ExchangeLessonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocListener<ExchangeLessonBloc, ExchangeLessonState>(
      listener: (context, state) {
        if (state is CheckCodeResultState) {
          showDialog<ExChangeResultDialog>(
              context: context,
              barrierDismissible: !state.result,
              builder: (context){
                return ExChangeResultDialog(
                    resultType:state.result,
                    onTap:(){
                      popPage();
                    }
                );
          });
        }
      },
      child: _exchangeLessonPageView(),
    );
  }

  Widget _exchangeLessonPageView() => BlocBuilder<ExchangeLessonBloc, ExchangeLessonState>(builder: (context, state) {
        final bloc = BlocProvider.of<ExchangeLessonBloc>(context);
        return Scaffold(
          resizeToAvoidBottomInset: false,
          body: Container(
            color: Colors.white,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                10.5.verticalSpace,
                Padding(
                  padding: EdgeInsets.symmetric(horizontal: 15.w),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      IconButton(
                        icon: Image.asset(
                          'back_around'.assetPng,
                          width: 40,
                          height: 40,
                        ),
                        color: Colors.white,
                        onPressed: () {
                          Navigator.pop(context);
                        },
                      ),
                      Image.asset(
                        'wow_ex_lesson'.assetPng,
                        width: 139.w,
                        height: 81.h,
                      ),
                      SizedBox.fromSize(size: const Size(40.0, 40.0))
                    ],
                  ),
                ),
                Expanded(
                  child: Padding(
                    padding: EdgeInsets.symmetric(horizontal: 135.w),
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        TextFieldCustomerWidget(
                          height: 55.h,
                          hitText: '请输入兑换码',
                          bgImageName: 'Input_layer_up',
                          textInputType: TextInputType.emailAddress,
                          controller: bloc.codeNumberController,
                          onChangeValue: (String value) {
                            bloc.add(CodeNumberChangeEvent());
                          },
                        ),
                        21.5.verticalSpace,
                        GestureDetector(
                          onTap: () {
                            if (bloc.checkCode) {
                              bloc.add(CheckCodeEvent());
                            }
                          },
                          child: Container(
                            decoration: BoxDecoration(
                              image: DecorationImage(
                                  image: AssetImage(bloc.checkCode ? 'ex_sure'.assetPng : 'ex_dis'.assetPng),
                                  fit: BoxFit.fill),
                            ),
                            padding: EdgeInsets.symmetric(horizontal: 27.w, vertical: 14.h),
                            child: Text(
                              '兑换',
                              style: TextStyle(fontSize: 16.sp, color: Colors.white),
                            ),
                          ),
                        )
                      ],
                    ),
                  ),
                ),
                Image.asset(
                  'bottom_grass'.assetPng,
                ),
              ],
            ),
          ),
        );
      });
}