和大家一样,我花了一些时间寻找这个问题的最佳答案,在仔细分析代码后我找到了一个解决方案,我在下面分享它们,这是我工作的项目的一个片段,但它可以使用一般的
import 'package:app_example/floatingAction.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButtonLocation: FloatingActionButtonLocation.endTop,
floatingActionButton: FloatingAction(),
bottomNavigationBar: CupertinoTabScaffold(
tabBar: CupertinoTabBar(
activeColor: Colors.red,
inactiveColor: Colors.grey,
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.loyalty_outlined,
),
label: "Productos",
),
BottomNavigationBarItem(
icon: Icon(
Icons.people,
),
label: 'Clientes',
),
BottomNavigationBarItem(
icon: Icon(
Icons.shopping_cart_outlined,
),
label: 'Ventas',
),
BottomNavigationBarItem(
icon: Icon(
Icons.timeline,
),
label: "Historial",
),
]),
tabBuilder: (BuildContext contex, int index) {
switch (index) {
case 0:
return CupertinoTabView(
builder: (BuildContext context) => ProductScreen(),
);
break;
case 1:
return CupertinoTabView(
builder: (BuildContext context) => ClientScreen(),
);
break;
case 2:
return CupertinoTabView(
builder: (BuildContext context) => MarketScreen(),
);
break;
case 3:
return CupertinoTabView(
builder: (BuildContext context) => HistoryScreen(),
);
break;
}
return null;
}),
);
}
}
class FloatingAction extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
margin: EdgeInsets.only(bottom:70),
child: FloatingActionButton(
onPressed: () {
print('click en botton');
Navigator.of(context).push(
MaterialPageRoute(builder: (context) =>NewMarket()),
);
},
child: Icon(Icons.queue),
backgroundColor: Colors.red,
),
),
],
);
}
}
将 floatingActionButton 分离到一个独立的类中FloatingAction
,允许我们为小部件提供更多功能,在这种情况下,在 中 Column
,使用 amainAxisAlignment: MainAxisAlignment.end,
允许我们与小部件的底部对齐,使用floatingActionButtonLocation: FloatingActionButtonLocation.endTop,
, 允许我们有一个定义在屏幕边缘的位置,从这个意义上说,它只需要使用margin: EdgeInsets.only ( bottom: 70),
容器来定位按钮的首选高度
要使按钮居中,我们只需更改margin: EdgeInsets.only (bottom: 70, right: MediaQuery.of (context) .size.width / 2 - 45),
将bottom
指示高度、 right
参考中心的位置。
如果需要,在 a 中执行此过程Column
将允许我们在将来添加更多浮动按钮。
现在可以使用带有 CupertinoTapBar 的 floatingActionButton