๐Ÿ“šSTUDY/๐ŸŽซDart&Flutter

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

ํ•ด๋Š”์„  2021. 2. 7. 23:32

 

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