• [flutter] widget 2 : ํ™”๋ฉด ๋ฐฐ์น˜๋ฅผ ์œ„ํ•œ ๋ ˆ์ด์•„์›ƒ-2

    2021. 2. 7.

    by. ํ•ด๋Š”์„ 

     

    5. SingleChildScrollView

    Column์„ ์‚ฌ์šฉํ•ด ์œ„์ ฏ๋“ค์„ ๋‚˜์—ดํ•˜๋‹ค ๋ณด๋ฉด ํ™”๋ฉด์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์–ด์„ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ์Šคํฌ๋กค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.

    ์ด ์œ„์ ฏ์€, ํ•˜๋‚˜์˜ ์ž์‹์„ ์Šคํฌ๋กคํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์œ„์ ฏ์ด๋‹ค.

     

    ๋ณดํ†ต column๋ณด๋‹ค๋Š” ListBody๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํฌ๋กค ์œ„์ ฏ์„ ๋งŒ๋“ ๋‹ค. column์€ ์œ„์ ฏ์˜ ํฌ๊ธฐ๋งŒํผ ๊ฐ€๋กœ ๊ธธ์ด๋ฅผ ๊ฐ€์ ธ ์Šคํฌ๋กค ๊ฐ€๋Šฅ ์˜์—ญ์ด ์ข์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final items = List.generate(100, (i) => i).toList();
        
        return Scaffold(
          appBar: AppBar(
            title: Text("hello!"),
          ),
          body: SingleChildScrollView(
            child : ListBody(
              children : items.map((i) => Text('$i')).toList(),
            ),
          )
        );
      }
    }
    

     

     

    6. ListView, ListTile

    LiseView : ๋ฆฌ์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์œ„์ ฏ. ์ข€ ๋” ํšจ์œจ์ ์ธ SingleChildScrollView + ListBody.

    ListTile : ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ.

    leading(๋งจ ์™ผ์ชฝ. ๋ณดํ†ต ์•„์ด์ฝ˜), title(์ค‘์•™, ๋ณดํ†ต ํ…์ŠคํŠธ), trailing(๊ผฌ๋ฆฌ, ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„), onTap(๋ˆŒ๋ €์„ ๋•Œ ์•ก์…˜)์œผ๋กœ ๊ตฌ์„ฑ๋จ.

     

    ListView์˜ children ์†์„ฑ์— ๋‹ค์ˆ˜์˜ ListTile ์œ„์ ฏ์„ ๋ฐฐ์น˜ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        
        return Scaffold(
          appBar: AppBar(
            title: Text("hello!"),
          ),
          body: ListView(
            scrollDirection : Axis.vertical,
            children : <Widget> [
              ListTile(
                leading : Icon(Icons.home),
                title : Text("one"),
                trailing : Icon(Icons.navigate_next),
                onTap: (){},
              ),
               ListTile(
                leading : Icon(Icons.access_alarm),
                title : Text("two"),
                trailing : Icon(Icons.navigate_next),
                onTap: (){},
              ),
               ListTile(
                leading : Icon(Icons.cake),
                title : Text("three"),
                trailing : Icon(Icons.navigate_next),
                onTap: (){},
              ),
            ]
            
          
          )
        );
      }
    }
    

     

     

    7. GridView

    ์—ด ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ๊ทธ๋ฆฌ๋“œ ํ˜•ํƒœ๋กœ ํ‘œ์‹œํ•˜๋Š” ์œ„์ ฏ.

    crossAxisCount์— ์—ด ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        
        return Scaffold(
          appBar: AppBar(
            title: Text("hello!"),
          ),
          body: GridView.count(
            crossAxisCount : 3,//grid ์ˆ˜
            children : <Widget> [
              Container(
                color : Colors.red,
                width : 100,
                height : 100,
              ),
              Container(
                color : Colors.blueGrey,
                width : 100,
                height : 100,
              ),
              Container(
                color : Colors.lime,
                width : 100,
                height : 100,
              ),
            ])
        );
      }
    }
    

    grid ์ˆ˜๋ฅผ ๊ฐ๊ฐ 2, 3์œผ๋กœ ์ง€์ •ํ–ˆ์„ ๊ฒฝ์šฐ.

     

     

    8. PageView

    ํŽ˜์ด์ง€๋ฅผ ์ขŒ์šฐ๋กœ ์Šฌ๋ผ์ด๋“œํ•ด์„œ ๋„˜๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์œ„์ ฏ.

    children ์†์„ฑ์— ๋ฐฐ์น˜๋˜๋Š” ์œ„์ ฏ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ํŽ˜์ด์ง€๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ๋…์œผ๋กœ๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ถ”์„ธ.

     

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text("hello!"),
            ),
            body: PageView(children: <Widget>[
              Container(
                color: Colors.red,
                width: 100,
                height: 100,
              ),
              Container(
                color: Colors.blueGrey,
                width: 100,
                height: 100,
              ),
              Container(
                color: Colors.lime,
                width: 100,
                height: 100,
              ),
            ]));
      }
    }
    

    ํŽ˜์ด์ง€ 1 / ๋Œ์–ด์„œ ๋„˜๊ธฐ๋Š” ์ค‘ / ํŽ˜์ด์ง€ 2

     

     

    9. AppBar, TabBar, Tab, TabBarView

    ์ด ์œ„์ ฏ๋“ค์„ ์กฐํ•ฉํ•ด ํŽ˜์ด์ง€์™€ ํƒญ์ด ์—ฐ๋™๋˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋•Œ, scaffold๋ฅผ DefaultTabController๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์— ์œ ์˜ํ•˜์ž.

     

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return DefaultTabController(
          length : 3, //ํƒญ ์ˆ˜
          child :Scaffold(
            appBar: AppBar(
              title: Text("hello!"),
              bottom: TabBar(
                tabs : <Widget>[
                  Tab(icon : Icon(Icons.home)),
                  Tab(text: '๋ฉ”๋‰ด 2'),
                  Tab(icon : Icon(Icons.info), text:'๋ฉ”๋‰ด 3'),
    
                ]
              )
            ),
            body: TabBarView(
              children: <Widget>[
              Container(
                color: Colors.red,
              ),
              Container(
                color: Colors.blueGrey,
              ),
              Container(
                color: Colors.lime,
              ),
            ]))
          
        );
      }
    }
    

     

     

    10. BottomNavigtionBar

    ํ•˜๋‹จ์— ํƒญ ๋ฉ”๋‰ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์œ„์ ฏ. ํ™”๋ฉด ์ „ํ™˜์— ์‚ฌ์šฉ.

    icon๊ณผ label ์†์„ฑ์„ ์ด์šฉํ•ด ํƒญ ๋ฐ”๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text("hello!"),
            ),
            bottomNavigationBar: BottomNavigationBar(items: [
              BottomNavigationBarItem(
                icon: Icon(Icons.home),
                label: 'Home',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.person),
                label: 'profile',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.cake),
                label: 'cake',
              ),
            ]));
      }
    }
    

     

     

     

     

     

     


    ์ฐธ์กฐ

    here4you.tistory.com/137

     

    Flutter ๊ฐ•์ขŒ - [List] ListView ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

    Flutter ๊ฐ•์ขŒ ๋ชฉ๋ก : https://here4you.tistory.com/120 ์ด๋ฒˆ ๊ฐ•์ขŒ์—์„œ๋Š” ListView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณธ๋‹ค. Flutter์—์„œ์˜ ListView๋Š” ListTile๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์†Œ์Šค์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. import 'pack..

    here4you.tistory.com

     

    ๋Œ“๊ธ€