頑張れFlutter実装Ⅱ

# 目的・背景
　どうもFlutter初心者です．今回はテストとか，デバックとかの勉強しようと予告していたのですが，そもそも動かすコードなければテストとか意味あるうん？という結論にいたり，今回やることは[text](https://www.shoeisha.co.jp/book/detail/9784798177731)に記載してChapter2の画面の基本構築を行おうと思います．
 　いつもながら，文章や記事の構成に問題や不備等があればご指摘していただくと，今後の励みになります．（ただし炎上だけ勘弁です.）
 こちらは[前回記事](https://qiita.com/HAKU6e/items/37500fc363cb8122a17c)です。
## 引用
https://zenn.dev/kazutxt/books/flutter%EF%BC%BFpractice%EF%BC%BFintroducti
https://www.shoeisha.co.jp/book/detail/9784798177731
## 内容
- Widget
- classの概念
- statefulとstatelessの違い
- Widgetの配布パッケージ

### Widget
　flutterの基本概念はWidgetというパーツを組み合わせて作るパズルゲームです．イメージとしては大きなパズル（システム）を構築する為にそれを構成する中くらいの中がスカスカのフレームを組み合わせて，敷き詰めてその中にそのwidgetを構成するという，入子構造になってます．基本的な概念としてはHTML/CSSに近い．それがタグではなくWidgetというフレームというだけの違いです．

 ### statefulとstatelessの違い
***satateful : 状態を持ち，動的に変化する．***
***stateless : 状態を持たず，静的で変化しない.***
　筆者は変化する情報と変化しない定数みたいな解釈をしました．まぁ要するに，川と水たまりの違いですか．
 川：魚などの生き物（情報）があり，そこの地形や人の手によって川の流れが変わる．
 水たまり：生き物（情報）はおらず，ただそこにあるだけ
 ※ツッコミどころがあると思いますが，情報と変化の部分だけ考えてください．
 
### classの概念
　classについて，既にご存じの方は飛ばしてください．ここでは特に，flutterのアプリで必要な部分だけを筆者なりに分り易く書こうと思いますが，筆者はclassが実は最も苦手とする技法なので，間違っていたら申し訳ない．一応[こちら](https://zenn.dev/iwaku/articles/2020-12-16-iwaku)と[こちら](https://zenn.dev/k_sato/articles/49688cbbf3bd3f)に私が理解するのに参照した記事を貼っておきます．
 まずcalssとはプロパティとメソッドによって定義されたオブジェクトです．誤解を恐れずにいうと，クラスとゲームでいうところのステータスという枠組みで，プロパティ（属性）がHPやMPなどのステータス値の事です．ここで，メソッドというのがスキルに相当します．具体的にはHPやMPの値をもとにスキルを発動（クラス内で定義された関数（メソッドのこと）を使用するということ）するということです．もっと具体的に言うと，MPを5減らす代わりに攻撃力を2倍するスキルで考えてみましょう．実際にコードにすると次の通りです．
```
class Person {
  // インスタンス変数
  final String name; 
  int hp = 10;
  int mp= 10;
  int pow = 7;
  int uppower = 7;
  // コンストラクタ
  Person(this.name);

  // インスタンスメソッド
  int powerup () {
    hp = hp - 5;
    uppower = pow*2;
    return uppower;
  }
}

void main() {
  int attack;
  final taro = Person('太郎');
  attack = taro.powerup();
  print("今の攻撃力は$attackです");
}
```
以下実行結果です．
```
今の攻撃力は14です
```
上のコードはclassの宣言でデフォルトのステータスを用いて，powerupというメソッドで攻撃力を強化する感じです．上のコードで初学者が引っ掛かりやすいポイントはコンストラクタでしょう，まあ要するに初期化しているということなので，最初は深く考えなくていいです．
では以下にクラスの拡張機能である継承と特殊なAbstractクラスについて説明します．暗黙的インターフェイス，Mixupについては一応述べますが，読み飛ばしてもいいと思います．

##### 継承(extend)
　継承はFLutterで重要なクラスです．まずここで継承についての意味を大雑把に説明すると　***引用*** です. 論文作成で考えると，Aという論文の内容を説明する為にBという論文をかくという状況を想定すると，A(親クラス)の値や式（=変数やメソッド）をB(継承した子クラス)で少し変えたりしてしようすることです．
（間違ってたりしたらすいません．）
```
@override
```
上のよくわからない単語を見かけると思いますが，これは親クラスから継承したインスタンス変数やメソッドを上書きしたという宣言です．

##### Abstract(抽象)クラス
 端的に言うと，継承されること前提の親クラスです．StatelessWidgetなどがこれにあたります．つまり親クラスはツリーの幹の部分を表し，そこから継承されたクラス（子クラス）は枝葉というイメージです．
 
##### 暗黙的インターフェイス
　これはオールマイティ？な親クラスなイメージです．通常のクラスが，必要な関数だけを用いるならそのクラス（暗黙的インターフェイス）は全ての関数を実装する必要がある．（らしい）
 申し分けないが，著者の今のレベルでは必要性も十分な理解もできないので，他のwebを参照してもらえるとありがたい．
##### Mixup
　このクラスは簡単に言えば，外付け関数で階層的な暮らす構造にたいして，必要に応じてよそで定義した関数を流用するという考え方に近い．
 
### Widgetの配布パッケージ
　Widgetについて，先に述べた通りFlutterを開発するうえでかなり重要な要素です．筆者はこの型を用いて中身を作製するのがFlutterの開発と考えます．ではどこでWidgetの方を探せばよいのかという疑問に行き着く．そこでお勧めするのが, txetで学んだ方法だ．[YouTube](https://www.youtube.com/watch?v=DccbE5LZryE&list=PL82uaKJraAILRBFE1XhCyfvu-Fclc6vv1&index=2)で無料効率的に調べる方法を学んだ．英語(高校卒業すら怪しいレベル)だが，重要なWidgetに関することは筆者の絶望的な英語能力でも分かったため，英語に自信がない方でもお勧めします．
 
## 結論・次回の展望
　次は本格的にtestとしてtyping用のアプリを作成します．
 なお，上記の内容に誤りや解釈のミスがあれば教えてくださると幸いです．