Поскольку у вас уже есть MaterialApp
в вашем дереве и зарегистрированные именованные маршруты, это должно быть так же просто, как добавить вызов pu sh на вашу страницу входа примерно в то же время, когда вы получите ответ.
Во-первых, вы должны изменить getTables
, чтобы проверить response
на наличие кода состояния с помощью свойства statusCode
объекта Response
, отображаемого следующим блоком кода:
var response = await http.get('$_baseUrl/tables/list');
if(response.statusCode == 401) {
//Act on status of 401 here
}
Теперь, когда у вас есть способ проверить, имеет ли ответ код состояния 401, вы можете перейти на свою страницу входа с помощью Navigator
. Для Navigator
требуется BuildContext
, поэтому его нужно передать в функцию getTables
.
Это включает в себя изменение getTables
на:
Future<List<Tbl>> getTables(BuildContext context) async {
и fetchTables
необходимо аналогичное изменение:
Future fetchTables(BuildContext context) async {
Затем, при вызове этих методов, вы передаете context
вниз:
In Tables
model.fetchTables(context)
В TablesModel
Future fetchTables(BuildContext context) async {
setBusy(true);
tables = await _api.getTables(context);
setBusy(false);
}
и, наконец, в getTables
, вы используете переданный context
, чтобы использовать Navigator
:
Future<List<Tbl>> getTables(BuildContext context) async {
var tables = List<Tbl>();
try {
var response = await http.get('$_baseUrl/tables/list');
//Check response status code
if(response.statusCode == 401) {
Navigator.of(context).pushNamed(RoutePaths.Login);//Navigator is used here to go to login only with 401 status code
return null;
}
var parsed = json.decode(response.body) as List<dynamic>;
if (parsed != null) {
for (var table in parsed) {
tables.add(Tbl.fromJson(table));
}
}
} catch (e) {print(e); return null;}
return tables;
}
Вместо Navigator.of(context).pushNamed(RoutePaths.Login);
вы можете использовать Navigator.pushNamed(context, RoutePaths.Login);
, если хотите, но, как вы можете прочитать на этот ответ , они внутренне делают то же самое.
Теперь, когда есть код состояния 401, пользователь будет перемещен на экран входа в систему.