flutter - 将 Tap/Pressed 事件传输到子小部件 Flutter
问题描述
我使用bottomNavigation,但我需要在其中的一页中有一个工厂。我的问题是我找不到将点击事件从 fab 传输到 bottomNavigation 页面(在本例中为 BlablaScreen)的解决方案。我不明白我是否必须使用 Function, VoiceCallBack ?显然我们不必在底部导航中使用很多脚手架,只需一个主脚手架。所以我必须在主脚手架中使用这个工厂,然后将事件从工厂传播到孩子。谢谢
我的代码:
class MainBoardState extends State<MainBoard> {
int _selectedIndex = 0;
bool fabTapped = false;
bool fabVisible = true;
//VoidCallback _fabTapped;
_setFabVisible(bool value){
setState(() {
fabVisible = value;
});
}
Widget getPage(int indexBottomNavigation){
switch(indexBottomNavigation){
case 0 :
return HomeScreen();
case 1:
return TotoScreen();
case 2:
return BlablaScreen(fabTapped:StringValue, fabVisible: _setFabVisible);
default:
return HomeScreen();
}
}
void _onItemTap(int index) {
setState(() {
_selectedIndex = index;
});
}
void handleClick(String value) {
switch (value) {
case 'Logout':
BlocProvider.of<AuthBloc>(context).logOut();
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => Login()));
break;
case 'Settings':
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
/** appBar: _selectedIndex == 0
? AppBar(
actions: [
PopupMenuButton<String>(
icon: Icon(Icons.person),
onSelected: handleClick,
itemBuilder: (BuildContext context) {
return {'Logout', 'Account'}.map((String choice) {
return PopupMenuItem<String>(
value: choice,
child: Text(choice),
);
}).toList();
},
),
],
)
: null,**/
floatingActionButton: _selectedIndex == 2 ? fabVisible ? FloatingActionButton(
onPressed: () => ,//<-- here I don't know
child: Icon(Icons.edit),
) :null : null,
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Experiences',
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: 'Blabla',
),
/**BottomNavigationBarItem(
icon: Icon(Icons.calendar_today),
label: 'Calendar',
backgroundColor: Colors.lightBlue,
),**/
],
type: BottomNavigationBarType.shifting,
currentIndex: _selectedIndex,
selectedItemColor: Theme.of(context).primaryColor,
unselectedItemColor: Colors.grey,
iconSize: 20,
onTap: _onItemTap,
elevation: 5),
body: InheritedUser(
user: widget.user, child: getPage(_selectedIndex)));
}
并且 BlablaPage 必须接收 fab 点击事件(一个 voidCallBack ?一个函数?):
class BlablaScreen extends StatefulWidget {
final VoidCallback fabTapped;
final Function fabVisible;
BlablaScreen({required this.fabTapped,required this.fabVisible});
@override
State<StatefulWidget> createState() => BlablaScreenState(fabTapped);
}
class BlablaScreenState extends State<BlablaScreen> {
VoidCallback fabTapped;
FeedScreenState(this.fabTapped){
fabTapped={
print('show Blabla')
} as VoidCallback;
}
@override
void initState() {
super.initState();
BlocProvider.of<FeedBloc>(context).getBlabla();
}
解决方案
推荐阅读
- read-the-docs - AttributeError: '_NamespacePath' object has no attribute 'sort' on Read the docs
- c - 如何在不使用 for 循环的情况下填充二维数组?
- windows - 带有不带引号的回显的 Makefile 错误
- regex - 之后如何使用正则表达式从带有可选字符串的字符串中提取字符?
- dynamics-crm - Dynamics CRM 上线,抛出 System.Security.Permissions.KeyContainerPermission
- multithreading - 如何在不影响应用程序安全的情况下使用 websockets 超时?
- html - 使用小型设备时,我网站右侧的空白区域
- javascript - ng generate @angular/material:material-nav --name=main-nav 正确生成文件但它们不运行
- python - python FileNotFoundError: [Errno 2] 具有绝对路径和文件存在
- arrays - Swift:数组引用作为对象属性?