yf_ads 0.4.0 copy "yf_ads: ^0.4.0" to clipboard
yf_ads: ^0.4.0 copied to clipboard

A new Flutter ads project.

example/lib/main.dart

import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:yf_ads/bean/yf_ads_init_sdk_android_bean.dart';
import 'package:yf_ads/bean/yf_ads_init_sdk_ios_bean.dart';
import 'package:yf_ads/bean/yf_ads_interaction_bean.dart';
import 'package:yf_ads/bean/yf_ads_reward_video_bean.dart';
import 'package:yf_ads/bean/yf_ads_splash_bean.dart';
import 'package:yf_ads/bean/yf_ads_top_push_bean.dart';
import 'package:yf_ads/callbacks/yf_ads_callback.dart';
import 'package:yf_ads/callbacks/yf_ads_reward_video_callback.dart';
import 'package:yf_ads/managers/yf_interstitial.dart';
import 'package:yf_ads/managers/yf_rewarded.dart';
import 'package:yf_ads/managers/yf_splash.dart';
import 'package:yf_ads/managers/yf_top_push.dart';
import 'package:yf_ads/yf_ads.dart';
import 'package:yf_ads_example/yf_ads_request_fusion_banner_list_view.dart';
import 'package:yf_ads_example/yf_ads_request_fusion_banner_view.dart';

import 'yf_ads_request_banner_list_view.dart';
import 'yf_ads_request_banner_view.dart';
import 'yf_ads_request_express_feed_list_view.dart';
import 'yf_ads_request_express_feed_view.dart';
import 'yf_ads_request_native_draw_feed_video_view.dart';
import 'yf_ads_request_stream_view.dart';
import 'yf_ads_reward_video_extra_bean.dart';

void main() {
  runApp(const MaterialApp(
    debugShowCheckedModeBanner: false,
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  var reaperFlutterPlugin;
  int _currentIndex = 0;
  bool _pageAbsorbing = false;

  // 使用三目运算符来判断平台并设置 ScrollPhysics
  ScrollPhysics pagePhysics = defaultTargetPlatform == TargetPlatform.android
      ? ClampingScrollPhysics()
      : BouncingScrollPhysics();

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    reaperFlutterPlugin = YFAds.instance;
    initReaperSdk();
    loadColdSplashAd(true);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    if (state == AppLifecycleState.resumed) {
      print("切换到了前台");
    } else if (state == AppLifecycleState.paused) {
      print("切换到了后台");
    }
  }

  @override
  void dispose() {
    print("dispose");
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  Future<void> initReaperSdk() async {
    var reaperInitSdkBaseBean;
    if (Platform.isAndroid) {
      const RELEASE_APP_ID = "24f8e0ba-697e-4ee5-b4fb-30cc1c9f2031";
      const RELEASE_APP_KEY = "24f8e0ba-697e-4ee5-b4fb-30cc1c9f2031";
      reaperInitSdkBaseBean = const YFAdsInitSDKAndroidBean(
          appId: RELEASE_APP_ID,
          appKey: RELEASE_APP_KEY,
          ext1: "ccc",
          ext2: "ddd",
          u1: 'userId',
          enableLog: true,
          envTest: true);
    } else if (Platform.isIOS) {
      const RELEASE_APP_ID = "c5074e30-2310-4bf3-958a-5c933f029f4c";
      const RELEASE_APP_KEY = "c5074e30-2310-4bf3-958a-5c933f029f4c";
      reaperInitSdkBaseBean = const YFAdsInitSDKIOSBean(
          // ext1: "c1",
          // ext2: "c2",
          u1: 'userId',
          enableLog: true,
          enableLocation: false,
          appId: RELEASE_APP_ID,
          appKey: RELEASE_APP_KEY);
    }
    await reaperFlutterPlugin.initAdsSDK(reaperInitSdkBaseBean);
  }

  Future<void> onlyLoadSplashAd() async {
    loadSplashAd(false);
  }

  Future<void> loadColdSplashAd(var loadAndShow) async {
    var positionId;
    if (Platform.isAndroid) {
      positionId = "da54a0c6-62b0-4756-a975-a1bd122b4d61";
    } else if (Platform.isIOS) {
      positionId = "c224595375934c0a89702e43a3eaea6b";
    }
    var reaperSplashBean = YFAdsSplashBean(
        tag: "Splash",
        positionId: positionId,
        loadAndShow: loadAndShow,
        callBack: splashAdCallBack);
    await YFSplashManager.loadSplashAd(reaperSplashBean);
  }

  Future<void> loadSplashAd(var loadAndShow) async {
    var positionId;
    if (Platform.isAndroid) {
      positionId = "da54a0c6-62b0-4756-a975-a1bd122b4d61";
    } else if (Platform.isIOS) {
      positionId = "0bbcfd82-779d-4ff8-9a38-781b31c5ab61";
    }
    var reaperSplashBean = YFAdsSplashBean(
        tag: "Splash",
        positionId: positionId,
        loadAndShow: loadAndShow,
        callBack: splashAdCallBack);
    await YFSplashManager.loadSplashAd(reaperSplashBean);
  }

  Future<void> showSplashAd() async {
    await YFSplashManager.showSplashAd();
  }

  Future<void> loadInsertAd() async {
    var positionId;
    if (Platform.isAndroid) {
      positionId = "503e92d8-2e2a-472c-b045-0f0f0282830c";
    } else if (Platform.isIOS) {
      positionId = "963a6e18-6a5d-486a-9407-225f6c4d3f24";
    }
    var reaperInsertBean = YFAdsInteractionBean(
        tag: "custom",
        positionId: positionId,
        loadAndShow: false,
        callBack: insertAdCallBack);

    await YFInterstitialManager.loadInterstitialAd(reaperInsertBean);
  }

  Future<void> showInsertAd() async {
    await YFInterstitialManager.showInterstitialAd();
  }

  Future<void> loadTopPushAd() async {
    var positionId;
    if (Platform.isAndroid) {
      positionId = "6b7aa0c456f04484aeca4ffa61638554";
    } else if (Platform.isIOS) {
      positionId = "9df2a82c19d54889b987efa767b551d3";
    }
    var reaperTopPushBean = YFAdsTopPushBean(
        tag: "topPush",
        positionId: positionId,
        loadAndShow: false,
        callBack: topPushAdCallBack);

    await YFTopPushManager.loadTopPushAd(reaperTopPushBean);
  }

  Future<void> showTopPushAd() async {
    await YFTopPushManager.showTopPushAd();
  }

  void insertAdCallBack(YFAdsCallBack data) {
    print("insertAdCallBack:${data.method} ${data.tag}");
    if (defaultTargetPlatform == TargetPlatform.android) {
      if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
        Fluttertoast.showToast(
            msg: "加载成功,AdnID:${data.adnID},RID:${data.rid}",
            toastLength: Toast.LENGTH_SHORT);
      } else if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SHOW_SUCCESS) {
        Fluttertoast.showToast(
            msg: "曝光成功,AdnID:${data.adnID},RID:${data.rid}, ECPM:${data.ecpm}",
            toastLength: Toast.LENGTH_SHORT);
      }
    }
    if (defaultTargetPlatform == TargetPlatform.iOS) {
      switch (data.method) {
        case 'yfInterstitialAdDidLoad':
          Fluttertoast.showToast(
              msg: "插屏加载成功,AdnID:${data.adnID},RID:${data.rid}",
              toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfInterstitialAdLoadFail':
          {
            if (defaultTargetPlatform == TargetPlatform.iOS) {
              setState(() {
                _pageAbsorbing = false;
              });
            }
            Fluttertoast.showToast(
                msg: "插屏加载失败", toastLength: Toast.LENGTH_SHORT);
          }
          break;
        case 'yfInterstitialAdDidClick':
          Fluttertoast.showToast(
              msg: "插屏广告点击", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfInterstitialAdDidExposure':
          {
            if (Platform.isIOS) {
              setState(() {
                _pageAbsorbing = true;
              });
            }
            Fluttertoast.showToast(
                msg: "插屏广告曝光", toastLength: Toast.LENGTH_SHORT);
            setState(() {
              pagePhysics = NeverScrollableScrollPhysics();
            });
          }
          break;
        case 'yfInterstitialAdDidClose':
          {
            if (defaultTargetPlatform == TargetPlatform.iOS) {
              setState(() {
                _pageAbsorbing = false;
              });
            }
            Fluttertoast.showToast(
                msg: "插屏广告关闭", toastLength: Toast.LENGTH_SHORT);
            setState(() {
              pagePhysics = defaultTargetPlatform == TargetPlatform.android
                  ? ClampingScrollPhysics()
                  : BouncingScrollPhysics();
            });
          }
          break;
        default:
      }
    }
  }

  void topPushAdCallBack(YFAdsCallBack data) {
    print("topPushAdCallBack:${data.method} ${data.tag}");
    if (defaultTargetPlatform == TargetPlatform.android) {
      if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
        Fluttertoast.showToast(
            msg: "加载成功,AdnID:${data.adnID},RID:${data.rid}",
            toastLength: Toast.LENGTH_SHORT);
      } else if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SHOW_SUCCESS) {
        Fluttertoast.showToast(
            msg: "曝光成功,AdnID:${data.adnID},RID:${data.rid}, ECPM:${data.ecpm}",
            toastLength: Toast.LENGTH_SHORT);
      }
    }
    if (defaultTargetPlatform == TargetPlatform.iOS) {
      switch (data.method) {
        case 'yfTopPushAdDidLoad':
          Fluttertoast.showToast(
              msg: "顶推广告加载成功", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfTopPushAdLoadFail':
          Fluttertoast.showToast(
              msg: "顶推广告加载失败", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfTopPushAdRenderSuccess':
          Fluttertoast.showToast(

              /// 顶推广告渲染成功,建议在此回调后展示
              msg: "顶推广告渲染成功,建议在此回调后展示,AdnID:${data.adnID},RID:${data.rid}",
              toastLength: Toast.LENGTH_SHORT);
          break;

        case 'yfTopPushAdRenderFail':
          Fluttertoast.showToast(
              msg: "顶推广告渲染失败", toastLength: Toast.LENGTH_SHORT);
          break;

        case 'yfTopPushAdDidExposure':
          Fluttertoast.showToast(
              msg: "顶推广告曝光", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfTopPushAdDidClose':
          Fluttertoast.showToast(
              msg: "顶推广告关闭", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfTopPushAdDetailPageClose':
          Fluttertoast.showToast(
              msg: "顶推广告落地页关闭", toastLength: Toast.LENGTH_SHORT);
          break;
        default:
          Fluttertoast.showToast(
              msg: "${data.method}", toastLength: Toast.LENGTH_SHORT);
          break;
      }
    }
  }

  void splashAdCallBack(YFAdsCallBack data) {
    print("splashAdCallBack:${data.method} ${data.tag}");
    if (defaultTargetPlatform == TargetPlatform.android) {
      if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
        Fluttertoast.showToast(
            msg: "加载成功,AdnID:${data.adnID},RID:${data.rid}",
            toastLength: Toast.LENGTH_SHORT);
      } else if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SHOW_SUCCESS) {
        Fluttertoast.showToast(
            msg: "曝光成功,AdnID:${data.adnID},RID:${data.rid}, ECPM:${data.ecpm}",
            toastLength: Toast.LENGTH_SHORT);
      }
    }
    if (defaultTargetPlatform == TargetPlatform.iOS) {
      switch (data.method) {
        case 'yfSplashAdDidLoad':
          Fluttertoast.showToast(
              msg: "开屏广告加载成功,AdnID:${data.adnID},RID:${data.rid}",
              toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfSplashAdExpose':
          {
            if (Platform.isIOS) {
              setState(() {
                _pageAbsorbing = true;
              });
            }
            Fluttertoast.showToast(
                msg: "开屏广告曝光成功", toastLength: Toast.LENGTH_SHORT);
          }
          break;
        case 'yfSplashAdLoadFail':
          {
            if (defaultTargetPlatform == TargetPlatform.iOS) {
              setState(() {
                _pageAbsorbing = false;
              });
            }
            Fluttertoast.showToast(
                msg: "开屏广告加载失败", toastLength: Toast.LENGTH_SHORT);
          }
          break;
        case 'yfSplashAdDidClick':
          Fluttertoast.showToast(
              msg: "开屏广告点击", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfSplashAdDidClose':
          {
            if (defaultTargetPlatform == TargetPlatform.iOS) {
              setState(() {
                _pageAbsorbing = false;
              });
            }
            Fluttertoast.showToast(
                msg: "开屏广告关闭", toastLength: Toast.LENGTH_SHORT);
          }
          break;
        default:
      }
    }
  }

  Future<void> loadRewardVideoAd() async {
    var reaperRewardVideoBean;
    var positionId;
    if (Platform.isAndroid) {
      positionId = "e46b3594-f3db-4f8d-b602-ec429bb37fd2";
    } else if (Platform.isIOS) {
      positionId = "ea3c1722-1f76-4e06-85ed-47004a950201";
    }

    ///object will send to your server to verify reward
    ///adCode means position id which will be replaced with real position id in reaper sdk,and should be fixed with %%POS_ID%%
    ///adSrc means ad source which will be replaced with real ad source in reaper sdk,and should be fixed with %%AD_SRC%%
    ///other parameters can be defined dynamic by yourself.
    var reaperRewardVideoExtraBean = const YFAdsRewardVideoExtraBean(
        uid: "1156642",
        rewardVideoType: 2,
        taskId: "70",
        taskAction: "rewardVideo4energy",
        version: "3.42.0_debug",
        adCode: "%%POS_ID%%",
        adSrc: "%%AD_SRC%%",
        orientation: 1);
    var extra = jsonEncode(reaperRewardVideoExtraBean);
    reaperRewardVideoBean = YFAdsRewardVideoBean(
        positionId: positionId,
        loadAndShow: false,
        extra: extra,
        callBack: rewardVideoAdCallBack);
    await YFRewardManager.loadRewardAd(reaperRewardVideoBean);
  }

  Future<void> showRewardVideoAd() async {
    await YFRewardManager.showRewardAd();
  }

  void rewardVideoAdCallBack(YFAdsRewardVideoCallBack data) {
    print("rewardVideoAdCallBack: ${data.method!}");

    if (data.method == YFAdsRewardVideoCallBack.YF_ADS_ON_REWARD_VERIFY) {
      print("rewardVideoAdCallBack "
          "rewardName is ${data.rewardName},"
          "rewardVerify is ${data.rewardVerify}");
    }
    if (defaultTargetPlatform == TargetPlatform.android) {
      if (data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
        Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
      } else if (data.method == YFAdsCallBack.YF_ADS_REWARD_VIDEO_CACHE) {
        Fluttertoast.showToast(
            msg: "激励视频缓存成功,AdnID:${data.adnID},RID:${data.rid}",
            toastLength: Toast.LENGTH_SHORT);
      }
    }
    if (defaultTargetPlatform == TargetPlatform.iOS) {
      switch (data.method) {
        case 'yfRewardedVideoAdDidLoad':
          Fluttertoast.showToast(
              msg: "激励视频加载成功", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdDidLoad':
          Fluttertoast.showToast(
              msg: "激励视频缓存成功,AdnID:${data.adnID},RID:${data.rid}",
              toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdDidRewardEffective':
          Fluttertoast.showToast(
              msg: "激励视频到达激励时间", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdDidShow':
          Fluttertoast.showToast(
              msg: "激励视频曝光", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdDidClick':
          Fluttertoast.showToast(
              msg: "激励视频点击", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdLoadFail':
          Fluttertoast.showToast(
              msg: "激励视频加载失败", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdDidClose':
          Fluttertoast.showToast(
              msg: "激励视频关闭", toastLength: Toast.LENGTH_SHORT);
          break;
        case 'yfRewardedVideoAdDidPlayFinish':
          Fluttertoast.showToast(
              msg: "激励视频播放完成", toastLength: Toast.LENGTH_SHORT);
          break;
        default:
      }
    }
  }

  void showBannerView(BuildContext context) {
    print("banner view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsBannerViewDemo()),
    );
  }

  void showBannerListView(BuildContext context) {
    print("banner list view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsBannerListViewDemo()),
    );
  }

  void showFusionBannerView(BuildContext context) {
    print("fusion banner view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsFusionBannerViewDemo()),
    );
  }

  void showFusionBannerListView(BuildContext context) {
    print("fusion banner list view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsFusionBannerListViewDemo()),
    );
  }

  void showExpressFeedView(BuildContext context) {
    print("express feed view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsExpressFeedViewDemo()),
    );
  }

  void showExpressFeedListView(BuildContext context) {
    print("express feed list view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => ExpressFeedListViewDemo()),
    );
  }

  void showNativeDrawFeedVideoView(BuildContext context) {
    print("native draw feed video view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(
          builder: (context) => YFAdsNativeDrawFeedVideoViewDemo()),
    );
  }

  void showStreamView(BuildContext context) {
    print("stream view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsStreamViewDemo()),
    );
  }

  Future<void> getPermission(BuildContext context) async {
    var status = await Permission.notification.status;
    print(status);
    if (status == PermissionStatus.denied) {
      await Permission.notification
          .request()
          .then((PermissionStatus permissionStatus) {
        // 处理用户的选择
        if (permissionStatus.isDenied) {
          openAppSettings();
        }
      });
    } else if (status == PermissionStatus.permanentlyDenied) {
      openAppSettings();
    } else if (status == PermissionStatus.granted) {
      Fluttertoast.showToast(msg: "权限获取成功", toastLength: Toast.LENGTH_SHORT);
    }
  }

  @override
  Widget build(BuildContext context) {
    Widget getAdSource() {
      return Center(
          child: SingleChildScrollView(
        // physics: NeverScrollableScrollPhysics(), // 禁止滑动
        physics: pagePhysics, // 允许滑动

        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            // 添加SizedBox来留白
            SizedBox(height: 10), // 这里可以调整留白的高度
            Row(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: onlyLoadSplashAd,
                    child: const Text("Load开屏广告"),
                  ),
                  const SizedBox(width: 10), // 这里可以调整留白的高度
                  ElevatedButton(
                    onPressed: showSplashAd,
                    child: const Text("Show开屏广告"),
                  ),
                ]),
            Row(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: loadInsertAd,
                    child: const Text("Load插屏广告"),
                  ),
                  const SizedBox(width: 10), // 这里可以调整留白的高度
                  ElevatedButton(
                    onPressed: showInsertAd,
                    child: const Text("Show插屏广告"),
                  ),
                ]),
            Row(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: loadTopPushAd,
                    child: const Text("Load顶推广告"),
                  ),
                  const SizedBox(width: 10), // 这里可以调整留白的高度
                  ElevatedButton(
                    onPressed: showTopPushAd,
                    child: const Text("Show顶推广告"),
                  ),
                ]),
            Row(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: loadRewardVideoAd,
                    child: const Text("Load激励视频广告"),
                  ),
                  const SizedBox(width: 10), // 这里可以调整留白的高度
                  ElevatedButton(
                    onPressed: showRewardVideoAd,
                    child: const Text("Show激励视频广告"),
                  ),
                ]),
            ElevatedButton(
              onPressed: () {
                showFusionBannerView(context);
              },
              child: const Text("融合banner广告"),
            ),
            ElevatedButton(
              onPressed: () {
                showFusionBannerListView(context);
              },
              child: const Text("融合banner流列表广告"),
            ),
            ElevatedButton(
              onPressed: () {
                showNativeDrawFeedVideoView(context);
              },
              child: const Text("Draw视频广告"),
            ),
            ElevatedButton(
              onPressed: () {
                showStreamView(context);
              },
              child: const Text("贴片广告"),
            ),
            ElevatedButton(
              onPressed: () {
                getPermission(context);
              },
              child: const Text("获取通知栏权限"),
            ),
            ElevatedButton(
              onPressed: () {
                showBannerView(context);
              },
              child: const Text("Banner广告(不再维护)"),
            ),

            ElevatedButton(
              onPressed: () {
                showBannerListView(context);
              },
              child: const Text("Banner列表广告(不再维护)"),
            ),
            ElevatedButton(
              onPressed: () {
                showExpressFeedView(context);
              },
              child: const Text("信息流广告(不再维护)"),
            ),
            ElevatedButton(
              onPressed: () {
                showExpressFeedListView(context);
              },
              child: const Text("信息流列表广告(不再维护)"),
            ),
          ],
        ),
      ));
    }

    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text("YFAdsSDK插件"),
      ),
      body: AbsorbPointer(
        absorbing: _pageAbsorbing,
        child: Center(
          child: getAdSource(),
        ),
      ),
      bottomNavigationBar: BottomNavigationBar(
          fixedColor: Colors.red,
          //选中的颜色
          iconSize: 35,
          //设置item的大小
          type: BottomNavigationBarType.fixed,
          //如果底部有4个或者4个以上,就必须设置该属性
          currentIndex: _currentIndex,
          //当前选中的是第几个菜单
          onTap: (v) {
            setState(() {
              _currentIndex = v;
            });
          },
          items: const [
            BottomNavigationBarItem(icon: Icon(Icons.home), label: "首页"),
            BottomNavigationBarItem(icon: Icon(Icons.category), label: "分类"),
            BottomNavigationBarItem(icon: Icon(Icons.settings), label: "设置"),
          ]),
    ));
  }
}
1
likes
120
points
16
downloads

Publisher

verified publisheryfanads.cn

Weekly Downloads

A new Flutter ads project.

Homepage

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, plugin_platform_interface, video_player

More

Packages that depend on yf_ads

Packages that implement yf_ads