是的,这是可能的,一旦检查下面的示例代码。
有关其工作原理的视频。https://drive.google.com/file/d/1BxK6qevJOu4qYrmnoTXdIYtqLAVC87ya/view?usp=share_link
在这里,我们正在为 Title 和 onTap 创建一个模型
class DataModel {
final String labelName;
final Function onTap;
const DataModel({required this.labelName, required this.onTap});
}
在这里,我们正在创建一个 DataModel 列表,因此将在 Title 和 onTap 中使用。
List<DataModel> dataList = [
DataModel(
labelName: "First",
onTap: () {
print("first");
}),
DataModel(
labelName: "Second",
onTap: () {
print("Second");
}),
DataModel(
labelName: "Third",
onTap: () {
print("Third");
}),
DataModel(
labelName: "Fourth",
onTap: () {
print("Fourth");
}),
];
获取设备的功能是手机或平板电脑
getDevice() {
return MediaQuery.of(context).size.width <= 800 ? "Mobile" : "Tablet";
}
这是该页面的完整代码。
class MyHomePage extends StatefulWidget {
const MyHomePage({
super.key,
});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Demo Home Page"),
),
drawer: getDevice() == "Tablet"
? Drawer(
child: ListView.builder(
itemCount: dataList.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(dataList[index].labelName),
onTap: () {
dataList[index].onTap();
},
);
},
))
: null,
bottomNavigationBar: getDevice() == "Mobile"
? BottomNavigationBar(
onTap: (value) {
dataList[value].onTap();
},
// backgroundColor: Colors.black,
items: dataList.map((e) => BottomNavigationBarItem(backgroundColor: Colors.black, icon: Icon(Icons.add), label: e.labelName)).toList(),
// items: <BottomNavigationBarItem>[
// BottomNavigationBarItem(label: "Test", icon: Icon(Icons.add)),
// BottomNavigationBarItem(label: "Test1", icon: Icon(Icons.add)),
// BottomNavigationBarItem(label: "Test2", icon: Icon(Icons.add)),
// BottomNavigationBarItem(label: "Test3", icon: Icon(Icons.add)),
// ],
)
: null,
body: Center(
child: TextButton(
onPressed: () {
setState(() {
// isHide = !isHide;
});
},
child: Text("Hide")),
),
);
}
我希望这些东西能解决你的问题。