ChatGPTでアプリを作ろうとしています、id:kouki_dan です。
前回のPart2では、どんな画面を作れば良いかをChatGPTに聞いてみて、まず作るといいと言われたスプラッシュ画面を完成させました。
今回はきっと、ログイン/サインアップを作っていくことになると思います。
まずは、ログイン画面とサインアップ画面を作る意思表示をします。そうすると、作らなくてはいけないファイルと、やるべきことを教えてくれました。
でも、人間がコードを書くなんて変ですよね・・・?試しに丸投げしたら、コードを全部教えてくれました。(コードは長いので割愛)
出てきたコードはFirebaseの設定をしていることが前提のコードで、その設定の方法は教えてくれていないのですが、そこは僕がサービスとしてやっておきました。 ただ、出てきたコードをコピペすると、エラーが発生しました。エラー内容をChatGPTに伝えます。
いいですね。どんどん画面ができていきます。作られたコードの一部は、以下のようなクラスが含まれていました。エラーメッセージを僕が読んだところ、_submitForm内で、nullableなプロパティをアンラップせずに使っているようです。
class _LoginScreenState extends State<LoginScreen> { final _formKey = GlobalKey<FormState>(); final _auth = FirebaseAuth.instance; String _email = ''; String _password = ''; void _submitForm() async { if (_formKey.currentState.validate()) { _formKey.currentState.save(); try { await _auth.signInWithEmailAndPassword(email: _email, password: _password); Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => MainScreen()), ); } on FirebaseAuthException catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(e.message)), ); } } }
僕が直してしまっても良かったのですが、何もわかってないふりをしてChatGPTに聞いてみました。
すごい、完全に理解していますね。最初からこっちのコードを出せなかったのはなぜなのでしょう。null安全を考慮してください。と言えばもしかしたら最初からコンパイルの通るコードが生成されたかもしれませんね。
いくつかエラーが出たので、それも全部ChatGPTに直してもらいます。
ここまでやり取りして、ビルドが通るようになりました! ただ、作ったログイン画面はどこからも表示されていません。それも聞いてみました。
せっかくPart2で作ったスプラッシュ画面を上書きしてきています・・・。
どうやら、昔のことは忘れてしまったようなので、再度main.dartの全文を与えてみました
そうすると、いい感じに今のコードを活用したアウトプットを生成してくれました。
その後、「ログインしている場合もログイン画面が出るのは変ではないか」「以前あったタイマーが消えてしまっているのは問題がないか」「ログアウトした後は再度ログイン画面を出すのが適切ではないか」と、質問を積み重ねていって、できたコードがこちらです!!
動いてる様子は、Twitterから
ChatGPTに日本語書いてペーストするだけでログインログアウトができた
— こーき@だん (@kouki_dan) 2023年3月23日
一回で完璧に動くコードは書いてくれないけど、適当にエラーメッセージをコピペしたら直してくれるし、僕がエディタ上で使ったキーはコマンドとVだけ・・・ pic.twitter.com/Xekv0TA5Ec
次はいよいよ、アプリの機能に入っていきますね!