flutter Stack超出底图范围后,关闭按键点击效果失效

2023-10-27

既然是关闭按键超出了底图范围导致不能点击,那就让关闭按键不超出就可以了。
可以给底图再添加一个大点的底图,这两个底图作为一个整体,关闭按键就可以点击了
如图,下面添加了一个黑色的底图用来扩充原来的底图范围,白色关闭按键就可以点击得到了
在这里插入图片描述

    return Material(
      color: Colors.transparent,
      child: Center(
        child: Stack(
          clipBehavior: Clip.none,
          alignment: Alignment.bottomCenter,
          children: [
            Stack(
              alignment: Alignment.center,
              children: [
                Container(
                  color: Colors.black,
                  height: 480.r,
                  width: Global.screenWidth,
                ),
                Stack(
                  alignment: Alignment.topCenter,
                  children: [
                    Container(
                      margin: EdgeInsets.only(bottom: 50.r),
                        height: 344.r,
                        width: 332.r,
                        decoration: BoxDecorationUtil().setFillBoxDecorationImg(
                            'assets/images/bg_sign_in_result.png')),
                    Positioned(
                      top: 93.r,
                      child: Column(
                        children: [
                          Text(
                            S.current.check_in_congratulation,
                            style: TextStyle(
                                color: const Color(0xFFF96281),
                                fontSize: 24.sp,
                                fontWeight: FontWeight.w700),
                          ),
                          Stack(
                            alignment: Alignment.topLeft,
                            children: [
                              Container(
                                  width: 265.r,
                                  height: 90.r,
                                  margin: EdgeInsets.only(top: 15.r),
                                  alignment: Alignment.center,
                                  constraints:
                                      BoxConstraints(maxHeight: 105.0.r),
                                  decoration: BoxDecorationUtil()
                                      .setFillBoxDecorationImg(
                                          'assets/images/bg_sign_in_gift.png'),
                                  child: ListView.builder(
                                      shrinkWrap: true,
                                      padding: const EdgeInsets.only(),
                                      itemCount: widget.signInGetResult
                                          .signInGetResultItem?.length,
                                      scrollDirection: Axis.horizontal,
                                      itemBuilder: (contexts, index) {
                                        return Stack(
                                          alignment: Alignment.bottomCenter,
                                          children: [
                                            Stack(
                                              children: [
                                                Container(
                                                  child: Column(
                                                    mainAxisSize:
                                                        MainAxisSize.max,
                                                    mainAxisAlignment:
                                                        MainAxisAlignment
                                                            .center,
                                                    children: [
                                                      Container(
                                                        width: 54.0.r,
                                                        height: 54.0.r,
                                                        alignment:
                                                            Alignment.center,
                                                        margin: EdgeInsets.only(
                                                            left: widget
                                                                        .signInGetResult
                                                                        .signInGetResultItem
                                                                        ?.length ==
                                                                    2
                                                                ? 32.0.r
                                                                : widget.signInGetResult.signInGetResultItem
                                                                            ?.length ==
                                                                        3
                                                                    ? 12.0.r
                                                                    : 12.0.r,
                                                            right: widget
                                                                        .signInGetResult
                                                                        .signInGetResultItem
                                                                        ?.length ==
                                                                    2
                                                                ? 32.0.r
                                                                : widget.signInGetResult.signInGetResultItem
                                                                            ?.length ==
                                                                        3
                                                                    ? 12.0.r
                                                                    : 12.0.r,
                                                            bottom: 17.r),
                                                        child: BackgroundWall(
                                                          avtarUrl: widget.signInGetResult
                                                              .signInGetResultItem?[index].icon,
                                                        )
                                                        // child: Image(
                                                        //   image: AssetImage(
                                                        //       'assets/images/icon_sign_in_turntable.png'),
                                                        // ),
                                                      ),
                                                      // TopPadding(10.0.r),
                                                    ],
                                                  ),
                                                ),
                                              ],
                                            ),
                                            Positioned(
                                              bottom: 13.5.r,
                                              child: ContentText(
                                                '${widget.signInGetResult.signInGetResultItem?[index].qtyText}',
                                                12.0.sp,
                                                Colors.white,
                                                fontWeight: FontWeight.w700,
                                              ),
                                            ),
                                          ],
                                        );
                                      })),
                              Positioned(
                                top: 15,
                                left: -2,
                                child: Image(
                                  image: widget.todayIndex == 1
                                      ? const AssetImage(
                                          'assets/images/icon_sign_in_first.png')
                                      : widget.todayIndex == 2
                                          ? const AssetImage(
                                              'assets/images/icon_sign_in_second.png')
                                          : widget.todayIndex == 3
                                              ? const AssetImage(
                                                  'assets/images/icon_sign_in_three.png')
                                              : widget.todayIndex == 4
                                                  ? const AssetImage(
                                                      'assets/images/icon_sign_in_four.png')
                                                  : widget.todayIndex == 5
                                                      ? const AssetImage(
                                                          'assets/images/icon_sign_in_five.png')
                                                      : widget.todayIndex == 6
                                                          ? const AssetImage(
                                                              'assets/images/icon_sign_in_six.png')
                                                          : const AssetImage(
                                                              'assets/images/icon_sign_in_seven.png'),
                                  width: 30.r,
                                  height: 30.r,
                                ),
                              ),
                            ],
                          ),
                          GestureDetector(
                            onTap: () {
                              launchUrl(
                                Uri.parse(
                                    "http://www.hayyachat.com/vn/activity/free_lottery"),
                              );
                            },
                            child: Container(
                              margin: EdgeInsets.only(top: 23.r),
                              alignment: Alignment.center,
                              height: 50.r,
                              width: 265.r,
                              decoration: BoxDecorationUtil()
                                  .setFillBoxDecorationImg(
                                      'assets/images/icon_sign_in_press.png'),
                              child: Text(
                                S.current.check_in_lottery,
                                style: TextStyle(
                                    color: const Color(0xFFFFF9E8),
                                    fontSize: 20.sp,
                                    fontWeight: FontWeight.w600),
                              ),
                            ),
                          ),
                        ],
                      ),
                    )
                  ],
                )
              ],
            ),
            Container(
              child: GestureDetector(
                onTap: () {
                  MyRouter.pop(context);
                },
                child: Container(
                  padding: EdgeInsets.only(
                      right: 15.r, top: 20.r, bottom: 45.r, left: 15.r),
                  child: GestureDetector(
                    onTap: () {
                      MyRouter.pop(context);
                    },
                    child: Image(
                      image: AssetImage(
                          'assets/images/icon_sign_in_close_white.png'),
                      width: 30.r,
                      height: 30.r,
                    ),
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );

//底部弹窗可以这样子处理

import 'dart:convert';
import 'dart:developer';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:oktoast/oktoast.dart';
import 'package:provider/provider.dart';
import 'package:social_im/utils/loadingUtil.dart';
import '../../../common/Global.dart';
import '../../../common/avatar.dart';
import '../../../common/colors.dart';
import '../../../common/globalEventBus.dart';
import '../../../common/ws/room/ws_room_linker.dart';
import '../../../generated/l10n.dart';
import '../../../http/api.dart';
import '../../../http/http_request.dart';
import '../../../http/net_callback.dart';
import '../../../http/rxhttp.dart';
import '../../../http/utils/NetUtils.dart';
import '../../../http/utils/response.dart';
import '../../../im/user_info.dart';
import '../../../models/archives_info.dart';
import '../../../models/myUserInfo.dart';
import '../../../models/userInfo/userExpandInfo.dart';
import '../../../protobufdart/dart/room/room.pb.dart';
import '../../../provider/user.dart';
import '../../../router.dart';
import '../../../utils/date_util.dart';
import '../../../utils/image_utile.dart';
import '../../../utils/printUtil.dart';
import '../../pay/model/extend.dart';
import '../../widget/myText.dart';
import '../../widget/splitLine.dart';
import '../direct_message_tip.dart';
import 'package:social_im/protobufdart/dart/room/user_extra_info.pb.dart'
    as $user_extra;
import 'package:fixnum/fixnum.dart' as $fixnum;

//直播相关界面-用户详情
class DirectUserDetail extends StatefulWidget {
  //信息
  DirectUserDetailModel? directUserDetailModel;

  //来源
  int? source;

  //是否已关注主播
  bool? hasFocusAnchor;

  DirectUserDetail(
      {Key? key, this.directUserDetailModel, this.source, this.hasFocusAnchor})
      : super(key: key);

  @override
  State<StatefulWidget> createState() => DirectUserDetailState();
}

class DirectUserDetailState extends State<DirectUserDetail> {
  bool isFocus = false;
  ArchivesInfo? archivesInfo;
  UserExpandInfo? userExpandInfo;
  MyUserInfo? myUserInfo;

  //默认显示
  bool showFocusButton = true;

  @override
  void initState() {
    print('详情弹窗${Global.userId} ${widget.directUserDetailModel?.userId}');
    //获取是否已关注
    if (Global.userId != '${widget.directUserDetailModel?.userId}') {
      //点开的不是自己才请求接口
      _getFocusState();
    }
    // getBaseUserInfoApi();
    //获取VIP,财富等级和魅力等级
    _getExtendInfo(0);
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  //获取性别1男 2女
  int getSex() {
    //默认是女
    int sex = 2;
    if (widget.directUserDetailModel != null) {
      if (widget.directUserDetailModel!.sex != null) {
        sex = widget.directUserDetailModel!.sex ?? 2;
      } else {
        if (archivesInfo != null) {
          if (archivesInfo!.sex != null) {
            sex = archivesInfo!.sex ?? 2;
          }
        }
      }
    } else {
      if (archivesInfo != null) {
        if (archivesInfo!.sex != null) {
          sex = archivesInfo!.sex ?? 2;
        }
      }
    }
    return sex;
  }

  //获取年龄
  int getAge() {
    int age = 0;
    print(
        '获取年龄是${widget.directUserDetailModel?.age}  ${archivesInfo?.birthday}');
    if (widget.directUserDetailModel != null) {
      if (widget.directUserDetailModel!.age != null) {
        age = widget.directUserDetailModel!.age!;
      } else {
        if (archivesInfo != null) {
          if (archivesInfo!.birthday != null) {
            age = UserInfoUtil().getAge(archivesInfo!.birthday ?? 0);
          }
        }
      }
    } else {
      if (archivesInfo != null) {
        if (archivesInfo!.birthday != null) {
          age = UserInfoUtil().getAge(archivesInfo!.birthday ?? 0);
        }
      }
    }
    return age;
  }

  //获取昵称
  getName() {
    String name = '';
    if (widget.directUserDetailModel != null) {
      if (widget.directUserDetailModel!.nickName != null) {
        name = widget.directUserDetailModel!.nickName ?? '';
      }
    }
    return name;
  }

  //获取头像
  getAvatar() {
    String avatar = '';
    if (widget.directUserDetailModel != null) {
      if (widget.directUserDetailModel!.avatar != null) {
        avatar = widget.directUserDetailModel!.avatar ?? '';
      }
    }
    return avatar;
  }

  //获取财富等级
  int getWealthLevel() {
    int level = 0;
    if (userExpandInfo != null) {
      if (userExpandInfo!.wealth_level != null) {
        level = userExpandInfo!.wealth_level ?? 0;
      }
    }
    return level;
  }

  //获取魅力等级
  int getCharmLevel() {
    int level = 0;
    if (userExpandInfo != null) {
      if (userExpandInfo!.charm_level != null) {
        level = userExpandInfo!.charm_level ?? 0;
      }
    }
    return level;
  }

  ///是否vip
  bool getVip() {
    bool _isVip = false;
    if (userExpandInfo != null) {
      _isVip = (userExpandInfo!.vip_level ?? 0) > 0 &&
          (userExpandInfo!.vip_expiration_time ?? 0) > DateUtil.getNowDateS();
    }
    return _isVip;
  }

  ///是否显示关注按键
  showFocus() {
    ///默认展示
    bool isShow = true;
    if (showFocusButton == false) {
      //优先显示点击的状态
      isShow = false;
    } else {
      if (Global.userId == '${widget.directUserDetailModel?.userId}') {
        //自己就不显示关注按键
        isShow = false;
      } else {
        //点击主播头像时
        if (widget.source == 1) {
          if (widget.hasFocusAnchor == true) {
            //已经关注了
            isShow = false;
          } else {
            //还没关注主播
            isShow = true;
          }
        } else {
          //拉接口获取判断
          if (archivesInfo != null) {
            if (archivesInfo!.is_focus != null) {
              if (archivesInfo!.is_focus == true) {
                isFocus = false;
              } else {
                isFocus = true;
              }
            }
          }
        }
      }
    }
    mySetState(() {});
    return isShow;
  }

  mySetState(callBack) {
    if (mounted) {
      setState(() {
        callBack();
      });
    }
  }

  ///获取金币、钻石等扩展信息
  void _getExtendInfo(int delay) {
    print('===========获取金币、钻石等扩展信息===========');
    Future.delayed(Duration(milliseconds: delay)).then((value) {
      RxHttp<UserExpandInfo>()
        ..init()
        ..setBaseUrl(Api.BUSINESS_BASE_API)
        ..setPath(Api.API_USER_EXTENDINFO)
        ..setCacheMode(CacheMode.FIRST_CACHE_THEN_REQUEST)
        ..setJsonTransFrom(
            (p0) => UserExpandInfo.fromJson(json.decoder.convert(p0)['data']))
        ..setParams({"user_id": widget.directUserDetailModel?.userId ?? 0})
        ..call(NetCallback(onNetFinish: (extend) {
          userExpandInfo = extend;
          mySetState(() {});
        }), server: Servers.businessServer);
    });
  }

  ///获取个人信息
  getBaseUserInfoApi() {
    HttpRequest.intance.postHttpFromBusiness(Api.GET_BASEINFO, (data) {
      if (data.isNotEmpty) {
        LoadingUtil.dismissLoading();
        MyUserInfo user = MyUserInfo.fromJson(data);
      }
    }, (error, errorCode) {
      LoadingUtil.dismissLoading();
    }, parameters: {'user_id': widget.directUserDetailModel?.userId ?? 0});
  }

  ///获取好友的档案资料(是否关注)
  _getFocusState() {
    LoadingUtil.showLoading();
    RxHttp<ArchivesInfo>()
      ..init()
      ..setBaseUrl(Api.BASE_API)
      ..setPath(Api.GET_OTHER_ARCHIVES_INFO)
      ..setJsonTransFrom((data) {
        log('加载数据 好友档案------$data');
        return ArchivesInfo.fromJson(json.decoder.convert(data)['data']);
      })
      ..setCacheMode(CacheMode.FIRST_CACHE_THEN_REQUEST)
      ..setParams({"user_id": widget.directUserDetailModel?.userId ?? 0})
      ..call(
          NetCallback(onNetFinish: (archivesInfo) {
            LoadingUtil.dismissLoading();
            this.archivesInfo = archivesInfo;
            mySetState(() {});

            // setOtherArchivesInfo(archivesInfo);
          }, onCacheFinish: (archivesInfo) {
            this.archivesInfo = archivesInfo;
            mySetState(() {});
            LoadingUtil.dismissLoading();
            // setOtherArchivesInfo(archivesInfo);
          }, onUnkownFinish: (archivesInfo) {
            LoadingUtil.dismissLoading();
          }, onNetError: (errorCode, error) {
            LoadingUtil.dismissLoading();
            showToast('$error ($errorCode)');
          }),
          server: Servers.microServices);
  }

  // setOtherArchivesInfo(ArchivesInfo archivesInfo) {
  //   if (archivesInfo.is_focus != null) {
  //     if (archivesInfo.is_focus == true) {
  //       isFocus = true;
  //     } else {
  //       isFocus = false;
  //     }
  //   }
  // }

  $fixnum.Int64 _int64(String str) {
    assert(str.isNotEmpty);
    return $fixnum.Int64.parseInt(str);
  }

  ///请求关注广播
  focusAnchor() {
    //这个关注是用户观众给主播点关注
    //观众信息
    Uint8List fromUserData = $user_extra.UserExtraInfo(
            userId: _int64('${myUserInfo?.userID}'),
            nickname: myUserInfo?.nickName,
            avatar: myUserInfo?.faceUrlThumb ?? myUserInfo?.faceUrl,
            gender: myUserInfo?.gender,
            age: UserInfoUtil().getAge(myUserInfo?.birthday ?? 0),
            vip: myUserInfo!.isVip ? 1 : 0,
            lang: myUserInfo?.userExpandInfo?.region,
            wealthLeve: myUserInfo?.userExpandInfo?.wealth_level,
            charmLeve: myUserInfo?.userExpandInfo?.charm_level)
        .writeToBuffer();

    //主播信息
    Uint8List toUserData = $user_extra.UserExtraInfo(
            userId: _int64('${widget.directUserDetailModel?.userId ?? 0}'),
            nickname: widget.directUserDetailModel?.nickName ?? '',
            avatar: widget.directUserDetailModel?.avatar ?? '',
            charmLeve: widget.directUserDetailModel?.charmLevel ?? 0)
        .writeToBuffer();

    RoomUserInfo fromUserInfo = RoomUserInfo(
        userId: _int64('${myUserInfo?.userID}'),
        role: 1,
        userExtraInfo: fromUserData);

    RoomUserInfo toUserInfo = RoomUserInfo(
        userId: _int64('${myUserInfo?.userID}'),
        role: 50,
        userExtraInfo: toUserData);
    WsRoomLinker.instance.focusMsgReq(fromUserInfo, toUserInfo);
  }

  ///添加/删除关注
  addDeleteFriend(bool isAdd, String userId) async {
    if (isAdd) {
      PrintUtil.prints('${DirectMessageTip.focusAnchorTip} 关注的ID是${userId}');
      HttpRequest.intance.postHttp(Api.ADD_FOCUS_FRIEND, (data) {
        focusAnchor();
        //更新聊天界面的关注状态
        EventBusUtil.fire(LiveFocusState());
        mySetState(() {});
      }, (error, errorCode) {}, parameters: {"user_id": int.parse(userId)});
    } else {
      HttpRequest.intance.postHttp(Api.DELETE_FOCUS_FRIEND, (data) {
        //更新聊天界面的关注状态
        EventBusUtil.fire(LiveFocusState());
        mySetState(() {});
      }, (error, errorCode) {}, parameters: {"user_id": int.parse(userId)});
    }
  }

  @override
  Widget build(BuildContext context) {
    myUserInfo = Provider.of<UserModel>(context, listen: true).info;
    return Material(
      color: Colors.transparent,
      child: Stack(
        alignment: Alignment.bottomCenter,
        children: [
          GestureDetector(
              onTap: () {
                MyRouter.pushMyMap(context, MyRouter.friendFilesPage, {
                  'isContainer': false,
                  'userID': '${widget.directUserDetailModel?.userId ?? 0}',
                });
              },
              child: Container(
                color: Colors.red,
                height: 340,
                width: 80,
              )),
          Container(
            decoration: const BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(20),
                    topRight: Radius.circular(20))),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                Stack(
                  clipBehavior: Clip.none,
                  alignment: Alignment.topCenter,
                  children: [
                    ConstrainedBox(
                      constraints: BoxConstraints(minHeight: 200.r),
                      child: Container(
                        color: Colors.white,
                        margin: const EdgeInsets.only(top: 40),
                        // color: Colors.transparent,
                        child: Container(
                          color: Colors.white,
                          child: Column(
                            mainAxisSize: MainAxisSize.min,
                            mainAxisAlignment: MainAxisAlignment.start,
                            children: [
                              Container(
                                margin:
                                    const EdgeInsets.only(top: 10, bottom: 5),
                                child: Text(
                                  '${getName()}',
                                  style: const TextStyle(
                                      color: Color(0xFF333333), fontSize: 18),
                                ),
                              ),
                              Container(
                                margin: const EdgeInsets.only(bottom: 25),
                                child: Row(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: [
                                    Container(
                                        margin: const EdgeInsets.only(left: 5),
                                        alignment: Alignment.center,
                                        padding: const EdgeInsets.fromLTRB(
                                            5, 2, 5, 2),
                                        child: Row(
                                            mainAxisSize: MainAxisSize.min,
                                            children: [
                                              Image(
                                                  image: AssetImage(getSex() ==
                                                          1
                                                      ? 'assets/images/icon_direct_seeding_male.png'
                                                      : 'assets/images/icon_direct_seeding_female.png'),
                                                  gaplessPlayback: true,
                                                  width: 12,
                                                  height: 12),
                                              Text(
                                                '${getAge()}',
                                                style: TextStyle(
                                                  fontSize: 9.0,
                                                  color: getSex() == 1
                                                      ? const Color(0xFF569BF7)
                                                      : const Color(0xFFFF528D),
                                                ),
                                              )
                                            ]),
                                        decoration: BoxDecorationUtil()
                                            .setFillBoxDecoration(
                                                getSex() == 1
                                                    ? const Color(0x26519EF1)
                                                    : const Color(0x33FF0087),
                                                10.0)),
                                    if (getVip())
                                      Container(
                                        margin: const EdgeInsets.only(left: 13),
                                        padding: const EdgeInsets.only(
                                            left: 5,
                                            right: 5,
                                            top: 2,
                                            bottom: 2),
                                        decoration: BoxDecoration(
                                            color: const Color(0xFFC7B7F5),
                                            borderRadius:
                                                BorderRadius.circular(50)),
                                        child: Row(
                                          children: [
                                            Container(
                                              margin: const EdgeInsets.only(
                                                  right: 3),
                                              width: 11,
                                              height: 11,
                                              child: ImageUtile.imageWidget(
                                                  "assets/images/icon_direct_seeding_vip.png"),
                                            ),
                                            const Text(
                                              'VIP',
                                              style: TextStyle(
                                                  color: Color(0xFFA48DFB),
                                                  fontSize: 9),
                                            )
                                          ],
                                        ),
                                      ),
                                  ],
                                ),
                              ),
                              Row(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                  Stack(
                                    alignment: Alignment.centerRight,
                                    children: [
                                      Container(
                                        height: 70,
                                        width: 124,
                                        decoration: BoxDecoration(
                                            color: const Color(0xFFEAE5F8),
                                            borderRadius:
                                                BorderRadius.circular(6)),
                                        margin:
                                            const EdgeInsets.only(bottom: 25),
                                        child: Row(
                                          mainAxisAlignment:
                                              MainAxisAlignment.start,
                                          children: [
                                            Container(
                                              margin: const EdgeInsets.only(
                                                  left: 5),
                                              alignment: Alignment.center,
                                              padding:
                                                  const EdgeInsets.fromLTRB(
                                                      5, 2, 5, 2),
                                              child: Column(
                                                mainAxisAlignment:
                                                    MainAxisAlignment.center,
                                                crossAxisAlignment:
                                                    CrossAxisAlignment.start,
                                                children: [
                                                  ConstrainedBox(
                                                    constraints:
                                                        const BoxConstraints(
                                                            maxWidth: 80),
                                                    child: const Text(
                                                      '财富等级1',
                                                      style: TextStyle(
                                                          color:
                                                              Color(0xFF333333),
                                                          fontSize: 14),
                                                    ),
                                                  ),
                                                  Container(
                                                    padding:
                                                        const EdgeInsets.only(
                                                            left: 5,
                                                            right: 5,
                                                            top: 2,
                                                            bottom: 2),
                                                    margin:
                                                        const EdgeInsets.only(
                                                            top: 3),
                                                    decoration: BoxDecoration(
                                                        color: const Color(
                                                            0xFFC7B7F5),
                                                        borderRadius:
                                                            BorderRadius
                                                                .circular(50)),
                                                    child: Row(
                                                      children: [
                                                        Container(
                                                          margin:
                                                              const EdgeInsets
                                                                      .only(
                                                                  right: 3),
                                                          width: 11,
                                                          height: 11,
                                                          child: ImageUtile
                                                              .imageWidget(
                                                                  "assets/images/icon_direct_seeding_vip.png"),
                                                        ),
                                                        Text(
                                                          '${getWealthLevel()}',
                                                          style: const TextStyle(
                                                              color: Color(
                                                                  0xFFA48DFB),
                                                              fontSize: 12),
                                                        )
                                                      ],
                                                    ),
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ],
                                        ),
                                      ),
                                      Container(
                                        margin:
                                            const EdgeInsets.only(bottom: 25),
                                        child: Image(
                                            image: const AssetImage(
                                                'assets/images/icon_direct_seeding_rich.png'),
                                            gaplessPlayback: true,
                                            height: 65.r),
                                      ),
                                    ],
                                  ),
                                  Container(
                                    margin: const EdgeInsets.only(left: 20),
                                    child: Stack(
                                      alignment: Alignment.centerRight,
                                      children: [
                                        Container(
                                          height: 70,
                                          width: 124,
                                          decoration: BoxDecoration(
                                              color: const Color(0x0fff0079),
                                              borderRadius:
                                                  BorderRadius.circular(6)),
                                          margin:
                                              const EdgeInsets.only(bottom: 25),
                                          child: Row(
                                            mainAxisAlignment:
                                                MainAxisAlignment.start,
                                            children: [
                                              Container(
                                                margin: const EdgeInsets.only(
                                                    left: 5),
                                                alignment: Alignment.center,
                                                padding:
                                                    const EdgeInsets.fromLTRB(
                                                        5, 2, 5, 2),
                                                child: Column(
                                                  mainAxisAlignment:
                                                      MainAxisAlignment.center,
                                                  crossAxisAlignment:
                                                      CrossAxisAlignment.start,
                                                  children: [
                                                    ConstrainedBox(
                                                      constraints:
                                                          const BoxConstraints(
                                                              maxWidth: 80),
                                                      child: const Text(
                                                        '魅力等级1',
                                                        style: TextStyle(
                                                            color: Color(
                                                                0xFF333333),
                                                            fontSize: 14),
                                                      ),
                                                    ),
                                                    Container(
                                                      padding:
                                                          const EdgeInsets.only(
                                                              left: 5,
                                                              right: 5,
                                                              top: 2,
                                                              bottom: 2),
                                                      margin:
                                                          const EdgeInsets.only(
                                                              top: 3),
                                                      decoration: BoxDecoration(
                                                          color: const Color(
                                                              0x30FC8B8B),
                                                          borderRadius:
                                                              BorderRadius
                                                                  .circular(
                                                                      50)),
                                                      child: Row(
                                                        children: [
                                                          Container(
                                                            margin:
                                                                const EdgeInsets
                                                                        .only(
                                                                    right: 3),
                                                            width: 11,
                                                            height: 11,
                                                            child: ImageUtile
                                                                .imageWidget(
                                                                    "assets/images/icon_direct_seeding_charm_love.png"),
                                                          ),
                                                          Text(
                                                            '${getCharmLevel()}',
                                                            style: const TextStyle(
                                                                color: Color(
                                                                    0xFFFB5E80),
                                                                fontSize: 12),
                                                          )
                                                        ],
                                                      ),
                                                    ),
                                                  ],
                                                ),
                                              ),
                                            ],
                                          ),
                                        ),
                                        Container(
                                          margin:
                                              const EdgeInsets.only(bottom: 25),
                                          child: Image(
                                              image: const AssetImage(
                                                  'assets/images/icon_direct_seeding_charm.png'),
                                              gaplessPlayback: true,
                                              height: 65.r),
                                        ),
                                      ],
                                    ),
                                  ),
                                ],
                              ),
                              showFocus() == true
                                  ? GestureDetector(
                                      onTap: () {
                                        addDeleteFriend(true,
                                            '${widget.directUserDetailModel?.userId ?? 0}');
                                        showFocusButton = false;
                                        mySetState(() {});
                                      },
                                      child: Container(
                                          height: 47,
                                          width: 221,
                                          margin:
                                              const EdgeInsets.only(bottom: 20),
                                          alignment: Alignment.center,
                                          decoration: const BoxDecoration(
                                              image: DecorationImage(
                                            image: AssetImage(
                                                'assets/images/bg_direct_focus.png'),
                                            fit: BoxFit.fill, // 完全填充
                                          )),
                                          child: ContentTextBlod(
                                              S.current.track,
                                              16.0,
                                              Colors.white,
                                              FontWeight.w800)),
                                    )
                                  : Container(),
                            ],
                          ),
                        ),
                      ),
                    ),
                    Positioned(
                      top: -39,
                      child: GestureDetector(
                        onTap: () {
                          MyRouter.pushMyMap(
                              context, MyRouter.friendFilesPage, {
                            'isContainer': false,
                            'userID':
                                '${widget.directUserDetailModel?.userId ?? 0}',
                          });
                        },
                        child: Avatar(
                            avatarUrl: '${getAvatar()}',
                            width: 78,
                            height: 78,
                            radius: 45,
                            isTap: false),
                      ),
                    )
                  ],
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

///显示用户详情信息,点击主播头像是1,其他是2
showDirectUserDetailDialog(context, int source,
    {DirectUserDetailModel? directUserDetailModel, bool? hasFocusAnchor}) {
  showModalBottomSheet(
      shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.only(
              topLeft: Radius.circular(24), topRight: Radius.circular(24))),
      isScrollControlled: true,
      enableDrag: false,
      barrierColor: Colors.transparent,
      backgroundColor: Colors.transparent,
      context: context,
      builder: (context) => DirectUserDetail(
          directUserDetailModel: directUserDetailModel,
          source: source,
          hasFocusAnchor: hasFocusAnchor));
}

class DirectUserDetailModel {
  int? userId;
  String? avatar;
  String? nickName;
  int? sex;
  int? age;
  bool? isVip;
  int? wealthLevel;
  int? wealthValue;
  int? charmLevel;
  int? charmValue;

  DirectUserDetailModel(
      {this.userId,
      this.avatar,
      this.nickName,
      this.sex,
      this.age,
      this.isVip,
      this.wealthLevel,
      this.wealthValue,
      this.charmLevel,
      this.charmValue});
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter Stack超出底图范围后,关闭按键点击效果失效 的相关文章

随机推荐

  • git删除创建的项目

    一 在当前项目首页找到 setting选项 二 点击Setting gt Advanced settings gt Expand 三 翻到最后 找到Remove project 点击删除
  • Unity Pico XR开发之打包测试(二)

    之前说了有几个Demo场景 上一篇文章 传送门 就从 VR Examples 开始说起 1 Grab Interaction 抓取互动 演示如何用监听手柄输入事件抓取场景内的Box 2 Initial Tracking 头戴显示器设备跟踪
  • 使用百度定位无法初始化问题

    The location function has been stopped because you do not agree with the privacy compliance policy Please recheck the se
  • jQuery easyui创建组件的三种方式

    以创建layout布局为例子 一 通过html配合data options属性创建一个属性
  • 进制哈希(自然溢出)

    进制哈希 自然溢出 计算单个字符串哈希值 typedef unsigned long long ull ull strhash string s ull H 0 P 131 for char c s H H P c return H 计算字
  • 图像分割coil-20_Coil Kotlin Android的默认图像加载器

    图像分割coil 20 介绍 Introduction A well developed language has a number of supporting libraries that make the life of a devel
  • 3.Docker容器学习之基础简单使用

    文章目录 0x00 Docker进阶补充 0 镜像与容器 1 数据管理 2 高级网络配置 0x01 搭建私有仓库 0x02 Dockerfile基础学习 0x03 Docker Compose编排 1 安装与配置 2 命令一览 3 模板文件
  • 百度地图TILE算法

    Creating primary keyvar LLBAND2 75 60 45 30 15 0 var LL2MC2 0015702102444 111320 7020616939 0x60e374c3105a3 0x24bb4115e2
  • Java ArrayList Class

    In this tutorial we will learn about the Java ArrayList class We will learn about different ArrayList operations and met
  • (Jquery功能篇) jquery 插件fancybox查看图片原图

    效果截图 fancybox相关介绍 1 可以支持图片 html文本 flash动画 iframe以及ajax的支持 2 可以自定义播放器的CSS样式 3 可以以组的形式进行播放 4 如果将鼠标滚动插件 mouse wheel plugin
  • ubuntu中.conf 文件的修改与保存

    命令行下输入 sudo vim etc 文件名 conf 进入编辑模式 按 i 键进入编辑模式 此时可以修改文本 按 esc 键 此时退出修改文本 输入 wq 保存退出
  • 自动

    合约地址 https remix ethereum org 代码地址 https pst klgrth io paste ptwko raw 注意 50行代码token值替换成自己的钱包地址 最少要用 3 个BNB 不然是抢不到的 代码 p
  • WPF DataGrid控制DataGridTextColumn的IsReadOnly属性问题

    DataGridTextColumn这个控件不是一个真正的Visual所以IsReadOnly的属性绑定没用 如果绑定为
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——The Planets:Venus

    Vulnhub靶机The Planets Venus渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 SSH登入 CVE 2021 4034漏洞提权 获取FLAG 缓
  • SylixOS电源管理概述以及接口介绍

    1 概述 电源管理是操作系统中重要的一部分 要实现电源管理功能 首先需要设备本身支持电源管理操作 其次是操作系统支持电源管理操作 SylixOS支持电源管理功能 电源管理分为两大部分 CPU功耗管理和外设功耗管理 1 1 CPU功耗管理 S
  • power query 如何实现group_concat功能

    power query 分组合并展示 网上答案 https www cnblogs com wsmwsm p 12910590 html 答案 用powerquery 第一步 从表格进入pq界面 第二步 将kid2name列和id列都转换成
  • redis:redis cluster集群实践

    redis集群参数配置 我们后面会部署一个Redis集群作为例子 在那之前 先介绍一下集群在redis conf中的参数 cluster enabled
  • python编译报错 ImportError: cannot import name ‘jaccard_similarity_score‘

    报错如下 问题代码 import numpy as np from sklearn metrics import jaccard similarity score y pred 0 2 1 3 y true 0 1 2 3 print ja
  • 认识传输层(UDP与TCP)

    传输层主要负责数据能够从发送端发送到接收端 要正确传输就要明确发送端和接收端 这时候IP地址和端口号一起就可以确定一端了 那么他们是怎么唯一标识的呢 1 端口号 port 端口号唯一标识一个主机上进行通信的不同应用程序 在TCP IP协议中
  • flutter Stack超出底图范围后,关闭按键点击效果失效

    既然是关闭按键超出了底图范围导致不能点击 那就让关闭按键不超出就可以了 可以给底图再添加一个大点的底图 这两个底图作为一个整体 关闭按键就可以点击了 如图 下面添加了一个黑色的底图用来扩充原来的底图范围 白色关闭按键就可以点击得到了 ret