| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Flutter コードサンプル

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Flutter コードサンプル

Flutter|Dart|

シンプルな画面

ウィジェット

  • Flutterでは画面表示はウィジェットという部品によって作成される。
  • ウィジェットを入れ子にすることで構築し、ウィジェットツリーと呼ぶ。

StatelessWidgetとStatefulWidget

  • runAppの引数に指定されているのは、MyAppクラスのインスタンス
  • MyAppは、StatelessWidgetのサブクラス
  • StatelessWidgetはステート(状態)を持たない
  • StatefulWidgetはステート(状態)を持つ
  • ウィジェットはいずれかを継承して作成する
  • MaterialAppというマテリアルデザインを管理するウィジェットクラスを、buildで返すことでマテリアルデザインアプリになる
  1. import 'package:flutter/material.dart';
  2.  
  3. void main() => runApp(MyApp());
  4.  
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return new MaterialApp(
  9. title: 'Flutter Sample',
  10. home: Text(
  11. 'Hello, Flutter!!',
  12. style: TextStyle(fontSize: 32.0),
  13. ),
  14. );
  15. }
  16. }

Flutter simple.png

MaterialAppクラス

  • 引数に様々な設定情報を指定することが出来る

ScaffoldとAppBar

  • アプリの基本デザインを生成

Scaffold

  • マテリアルデザインの基本レイアウト、デザインが組み込まれていてUIの土台となる

AppBar

  • アプリ上部に表示されるアプリケーションバー
  1. import 'package:flutter/material.dart';
  2.  
  3. void main() => runApp(MyApp());
  4.  
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return new MaterialApp(
  9. title: 'Flutter Sample',
  10. home: Scaffold(
  11. appBar: AppBar(
  12. title: Text('Flutter Sample'),
  13. ),
  14. body: Text(
  15. 'Hello, Flutter!!',
  16. style: TextStyle(fontSize: 32.0),
  17. ),
  18. ),
  19. );
  20. }
  21. }

Flutter simple scaffold.png

状態を管理

  • StatefulWIdgetはStateクラスとして状態を扱う

StatefulWidgetとState

  • StatefulWidgetはcreateStateを実装しStateを生成する必要がある。
  • Stateクラスを継承して状態を管理する。この時型パラメータにウィジェットを指定する。
  • Stateクラスのbuildでウィジェットを生成する。buildは常に呼び出される。
  • StatefulWidgetは状態が変わるたびに、buildで新たな状態を生成し画面表示を更新する。
  • initState() でプロパティを初期化する
  • 状態の変更は、State内にメソッドを用意し、setState()を呼び出すことにより状態の変更を通知
  1. import 'package:flutter/material.dart';
  2.  
  3. void main() => runApp(MyApp());
  4.  
  5. class MyApp extends StatelessWidget {
  6. final message = "Initial Message.";
  7. @override
  8. Widget build(BuildContext context) {
  9. return new MaterialApp(
  10. title: 'Flutter Sample',
  11. home: MyPage(message:this.message),
  12. );
  13. }
  14. }
  15.  
  16. class MyPageState extends State<MyPage>{
  17. String time;
  18.  
  19. @override
  20. void initState() {
  21. super.initState();
  22. this.time = "Tap Floating Action Button";
  23. }
  24.  
  25. void showTime(){
  26. setState(() {
  27. this.time = DateTime.now().toString();
  28. });
  29. }
  30.  
  31. @override
  32. Widget build(BuildContext context) {
  33. return Scaffold(
  34. appBar: AppBar(
  35. title: Text('Flutter State Sample'),
  36. ),
  37. body: Text(
  38. this.time,
  39. style: TextStyle(fontSize: 32.0),
  40. ),
  41. floatingActionButton: FloatingActionButton(
  42. onPressed: showTime,
  43. child: Icon(Icons.timer),
  44. ),
  45. );
  46. }
  47. }
  48.  
  49. class MyPage extends StatefulWidget {
  50. final String message;
  51. MyPage({this.message}):super() {}
  52. @override
  53. State<StatefulWidget> createState() => new MyPageState();
  54. }

Flutter simple state action.png

複数ウィジェットの配置

Column と Row

Flutter row col.png Flutter row col2.png


Main Axis と Cross Axsis

Main Axis Widgetの並び方向。Columnなら縦方向、Rowなら横方向
Cross Axis 並んだWidgetと交差する方向。Columnなら横方向、Rowなら縦方向

Flutter row col3.png

Column と Row の例

  1. @override
  2. Widget build(BuildContext context) {
  3. return Scaffold(
  4. appBar: AppBar(
  5. title: Text('Flutter State Sample'),
  6. ),
  7. body: Column(
  8. // Columnの配置場所
  9. mainAxisAlignment: MainAxisAlignment.start,
  10. // Widgetのサイズ
  11. mainAxisSize: MainAxisSize.max,
  12. // Columnに組み込んだWidgetの配置場所
  13. crossAxisAlignment: CrossAxisAlignment.start,
  14. children: <Widget>[
  15. Text(
  16. this.time,
  17. style: TextStyle(fontSize: 32.0),
  18. ),
  19. Row(
  20. mainAxisAlignment: MainAxisAlignment.start,
  21. mainAxisSize: MainAxisSize.max,
  22. crossAxisAlignment: CrossAxisAlignment.start,
  23. children: <Widget>[
  24. Flexible(
  25. child: TextField(),
  26. ),
  27. RaisedButton(
  28. child: Text("Save"),
  29. ),
  30. RaisedButton(
  31. child: Text("Load"),
  32. )
  33. ],
  34. ),
  35. ],
  36. ),
  37. floatingActionButton: FloatingActionButton(
  38. onPressed: showTime,
  39. child: Icon(Icons.timer),
  40. ),
  41. );
  42. }

Flutter col row.png