#flutter #dart
#flutter #dart
Вопрос:
Я пытаюсь очистить все предыдущие маршруты после того, как пользователь вошел в мое приложение. Однако у меня возникла проблема со следующим кодом в моем приложении Flutter:
void clearRoutes()
{
//createLinks();
Navigator.of(context).pushNamedAndRemoveUntil('/my_home', (Route<dynamic> route) => false);
}
Widget build(BuildContext context)
{
WidgetsBinding.instance.addPostFrameCallback((_) => clearRoutes());
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("iWhiz Home"),
),
body: ListView.builder(
itemCount: links.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(links[index]),
);
}
),
);
}
Приведенный выше код приводит к этой проблеме:
Строка кода, которая вызывает у меня эту проблему, такова Navigator.of(context).pushNamedAndRemoveUntil('/my_home', (Route<dynamic> route) => false);
Можно ли решить эту проблему?
Ответ №1:
Я смог найти решение. Это код, который вызывал у меня проблему:
class Login extends StatelessWidget
{
void homePage(BuildContext context)
{
Navigator.pushNamed(context, "/my_home");
}
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("Login"),
),
body: Center(
child:
Column(
children: [
Text("Welcome to the Login Page"),
ElevatedButton(
onPressed: ()
{
homePage(context);
},
child: Text("Login"),
),
],
)
),
);
}
}
class MyHome extends StatelessWidget
{
void removePreviousRoutes(BuildContext context)
{
//The problem code.
Navigator.of(context).pushNamedAndRemoveUntil('/my_home', (Route<dynamic> route) => false);
}
Widget build(BuildContext context)
{
WidgetsBinding.instance.addPostFrameCallback((_) => removePreviousRoutes(context));
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("My Home"),
),
body: Center(
child:
Text("Welcome to the Home Page"),
)
);
}
}
Начальная страница, которая будет отображаться, — это Login . После того, как пользователь нажмет «Добро пожаловать на страницу входа», он будет перенаправлен на страницу MyHome. Проблема возникает Navigator.of(context).pushNamedAndRemoveUntil('/my_home', (Route<dynamic> route) => false);
на странице MyHome.
Решение:
class Login extends StatelessWidget
{
void homePage(BuildContext context)
{
//The solution.
Navigator.pushNamed(context, "/my_home");
Navigator.of(context).pushNamedAndRemoveUntil('/my_home', (Route<dynamic> route) => false);
}
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("Login"),
),
body: Center(
child:
Column(
children: [
Text("Welcome to the Login Page"),
ElevatedButton(
onPressed: ()
{
homePage(context);
},
child: Text("Login"),
),
],
)
),
);
}
}
class MyHome extends StatelessWidget
{
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("My Home"),
),
body: Center(
child:
Text("Welcome to the Home Page"),
)
);
}
}
Решение состояло в том, чтобы ввести новый маршрут и удалить все предыдущие маршруты из Login, ВМЕСТО того, ЧТОБЫ вводить новый маршрут в Login и удалять предыдущие маршруты из регистрации. После этого я больше не получал проблему с мерцанием.