login_qr_page.dart 4.66 KB
import 'package:appframe/bloc/login_qr_cubit.dart';
import 'package:appframe/ui/widgets/login/login_page_header_widget.dart';
import 'package:appframe/ui/widgets/login/login_page_image_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

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

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
        create: (BuildContext context) => LoginQrCubit(LoginQrState()),
        child: BlocConsumer<LoginQrCubit, LoginQrState>(
          builder: (context, state) {
            var loginQrCubit = context.read<LoginQrCubit>();
            return Scaffold(
              resizeToAvoidBottomInset: true,
              backgroundColor: Colors.white,
              body: SafeArea(
                top: false,
                child: SingleChildScrollView(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    children: [
                      LoginPageImageWidget(),
                      Transform.translate(
                        offset: Offset(0, -40), // 向上移动40像素
                        child: Container(
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
                            color: Colors.white, // 设置背景色
                          ),
                          padding: const EdgeInsets.symmetric(horizontal: 24.0),
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.start,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              SizedBox(height: 30),
                              LoginPageHeaderWidget(),
                              SizedBox(height: 25),
                              Center(
                                child: _buildQrCode(loginQrCubit, state),
                              ),
                              SizedBox(height: 30),
                              _buildWechatLogin(loginQrCubit),
                            ],
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            );
          },
          listener: (context, state) {},
        ));
  }

  Column? _buildQrCode(LoginQrCubit loginQrCubit, LoginQrState state) {
    if (state.status == 0) {
      // 等待二维码数据
      return Column(
        children: [
          Column(
            children: [
              SizedBox(height: 40),
              CircularProgressIndicator(),
              SizedBox(height: 12),
              Text(
                '正在生成二维码...',
              ),
              SizedBox(height: 40),
            ],
          ),
          SizedBox(height: 12),
          Text(
            state.tip,
          ),
        ],
      );
    } else if (state.status == 1) {
      // 等待扫码
      return Column(
        children: [
          Image.memory(
            state.image!,
            width: 200,
            height: 200,
          ),
          SizedBox(height: 12),
          Text(
            state.tip,
          ),
        ],
      );
    } else if (state.status == 2) {
      // 已扫码,等待确认
      return Column(
        children: [
          // Image.asset("assets/qr_suc.png"),
          Text(
            "已扫码",
          ),
          SizedBox(height: 12),
          Text(
            state.tip,
          ),
        ],
      );
    } else if (state.status == 3) {
      // 拒绝
      return Column(
        children: [
          // Image.asset("assets/qr_fail.png"),
          Text(
            "拒绝登录",
          ),
          SizedBox(height: 12),
          Text(
            state.tip,
          ),
        ],
      );
    }
    return null;
  }

  Widget _buildWechatLogin(LoginQrCubit loginQrCubit) {
    return SizedBox(
      width: double.infinity,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          GestureDetector(
            onTap: () {
              loginQrCubit.goLoginMain();
            },
            child: Column(
              children: [
                Image.asset('assets/images/login/wechat.png'),
                SizedBox(height: 4),
                Text(
                  '返回微信登录',
                  style: TextStyle(
                    fontSize: 14,
                    color: Color(0xFF000000),
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}