Здравствуйте, я создаю приложение с несколькими страницами, используя навигаторы и маршруты. Я хотел бы добавить на панель приложений Scaffold счетчик, который увеличивается каждый раз, когда палец нажимает кнопку на экране (также, если на странице присутствует более одной кнопки). Также, если я меняю страницы, этот счетчик должен увеличиваться. Можете ли вы помочь мне понять проблему? Я учусь, поэтому, вероятно, структура может быть версией для начинающих. Спасибо.
Вы, вероятно, можете подключить некоторые журналы к PageRouteBuilder, потому что каждый маршрут проходит туда с данной страницы (конечно, он должен быть и на каждой странице).
Как прокомментировал @Randal Schwartz, мы могли бы воспользоваться свойством onGenerateRoute
класса MaterialApp
:
runApp(MaterialApp(
home: BuilderPage(LoginArguments(false)),
onGenerateRoute: generateRoute
));
Определив пользовательскую функцию generateRoute
:
int counter = 0; // global variable outside of the classes
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case 'home':
counter++;
return MaterialPageRoute(builder: (_) => HomeScreen());
case 'login':
counter++;
return MaterialPageRoute(builder: (_) => LoginScreen());
case 'register':
counter++;
return MaterialPageRoute(builder: (_) => RegisterScreen());
}
}
Затем counter
может отображаться с помощью Widget
, загрузив его в их состоянии:
class HomeScreen extends StatefulWidget {
const HomeScreen({ Key key }) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _counter;
@override
void initState() {
super.initState();
setState(() => _counter = counter);
}
void _increaseCounter() {
counter++;
setState(() => _counter++);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(child: Text(_counter.toString())),
body: SafeArea(
child: Center(child:
GestureDetector(
onTap: () { _increaseCounter(); },
child: Text('test'),
),
),
),
),
);
}
}
NB: это решение не является оптимальным. Не забудьте рассмотреть более продвинутые архитектуры управления состоянием, такие как BLoC
, чтобы лучше управлять синхронизацией данных между разными Widget
в приложении.