gstory0404 / flutter_unionad

字节跳动 穿山甲广告SDK Bytedance-UnionAD flutter版本插件
Apache License 2.0
303 stars 59 forks source link

直接使用demo 内信息流广告 放在ListView.builder内滑动列表非常卡顿 #74

Closed Cedar1012 closed 1 year ago

Cedar1012 commented 1 year ago

ListView.builder( itemCount: 40, itemBuilder: (c, i) => item(), )

void item() => FlutterUnionad.nativeAdView( //android 信息流广告id 必填 androidCodeId: "945417699", //ios banner广告id 必填 iosCodeId: "945417699", //是否支持 DeepLink 选填 supportDeepLink: true, // 期望view 宽度 dp 必填 expressViewWidth: 375.5, //期望view高度 dp 必填 expressViewHeight: 0, //一次请求广告数量 大于1小于3 必填 expressNum: 2, mIsExpress: true, //控制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, //是否启用点击 仅ios生效 默认启用 isUserInteractionEnabled: true, //用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载, adLoadType: FlutterUnionadLoadType.LOAD, callBack: FlutterUnionadNativeCallBack( onShow: () { print("信息流广告显示"); }, onFail: (error) { print("信息流广告失败 $error"); }, onDislike: (message) { print("信息流广告不感兴趣 $message"); }, onClick: () { print("信息流广告点击"); }, ), ), //个性化模板信息

类似这样。滑动列表是。广告一直抖动

gstory0404 commented 1 year ago

在flutter中插入原生view本身就比较耗性能,推荐不要在大列表中插入大量广告

Cedar1012 commented 1 year ago

在flutter中插入原生view本身就比较耗性能,推荐不要在大列表中插入大量广告

也没有很多。列表一页20条。一页中有两条信息流广告 页很卡, 而且IOS 是按下触发广告 如何才能改成onTap 这种形式

gstory0404 commented 1 year ago

@Cedar1012 抖动的话 可以尝试设置expressViewHeight为广告实际高度接近的数值(示例demo设置的是0),因为这里在广告加载完成后会根据SDK实际广告实际尺寸来重新渲染flutter widget的宽高,解决flutter中设置的宽高与SDK实际渲染出广告宽高不一致导致留白问题

//显示广告
      case FlutterUnionadMethod.onShow:
        Map map = call.arguments;
        if (mounted) {
          setState(() {
            _isShowAd = true;
            _width = (map["width"]).toDouble();
            _height = (map["height"]).toDouble();
          });
        }
        widget.callBack?.onShow!();
        break;
Cedar1012 commented 1 year ago

@Cedar1012 抖动的话 可以尝试设置expressViewHeight为广告实际高度接近的数值(示例demo设置的是0),因为这里在广告加载完成后会根据SDK实际广告实际尺寸来重新渲染flutter widget的宽高,解决flutter中设置的宽高与SDK实际渲染出广告宽高不一致导致留白问题

//显示广告
      case FlutterUnionadMethod.onShow:
        Map map = call.arguments;
        if (mounted) {
          setState(() {
            _isShowAd = true;
            _width = (map["width"]).toDouble();
            _height = (map["height"]).toDouble();
          });
        }
        widget.callBack?.onShow!();
        break;

非常感谢 我去尝试一下