Notice
Recent Posts
Recent Comments
Link
ยซ   2024/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[flutter] 22๊ฐ• | Navigator ์ดํ•ดํ•˜๊ธฐ ๋ณธ๋ฌธ

flutter/์ˆœํ•œ๋ง›(๊ธฐ์ดˆ)

[flutter] 22๊ฐ• | Navigator ์ดํ•ดํ•˜๊ธฐ

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2021. 8. 16. 12:54

โœ… ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ๋„ค๋น„๊ฒŒ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ™”๋ฉด ์ „ํ™˜ํ•˜๊ธฐ + ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ์˜ˆ์ •์ด์•ผ

 

โœ… Navigator ๋ฐ ํฌ์ŠคํŒ…์˜ ์ˆœ์„œ

1. Route์˜ ๊ฐœ๋…

 - ์Šค๋งˆํŠธํฐ์—์„œ ๋ณด์—ฌ์ง€๋Š” ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€ ํ™”๋ฉด ! 

2. Navigator์˜ ์ •์˜์™€ push, pop ํ•จ์ˆ˜, stack ์ž๋ฃŒ๊ตฌ์กฐ

 - stack ( FILO ) 

 - push ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ธฐ

 - pop ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๊ธฐ

 - Route(ํŽ˜์ด์ง€) ๋Š” Navigator๋ผ๋Š” ์œ„์ ฏ์ด ๋‹ด๋‹นํ•˜๊ณ  ๊ทธ ๊ตฌ์กฐ๋Š” ์Šคํƒ ๊ตฌ์กฐ์ด๋‹ค.

3. MaterialPageRoute์œ„์ ฏ๊ณผ context

 - ํ™”๋ฉด์ „ํ™˜ํ•  ๋•Œ, ๋ฐ”๋กœ class ์ž…๋ ฅํ•ด์„œ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ™”๋ฉด์„ ์ง€์ •ํ•ด์ฃผ๋ฉด์„œ ์ด๋™ํ•œ๋‹ค.

4. ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์™„์„ฑ

โœ… ์ฝ”๋“œ ๋ฆฌ๋ทฐ

import 'package:flutter/material.dart'; // ๋ฐ์Šคํฌํƒ‘, ์•ฑ ๋“ฑ์— ๊ณ ๋ฃจ UI๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ๊ธ€์ด ์ œ๊ณตํ•ด์ฃผ๋Š” ํŒจํ‚ค

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      // ์‹ค์งˆ์ ์œผ๋กœ ๋ชจ๋“  ์•ฑ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋‹ค.
      title: 'Appbar', // ์•ฑ์„ ์ด์นญํ•˜๋Š” ์ด๋ฆ„ -> ์Šค๋งˆํŠธ ํฐ ์•ฑ์—์„œ ์ตœ๊ทผ ์‚ฌ์šฉํ•œ ์•ฑ ๋ณด์—ฌ์ค„ ๋•Œ์˜ ์ด๋ฆ„
      theme:
          ThemeData(primarySwatch: Colors.blue // ํŠน์ •์ƒ‰์˜ ์‘์šฉ๋“ค์„ ๊ธฐ๋ณธ ์ƒ‰์ƒ์œผ๋กœ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒ 
              ),
      home: MyPage(), // home์€ ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๊ฐ€์žฅ๋จผ์ € ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด
    );
  }
}

class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First page'),
      ),

      body: Center(
        child: ElevatedButton(
          child: Text('Go to the Second page'),
          onPressed:  () {
            Navigator.push(context,MaterialPageRoute( // ํŽ˜์ด์ง€ ์ด๋™์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ ํŽ˜์ด์ง€ ์ด๋™ ์‚ฌ์šฉ
                builder: (BuildContext context) {
                  return SecondPage();
                }

            ));
        },
        ),

      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext ctx) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second page'),
      ),

      body: Center(
        child: ElevatedButton(
          child: Text('Go to the First page'),
          onPressed: () {
            Navigator.pop(ctx);// ์ž์‹ ์ด ์‚ฌ๋ผ์ง€๋ฉด ์ž์‹  ์•„๋ž˜์˜ ๋„ค๋น„๊ฒŒ์ดํ„ฐ ์Šคํƒ์œผ๋กœ ์ด๋™

          },
        ),

      ),
    );
  }
}

๐Ÿ”ธ onPressed ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

์™„์„ฑํ•œ ํ™”๋ฉด

 

Comments