Android 颤振中的Ads重叠底部导航
我在颤振中设置了横幅广告,这些广告与底部导航栏重叠 我想在底部的导航栏下面显示广告 有没有办法在底部导航栏下方添加边距 我已经在home.dart(主页)上发布了广告 导入“包:provider/provider.dart”; 导入“../ui/widgets/bottom_nav_bar.dart”; 导入“../core/utils/theme.dart”; 导入“search_page.dart”; 导入“category.dart”; 导入“main_page.dart”; 导入“settings.dart”; 进口“包装:颤振/材料.省道”; 导入“包:firebase_admob/firebase_admob.dart”; 导入“给你的飞镖”; 常量字符串AD_MOB_APP_ID='ca-APP-pub-3940256099942544~3347517113'; const String AD_MOB_TEST_DEVICE='dec3010b244516b43eb949f5d97d0f8-运行AD,然后检查设备日志中的值'; 常量字符串AD_MOB_AD_ID='ca-app-pub-3940256099942544/630978111'; 类主页扩展了StatefulWidget{ @凌驾 _HomePageState createState()=>\u HomePageState(); } 类_HomePageState扩展状态{ 班纳拉德(BannerAd);; 静态最终MobileAdTargetingInfo targetingInfo=新MobileAdTargetingInfo( testDevices:[广告移动测试设备], ); BannerAd createBannerAd(){ 返回新的横幅( adUnitId:AD_MOB_AD_ID, 大小:AdSize.banner, targetingInfo:targetingInfo, ); } 最终GlobalKey _scaffoldKey=新的GlobalKey(); int _selectedIndex=0; final PageController_PageController=PageController(); @凌驾 void initState(){ super.initState(); } @凌驾 无效处置(){ super.dispose(); _pageController.dispose(); } @凌驾 小部件构建(构建上下文){ final stateData=Provider.of(上下文); 最终主题数据状态=stateData.getTheme(); FirebaseAdMob.instance.initialize(appId:AD\u MOB\u APP\u ID); _bannerAd=createBannerAd()…load()…show(); 返回脚手架( 钥匙:_scaffoldKey, appBar:appBar( 标题:错误, 背景颜色:state.primaryColor, 海拔:0, 标题:正文( “RevWalls”, 样式:state.textTheme.headline, ), 行动:[ 图标按钮( 图标:图标( Icons.search, 颜色:state.textTheme.body1.color, ), onPressed:()=>showSearch( 上下文:上下文,委托:墙纸搜索(主题数据:状态)), ) ], ), 主体:容器( 颜色:state.primaryColor, 子:页面视图( 控制器:_pageController, 物理:弹跳CrollPhysics(), onPageChanged:(索引){ 设置状态(){ _selectedIndex=索引; }); }, 儿童:[ 主体(), 类别(), 为你(), setingspage(), ], ), ), 底部导航栏:底部导航栏( selectedIndex:\u selectedIndex, 未选择的颜色:state.textTheme.body1.color, 已选择:(索引){ _pageController.jumpToPage(索引); }, selectedColor:state.accentColor, 背景颜色:state.primaryColor, showElevation:false, 项目:[ 下鼻甲( 图标:图标(Icons.home), 标题:文本(“主页”), ), 下鼻甲( 图标:图标(图标.类别), 标题:文本(“子标题”), ), 下鼻甲( 图标:图标(Icons.phone_android), 标题:文本(“精确匹配”), ), 下鼻甲( 图标:图标(图标.设置), 标题:文本(“设置”), ), ], ), ); } 小部件旧体(主题数据状态){ 返回嵌套滚动视图( headerSliverBuilder:(BuildContext上下文,bool-boxisscrowled){ 返回[ 滑杆( 背景颜色:state.primaryColor, 标高:4, 标题:正文( “重播”, 样式:state.textTheme.headline, ), 行动:[ 图标按钮( 图标:图标(Icons.search,颜色:state.accentColor), 已按下:(){ showSearch( 上下文:上下文, 代表:壁纸搜索(主题数据:状态)); }, ) ], 浮动:是的, 固定:_selectedIndex==0?false:true, 快照:错, 标题:错误, ), ]; }, 主体:容器( 颜色:state.primaryColor, 子:页面视图( 控制器:_pageController, onPageChanged:(索引){ 设置状态(){ _selectedIndex=索引; }); }, 儿童:[ 主体(), 类别(), 为你(), setingspage(), ], ), ), ); } } 下面是底部的导航栏-Android 颤振中的Ads重叠底部导航,android,flutter,dart,admob,Android,Flutter,Dart,Admob,我在颤振中设置了横幅广告,这些广告与底部导航栏重叠 我想在底部的导航栏下面显示广告 有没有办法在底部导航栏下方添加边距 我已经在home.dart(主页)上发布了广告 导入“包:provider/provider.dart”; 导入“../ui/widgets/bottom_nav_bar.dart”; 导入“../core/utils/theme.dart”; 导入“search_page.dart”; 导入“category.dart”; 导入“main_page.dart”; 导入“se
library bottom_navy_bar;
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class BottomNavyBar extends StatelessWidget {
final int selectedIndex;
final double iconSize;
final Color backgroundColor, selectedColor, unselectedColor;
final bool showElevation;
final Duration animationDuration;
final List<BottomNavyBarItem> items;
final ValueChanged<int> onItemSelected;
BottomNavyBar(
{Key key,
this.selectedIndex = 0,
this.showElevation = true,
this.iconSize = 20,
this.backgroundColor,
this.selectedColor,
this.unselectedColor,
this.animationDuration = const Duration(milliseconds: 250),
@required this.items,
@required this.onItemSelected}) {
assert(items != null);
assert(items.length >= 2 && items.length <= 5);
assert(onItemSelected != null);
}
Widget _buildItem(BottomNavyBarItem item, bool isSelected) {
return AnimatedContainer(
width: isSelected ? 120 : 50,
height: double.maxFinite,
duration: animationDuration,
decoration: BoxDecoration(
color: isSelected ? selectedColor.withOpacity(0.2) : backgroundColor,
borderRadius: BorderRadius.all(Radius.circular(100.0)),
),
alignment: Alignment.center,
child: ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
scrollDirection: Axis.horizontal,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 8),
child: IconTheme(
data: IconThemeData(
size: iconSize,
color: isSelected ? selectedColor : unselectedColor),
child: item.icon,
),
),
isSelected
? DefaultTextStyle.merge(
style: TextStyle(
fontSize: 16,
color: selectedColor,
fontWeight: FontWeight.bold),
child: item.title,
)
: SizedBox.shrink()
],
)
],
),
);
}
@override
Widget build(BuildContext context) {
return Container(
color: backgroundColor,
child: Container(
width: double.infinity,
height: 55,
padding: EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: items.map((item) {
var index = items.indexOf(item);
return GestureDetector(
onTap: () {
onItemSelected(index);
},
child: _buildItem(item, selectedIndex == index),
);
}).toList(),
),
),
);
}
}
class BottomNavyBarItem {
final Icon icon;
final Text title;
BottomNavyBarItem({
@required this.icon,
@required this.title,
}) {
assert(icon != null);
assert(title != null);
}
}
库底部\u海军\u栏;
进口“包装:颤振/材料.省道”;
导入“package:flatter/widgets.dart”;
类BottomNavyBar扩展了无状态小部件{
最终整数选择指数;
最终的双重认知;
最终颜色背景色、选定颜色、未选定颜色;
最终bool-show高程;
最终持续时间动画持续时间;
最后清单项目;
已选择最终值;
底部导航杆(
{键,
此.selectedIndex=0,
this.showElevation=true,
this.iconSize=20,
这个背景色,
这是我选择的颜色,
这是未选择的颜色,
this.animationDuration=常量持续时间(毫秒:250),
@需要此项,
@需要此选项(已选择}){
断言(项!=null);
assert(items.length>=2&&items.length您可以使用MediaQuery.of(contex
library bottom_navy_bar;
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class BottomNavyBar extends StatelessWidget {
final int selectedIndex;
final double iconSize;
final Color backgroundColor, selectedColor, unselectedColor;
final bool showElevation;
final Duration animationDuration;
final List<BottomNavyBarItem> items;
final ValueChanged<int> onItemSelected;
BottomNavyBar(
{Key key,
this.selectedIndex = 0,
this.showElevation = true,
this.iconSize = 20,
this.backgroundColor,
this.selectedColor,
this.unselectedColor,
this.animationDuration = const Duration(milliseconds: 250),
@required this.items,
@required this.onItemSelected}) {
assert(items != null);
assert(items.length >= 2 && items.length <= 5);
assert(onItemSelected != null);
}
Widget _buildItem(BottomNavyBarItem item, bool isSelected) {
return AnimatedContainer(
width: isSelected ? 120 : 50,
height: double.maxFinite,
duration: animationDuration,
decoration: BoxDecoration(
color: isSelected ? selectedColor.withOpacity(0.2) : backgroundColor,
borderRadius: BorderRadius.all(Radius.circular(100.0)),
),
alignment: Alignment.center,
child: ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
scrollDirection: Axis.horizontal,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 8),
child: IconTheme(
data: IconThemeData(
size: iconSize,
color: isSelected ? selectedColor : unselectedColor),
child: item.icon,
),
),
isSelected
? DefaultTextStyle.merge(
style: TextStyle(
fontSize: 16,
color: selectedColor,
fontWeight: FontWeight.bold),
child: item.title,
)
: SizedBox.shrink()
],
)
],
),
);
}
@override
Widget build(BuildContext context) {
return Container(
color: backgroundColor,
child: Container(
width: double.infinity,
height: 55,
padding: EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: items.map((item) {
var index = items.indexOf(item);
return GestureDetector(
onTap: () {
onItemSelected(index);
},
child: _buildItem(item, selectedIndex == index),
);
}).toList(),
),
),
);
}
}
class BottomNavyBarItem {
final Icon icon;
final Text title;
BottomNavyBarItem({
@required this.icon,
@required this.title,
}) {
assert(icon != null);
assert(title != null);
}
}
Column(
children: [
Container(
height: MediaQuery.of(context).size.height - 60,
child: HomePage(),
),
BannerAd(),
]
);
margin: const EdgeInsets.only(bottom: 50)
var paddingBottom = 60.0;
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
//
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'World General info',
//theme: ThemeData(primarySwatch: Colors.cyan,),
theme: ThemeData(
primaryColor: Colors.cyan,
accentColor: Colors.green,
textTheme: TextTheme(bodyText2: TextStyle(color: Colors.purple)),
),
home: MyHomePage(title: 'World General Info'),
builder: (BuildContext context, Widget child) {
return new Padding(
child: child,
padding: EdgeInsets.only(bottom: paddingBottom),
);
}
);
}
}
bottomNavigationBar: Container(
height: 50.0,
color: Colors.white,
),