1)
2) main.dart
import 'package:flutter/material.dart';
import 'package:navigation/screen/home_screen.dart';
import 'package:navigation/screen/route_one_screen.dart';
import 'package:navigation/screen/route_three_screen.dart';
import 'package:navigation/screen/route_two_screen.dart';
void main() {
runApp(
MaterialApp(
// home: HomeScreen(),
initialRoute: '/',
routes: {
'/': (context) => HomeScreen(),
'/one': (context) => RouteOneScreen(),
'/two': (context) => RouteTwoScreen(),
'/three': (context) => RouteThreeScreen(),
},
),
);
}
3) layout/main_layout.dart
import 'package:flutter/material.dart';
class MainLayout extends StatelessWidget {
final String title;
final List<Widget> children;
const MainLayout({Key? key, required this.title, required this.children,}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
title,
),
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: children,
),
),
);
}
}
4) screen/
home_screen.dart
import 'package:flutter/material.dart';
import 'package:navigation/layout/main_layout.dart';
import 'package:navigation/screen/route_one_screen.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
final canPop = Navigator.of(context).canPop();
return canPop;
},
child: MainLayout(
title: 'HomeScreen',
children: [
ElevatedButton(
onPressed: () {
print(Navigator.of(context).canPop());
},
child: Text(
'Can Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).maybePop();
},
child: Text(
'Maybe Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'Pop',
),
),
ElevatedButton(
onPressed: () async {
final result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => RouteOneScreen(
number: 123,
),
),
);
print(result);
},
child: Text(
'Push',
),
),
],
),
);
}
}
route_one_screen.dart
import 'package:flutter/material.dart';
import 'package:navigation/screen/route_two_screen.dart';
class RouteOneScreen extends StatelessWidget {
final int? number;
const RouteOneScreen({
Key? key,
this.number,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final argument = ModalRoute.of(context)!.settings.arguments;
return Scaffold(
appBar: AppBar(
title: Text('Route One'),
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
'$number',
textAlign: TextAlign.center,
),
ElevatedButton(
onPressed: () {
print(Navigator.of(context).canPop());
},
child: Text(
'Can Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).maybePop();
},
child: Text(
'Maybe Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop(456);
},
child: Text(
'Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => RouteTwoScreen(),
settings: RouteSettings(
arguments: 789,
),
),
);
},
child: Text(
'Push',
),
),
],
),
),
);
}
}
route_two_screen.dart
import 'package:flutter/material.dart';
import 'package:navigation/layout/main_layout.dart';
import 'package:navigation/screen/route_three_screen.dart';
class RouteTwoScreen extends StatelessWidget {
const RouteTwoScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final arguments = ModalRoute.of(context)!.settings.arguments;
return MainLayout(
title: 'Route Two',
children: [
Text(
'arguments: $arguments',
textAlign: TextAlign.center,
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pushNamed('/three', arguments: 999);
},
child: Text(
'Push Named',
),
),
ElevatedButton(
onPressed: () {
// [HomeScreen(), RouteOne(), RouteTwo(), RouteThree()]
// [HomeScreen(), RouteOne(), RouteThree()]
Navigator.of(context).pushReplacementNamed('/three');
},
child: Text(
'Push Replacement',
),
),
ElevatedButton(
onPressed: () {
// [HomeScreen(), RouteOne(), RouteTwo(), RouteThree()]
// [HomeScreen()]
Navigator.of(context).pushNamedAndRemoveUntil(
'/three',
(route) => route.settings.name == '/',
);
},
child: Text(
'Push Remove and Until',
),
),
],
);
}
}
route_three_screen.dart
import 'package:flutter/material.dart';
import 'package:navigation/layout/main_layout.dart';
class RouteThreeScreen extends StatelessWidget {
const RouteThreeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final argument = ModalRoute.of(context)!.settings.arguments;
return MainLayout(
title: 'Route Three',
children: [
Text(
'argument: $argument',
textAlign: TextAlign.center,
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'Pop',
),
),
],
);
}
}
5)
'개발이 좋아서 > Flutter가 좋아서' 카테고리의 다른 글
[flutter] 오늘도 출근 - 근퇴관리 앱_환경 세팅 (0) | 2023.01.05 |
---|---|
[flutter] 동영상 플레이어 (0) | 2023.01.04 |
[flutter] button_ElevaredButton, OutlinedButton, TextButton, ButtonStyle (0) | 2023.01.03 |
[flutter] 랜덤숫자 생성기 (0) | 2023.01.03 |
[flutter] const_constructor (2) | 2022.12.29 |