英文:
Flutter, the last page I closed appears instantly when I open a new page
问题
当我在抽屉中切换页面时,先前的页面会出现1秒钟,然后关闭,我想要的页面才会出现。 https://youtube.com/shorts/YS5P2aQLBAM?feature=share
每当出现这个不需要的页面时,我会在控制台中看到以下错误信息:
->E/Surface (25496): getSlotFromBufferLocked: unknown buffer: 0xf46fec90
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
children: [
//抽屉标题
//抽屉主体
Container(
padding: const EdgeInsets.only(left: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
drawerItem(context, () {
Get.to(() => ProfileScreen());
}, "Hesabım", Icons.person),
drawerItem(context, () {
Get.to(() => MyAdress());
}, "Adreslerim", Icons.location_on_sharp),
],
),
),
],
),
);
}
GestureDetector drawerItem(
BuildContext context, VoidCallback onTap, String? a, IconData icon) {
return GestureDetector(
onTap: onTap,
child: ListTile(
leading: Icon(icon, color: Colors.black54),
title: Text(
a.toString(),
style: TextStyle(color: Colors.black54),
),
),
);
}
}
英文:
When I switch between pages in the drawer, the previous page appears for 1 second, then it closes and the page I want appears. https://youtube.com/shorts/YS5P2aQLBAM?feature=share
Every time this unwanted page appears, I get this error in the console
> ->E/Surface (25496): getSlotFromBufferLocked: unknown buffer: 0xf46fec90
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
children: [
//Drawer Header
//Drawer Body
Container(
padding: const EdgeInsets.only(left: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
drawerItem(context, () {
Get.to(() => ProfileScreen());
}, "Hesabım", Icons.person),
drawerItem(context, () {
Get.to(() => MyAdress());
}, "Adreslerim", Icons.location_on_sharp),
],
),
),
],
),
);
}
GestureDetector drawerItem(
BuildContext context, VoidCallback onTap, String? a, IconData icon) {
return GestureDetector(
onTap: onTap,
child: ListTile(
leading: Icon(icon, color: Colors.black54),
title: Text(
a.toString(),
style: TextStyle(color: Colors.black54),
),
),
);
}
}
答案1
得分: 1
你应该提取到 StatelessWidgets
中,而不是将小部件提取为函数。
我在Flutter GetX中有一个带导航抽屉的工作示例。你可以看一下这个:
class HomeView extends StatelessWidget {
const HomeView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey.shade400,
drawer: Drawer(
child: ListView(
children: [
DrawerItem(
icon: Icons.abc,
onTap: () => Get.to(const DemoView()),
title: "Home",
),
],
),
),
body: const SizedBox.shrink(),
);
}
}
这是抽屉项目小部件:
class DrawerItem extends StatelessWidget {
final String title;
final VoidCallback onTap;
final IconData icon;
const DrawerItem({
Key? key,
required this.title,
required this.onTap,
required this.icon,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTap,
child: ListTile(
leading: Icon(icon, color: Colors.black54),
title: Text(
title,
style: TextStyle(color: Colors.black54),
),
),
);
}
}
英文:
You should extract into StatelessWidgets
instead of extracting widget as a function.
I have a working example of the drawer with navigation in Flutter GetX. You can take a look at this:
class HomeView extends StatelessWidget {
const HomeView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey.shade400,
drawer: Drawer(
child: ListView(
children: [
DrawerItem(
icon: Icons.abc,
onTap: () => Get.to(const DemoView()),
title: "Home",
),
],
),
),
body: const SizedBox.shrink(),
);
}
}
Here's the drawer item widget
class DrawerItem extends StatelessWidget {
final String title;
final VoidCallback onTap;
final IconData icon;
const DrawerItem({
Key? key,
required this.title,
required this.onTap,
required this.icon,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTap,
child: ListTile(
leading: Icon(icon, color: Colors.black54),
title: Text(
title,
style: TextStyle(color: Colors.black54),
),
),
);
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论