Skip to content

Instantly share code, notes, and snippets.

@caseycrogers
Created January 23, 2022 22:45
Show Gist options
  • Save caseycrogers/873a7d5f5f42743cbdb016d9fbd570e0 to your computer and use it in GitHub Desktop.
Save caseycrogers/873a7d5f5f42743cbdb016d9fbd570e0 to your computer and use it in GitHub Desktop.
why_navigator_is_bad.dart
import 'package:flutter/material.dart';
void main() {
runApp(BackButton());
}
class BackButton extends StatelessWidget {
const BackButton({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
initialRoute: 'home',
onGenerateRoute: (route) {
return MaterialPageRoute(builder: (context) {
return Scaffold(
appBar: AppBar(title: Text(route.name!)),
body: Column(
children: [
Row(
children: [
Builder(builder: (context) {
return TextButton(
child: Text('increment top navigator'),
onPressed: () {
Navigator.of(context).pushNamed('not_home');
},
);
}),
],
),
Expanded(
child: NumberNavigator(
initialNumber: 0,
child: NumberNavigator(
initialNumber: 0,
child: Container(),
),
),
),
],
),
);
});
},
);
}
}
class NumberNavigator extends StatelessWidget {
const NumberNavigator({
required this.initialNumber,
required this.child,
Key? key,
}) : super(key: key);
final int initialNumber;
final Widget child;
@override
Widget build(BuildContext context) {
return Navigator(
initialRoute: '0',
onGenerateRoute: (settings) {
return PageRouteBuilder(
transitionDuration: Duration.zero,
pageBuilder: (context, _, __) {
return Column(
children: [
Row(
children: [
Text(settings.name!),
IconButton(
icon: Icon(Icons.exposure_minus_1),
onPressed: () {
Navigator.of(context).pushNamed(
(int.parse(settings.name!) - 1).toString());
},
),
IconButton(
icon: Icon(Icons.exposure_plus_1),
onPressed: () {
Navigator.of(context).pushNamed(
(int.parse(settings.name!) + 1).toString());
},
),
],
),
Expanded(child: child),
],
);
},
);
},
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment