화면을 이동하는 Routes에 대해 익힐 시간이다.

1
2
3
4
5
6
7
8
9
10
11
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        initialRoute: '/',
        routes: routes,
    );
  }
}

Material App 안에 initialRoute와 routes를 설정한다. routes에 대해서는 나중에 다른 파일로 빼서 설정할 것이다.

참고로 home을 설정하면 initialRoute와 충돌하니 주의해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Home extends StatelessWidget {
  const Home({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Column(
          children: [
            ElevatedButton(
              onPressed: () {Navigator.pushNamed(context, '/first');
              },
              child: const Text("Button1"),
            ),
            ElevatedButton(
              onPressed: () {Navigator.pushNamed(context, '/second');
              },
              child: const Text("Button2"),
            ),
          ],
        )
    );
  }
}

class FirstScreen extends StatelessWidget {
  const FirstScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        width: 400,
        height: 400,
        decoration: BoxDecoration(
          border: Border.all(width: 5, color: Colors.indigo)
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  const SecondScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        width: 200,
        height: 200,
        decoration: BoxDecoration(
            border: Border.all(width: 5, color: Colors.green)
        ),
      ),
    );
  }
}

홈과 2개의 스크린을 Scaffold로 설정한다. 홈에 들어갈 화면이다.

홈에서는 2개의 스크린으로 이동시키는 ElevatedButton을 만들어준다.

Navigator 탭의 pushNamed 함수를 호출한다. 이 함수는 두 개의 값을 받는다.

하나는 context를 받는데 우리가 위젯을 선언할 때의 그 context다.

두 번째는 라우트로 쓸 String 값을 받는다.

1
2
3
4
5
6
7
8
import 'package:flutter/material.dart';
import 'main.dart';

final Map<String, WidgetBuilder> routes = {
  '/': (context) => const Home(),
  '/first': (context) => const FirstScreen(),
  '/second': (context) => const SecondScreen(),
};

final Map<String, WidgetBuilder> routes = 를 선언해준다. 아까 설명하겠다고 한 그 routes다. 다른 파일에 만든 것이다.

그리고 우리가 연결할 라우트를 등록해준다.

마지막으로 메인에서 라우트 파일을 불러오기하면 등록이 끝난다.

https://github.com/shechren/DIM/tree/master/do8