【初心者向け】Flutterアプリを誰でも0から開発(前編)

この記事では、自分が作った **『Noveler』** を参考に、Flutter製アプリを誰でも0から開発できるように解説していきます。
**『Noveler』** のプログラムはこちらも置いておきます。

https://github.com/schezo817/noveler

前編ではプロジェクトの立ち上げから画面を表示するところまでを解説します。


## 目次
1. ベースの設定
    1. AndroidStudioを用いたFlutterプロジェクトの作成
    1. ファイル構成
1. 画面に表示する
    1. 「こんにちは」を画面中央に配置する
    1. メモを書ける画面を表示する


## 1. AndroidStudioを用いたFlutterプロジェクトの作成


基本はこの記事をベースに作成すれば作れます。が、今回一部違うところあるのでそこだけ注釈します。

https://qiita.com/schezo817/items/f96007d272d1fb1988fd

Project nameは任意のプロジェクト名を記述してください。今回はnovelerのcopyということでcopy_novelerと命名してます。
Project locationはStudioProjects配下にProject nameを設定すればokです。
Organizationは、com.exampleでも問題ないです。ただ、アプリをリリースするときにcom.exampleだとリリースすることができないです。

```dart
Project name: copy_noveler
Project location: ~/StudioProjects/copy_noveler
Organization: com.hiragi.noveler
```

## 2.ファイル構成
以下のように4つのファイルを作ります。
前編では、**page** と**main.dart** しか利用しませんが、将来的なことを考えて、**assets**、**component**、**function** を作成しておきます。
![スクリーンショット 2023-03-20 21.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2933781/f67bd3ed-afe0-4f30-8880-e60cb8f593cc.png)
 
各ファイルに保存するものは以下のようになります。
```dart
// assets : 画像
// componets : dialog等の部品
// function : ページ内で使用する関数
// page : スマホに表示される画面
```

## 3.「こんにちは」を画面中央に配置する
一旦 **"~/main.dart"** と **"~/page/edit.dart"** を作成しましょう。

目標は「こんにちは」と画面中央に表示することです！！

**~/main.dart**
```dart
import 'package:flutter/material.dart';
import 'page/consent.dart';

void main() {
  //　一旦おまじないとしてスルーしてもらって大丈夫です
  WidgetsFlutterBinding.ensureInitialized();
  //これによってFlutterプロジェクトを起動する
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //デバックのバーを削除
      debugShowCheckedModeBanner: false,
      title: 'Noveler',
      theme: ThemeData(
        //テーマカラー : 青
        primarySwatch: Colors.blue,
      ),
      // 初期画面に表示するページの指定
      home: Consent(),
    );
  }
}
```
**~/page/edit.dart**
```dart
import 'package:flutter/material.dart';

class Consent extends StatefulWidget {
  @override
  _ConsentState createState() => _ConsentState();
}

class _ConsentState extends State<Consent> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
          //画面上部に表示されるバー
          appBar: AppBar(
            title: const Text("同意画面"),
          ),
          //画面中央に表示するためのウィジェット
          body: Center(
            child: Text("こんにちは"),
          ),
    );
  }
}
```

**作成した画面**
![スクリーンショット 2023-03-20 22.13.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2933781/84bfe6ab-8d42-50ee-a024-b7e2de300a41.png)

ここまで実装すると、「こんにちは」と画面中央に表示されたと思います！！

## 4. メモアプリの画面を実装する

先ほどの画面では、画面の中央にただ「こんにちは」と表示されているだけの味気ない画面でしたよね。
それでは、メモ画面を実装していきましょう。

そこで先ほどの**edit.dart** を少し書き換えていきましょう。

**~/page/edit.dart**

```dart
import 'package:flutter/material.dart';

class Edit extends StatefulWidget {
  @override
  _EditState createState() => _EditState();
}

class _EditState extends State<Edit> {
  String current = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("メモ画面"),
      ),
      //画面が縦方向にスクロールするようになる
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: <Widget>[
            //入力できるウィジェット
            TextFormField(
                controller: TextEditingController(text: current),
                maxLines: 999,
                style: const TextStyle(
                  color: Colors.black,
                ),
                onChanged: (text) {
                  current = text;
                }),
          ],
        ),
      ),
    );
  }
}
```


**作成した画面**

![スクリーンショット 2023-03-25 9.42.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2933781/2d23bc5d-016e-7c1c-fb5d-a31e78b62c7a.png)

今回は画面を表示するところまで実装できましたね。では後編では、実際に複数ページのルーティングや文章の保存といった部分を実装していきましょう。