Предположим, у вас есть 3 страницы: PageHome.dart, Page1.dart, Page2.dart.
Создайте еще один файл дротика 'GlobalVariables.dart', создайте класс gv внутри этого файла, создайте статические избыточные 'хранилища' для трех страниц.
создать статическую переменную strCurPage в gv.
предположим, что на каждой странице есть переменная, которая должна быть изменена внешним событием, также объявите их в gv как static var.
Коды в GlobalVariables.dart:
import 'package:redux/redux.dart';
enum Actions {
Increment
}
// The reducer, which takes the previous count and increments it in response to an Increment action.
int reducerRedux(int intSomeInteger, dynamic action) {
if (action == Actions.Increment) {
return intSomeInteger + 1;
}
return intSomeInteger;
}
class gv {
static Store<int> storePageHome =
new Store<int>(reducerRedux, initialState: 0);
static Store<int> storePage1 =
new Store<int>(reducerRedux, initialState: 0);
static Store<int> storePage2 =
new Store<int>(reducerRedux, initialState: 0);
static String strCurPage = 'PageHome';
static String strPageHomeVar = 'PageHomeInitialContent';
static String strPage1Var = 'Page1InitialContent';
static String strPage2Var = 'Page2InitialContent';
}
Импорт 'GlobalVariables.dart' во все остальные файлы дротиков.
Перед переходом на новую страницу, например, от PageHome к Page1, установите:
gv.strCurPage = 'Page1';
- Внутри функции монитора, если происходит внешнее событие, скажем, измените значения переменных на Page1 и Page2 (но пользователь в настоящее время перемещается на Page1):
void thisFunctionCalledByExternalEvent(strPage1NewContent, strPage2NewContent) {
gv.strPage1Var = strPage1NewContent;
gv.strPage2Var = strPage2NewContent;
if (gv.strCurPage == 'Page1') {
// Dispatch storePage1 to refresh Page 1
storePage1.dispatch(Actions.Increment);
} else if (gv.strCurPage == 'Page2') {
// Dispatch storePage2 to refresh Page 2
storePage2.dispatch(Actions.Increment);
} else {
// Do not need to refresh page if user currently navigating other pages.
// so do nothing here
}
}
Я не знаю, является ли это лучшим способом, но, используя redux и GlobalVariables.dart, я могу:
знать, на какой странице в данный момент находится пользователь.
изменить содержимое страницы, даже если пользователь не находится на этой странице, когда происходит событие. (Но содержимое будет показано, когда пользователь перейдет на эту страницу позже)
заставляет пользователя переходить на определенную страницу независимо от того, на какой странице он находится, когда происходит событие.