![見出し画像](https://assets.st-note.com/production/uploads/images/125293360/rectangle_large_type_2_b72e3fc2ec276d8bef72bf135a107738.png?width=1200)
【50歳】次はflutter_7【我流リスキリング】
50歳超えた文系リーマンには、リスキリングと言われても、「デジタルスキルぐらい身につけないとリストラだ」と言われているような気がしてしょうがない。。
さて、今後のリスキリングについて、「Python」を勉強していましたが、スマホアプリを作ってみたくて、「flutter」に興味を持ち、学習中〜
これまで、Pythonで作成したゲームをChatGPTの力を借りて、flutterで再現しました。(ChatGPTすごい。。)
↓ 前回の記事
学習するコード(flutter)
ChatGPTが作成したコード。
Pythonで40行ぐらいのコードが、150行ぐらいになってます。。
import 'dart:math';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'じゃんけんアプリ2!!',
theme: ThemeData.dark().copyWith(
primaryColor: Colors.green[800],
scaffoldBackgroundColor: Colors.brown[200],
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<String> comHandImg = ["assets/comh0.png", "assets/comh1.png", "assets/comh2.png"];
final List<String> myHandImg = ["assets/myh0.png", "assets/myh1.png", "assets/myh2.png"];
final List<String> message = ["あいこ", "あなたの勝ち", "COMの勝ち"];
final List<String> faceImg = ["assets/face01.png", "assets/face03.png", "assets/face02.png"];
String myHandImage = "";
String comHandImage = "";
String resultMessage = "";
String faceImage = "assets/title.png";
void janken(int myNum) {
Random random = Random();
int comNum = random.nextInt(3);
setState(() {
comHandImage = comHandImg[comNum];
myHandImage = myHandImg[myNum];
resultMessage = message[(comNum - myNum) % 3] + "でーす!\n さあ、もう一度勝負だ!";
faceImage = faceImg[(comNum - myNum) % 3];
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'COMとじゃんけんをしよう!!(改良版)',
style: TextStyle(fontSize: 20),
),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (myHandImage != "" && comHandImage != "") ...[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Image.asset(
myHandImage,
width: 200,
height: 200,
),
),
SizedBox(width: 20),
Text(
'VS',
style: TextStyle(fontSize: 40),
),
SizedBox(width: 20),
Expanded(
child: Image.asset(
comHandImage,
width: 200,
height: 200,
),
),
],
),
SizedBox(height: 20),
Image.asset(
faceImage,
width: 200,
height: 200,
),
],
if (myHandImage == "" && comHandImage == "") ...[
Image.asset(
faceImage,
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.6,
),
],
SizedBox(height: 20),
Padding(
padding: EdgeInsets.symmetric(horizontal: 20),
child: Text(
resultMessage,
style: TextStyle(fontSize: 20, color: Colors.black, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => janken(0),
style: ElevatedButton.styleFrom(
primary: Colors.green[800],
onPrimary: Colors.white,
textStyle: TextStyle(fontSize: 24),
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
),
child: Text('グー'),
),
SizedBox(width: 10),
ElevatedButton(
onPressed: () => janken(1),
style: ElevatedButton.styleFrom(
primary: Colors.green[800],
onPrimary: Colors.white,
textStyle: TextStyle(fontSize: 24),
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
),
child: Text('チョキ'),
),
SizedBox(width: 10),
ElevatedButton(
onPressed: () => janken(2),
style: ElevatedButton.styleFrom(
primary: Colors.green[800],
onPrimary: Colors.white,
textStyle: TextStyle(fontSize: 24),
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
),
child: Text('パー'),
),
],
),
],
),
),
);
}
}
assetsフォルダに下記の名前の画像ファイルを入れてあります。
自分のじゃんけん画像:
myh01.png myh02.png myh03.png
相手のじゃんけん画像:
comh01.png comh02.png comh03.png
タイトル画像:
title.png
今日の学習
コードの内容について、引き続きChatGPTに聞きながら勉強してみます。
今回は、前回の下段の下記コードをChatGPTに聞いてみます。
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
このコードは、Flutterで動的なUIを構築するためのウィジェットを示しています。`MyHomePage`はアプリのメイン画面を表し、`StatefulWidget`を継承しているため、内部で変更可能な状態を持つことができます。このウィジェットの状態は`_MyHomePageState`クラスで管理され、ユーザーの入力やデータの変更などに応じて動的な変化を反映させるのに役立ちます。`_MyHomePageState`クラスは`createState`メソッドで生成され、その中にウィジェットの状態に関するロジックが含まれます。状態が変更されると、関連するUIが更新され、ユーザーに最新の情報を表示します。
何となく理解。。確か前回のStatelessWidgetが動きのない静的なウィジェットだったので、今回のStatefulWidgetは動的なアプリ画面を作るためのウィジェットということかなー
今日はもう1つ次のコードもいってみよー
class _MyHomePageState extends State<MyHomePage> {
final List<String> comHandImg = ["assets/comh0.png", "assets/comh1.png", "assets/comh2.png"];
final List<String> myHandImg = ["assets/myh0.png", "assets/myh1.png", "assets/myh2.png"];
final List<String> message = ["あいこ", "あなたの勝ち", "COMの勝ち"];
final List<String> faceImg = ["assets/face01.png", "assets/face03.png", "assets/face02.png"];
String myHandImage = "";
String comHandImage = "";
String resultMessage = "";
String faceImage = "assets/title.png";
このFlutterコードは、じゃんけんゲームの単純なUIを構築しています。`_MyHomePageState`クラス内で、プレイヤーとコンピューターの手の画像、勝敗メッセージ、および画面上部に表示される顔の画像を管理しています。`myHandImage`、`comHandImage`、`resultMessage`、`faceImage`はそれぞれ、プレイヤーのじゃんけんの手の画像、コンピューターのじゃんけんの手の画像、勝敗メッセージ、および画面上部に表示されるキャラクターの表情の画像のパスを保持しています。
これは、コードを見ても何となく想像がつく内容でした!
今日はここまで
flutter少しずつ学習して、いつかはストアにアプリをリリースしてみたい(という妄想をしながら、本日はここまで)
![](https://assets.st-note.com/production/uploads/images/125297321/picture_pc_68db3586e8654a049c3574cd2cdfc69c.png?width=1200)
![](https://assets.st-note.com/production/uploads/images/125297323/picture_pc_2c88261f6bc15aca3545a4ae426aab14.png?width=1200)