初心者　Flutter x MySQL8 に挑戦する 19  with mysql_client

# 繋がって、書き直して、書き加えて、読み出す。

　昨日は「MySQL5.7なら動くmysql1プロジェクトをmysql_client風に書き換える」という方向で行ったけれど、今日は逆コース、MySQL8で動いているmysql_clientのサンプルをflutterのカウンターアプリ風に書き換える。

　何が違うか、というと、前者はfileが2枚、後者はペライチ。こっちのfileにあるべきものがあっちに行って、こっちで呼べてない、系のミスを、まだまだ私は自己解決できないので、ペライチはもしかして一つの解決策かも知れないと思うのだ。　

　とはいえ、ペライチは何がイヤかといったら、fileが長い。ここに貼ったらウザイだろうなあ、と思うほど長い。でも、貼っちゃう。笑　

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter MySQL Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: const MyHomePage(title: 'Flutter MySQL Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  Future<void> _defi() async {
    print("Connecting to mysql server...");

    // create connection
    final conn = await MySQLConnection.createConnection(
      host: "127.0.0.1",
      port: 3306,
      userName: "root",
    password: "*****",
      databaseName: "aetatum", // optional
    );

    await conn.connect();

    print("Connected");

    // update some rows
    var res = await conn.execute(
      "UPDATE users SET age = :age WHERE id = 2",
      {"age": 57},
    );

    print(res.affectedRows);

    // insert some rows
    res = await conn.execute(
      "INSERT INTO users (id, name, email, age) VALUES (:id, :name, :email, :age)",
      {
      "id": null,
      "name": "Jane",
      "email": "jane@jane.com",
      "age": "24",
      },
    );

    print(res.affectedRows);

    // make query
    var result = await conn.execute("SELECT * FROM users");

    // print some result data
    print(result.numOfColumns);
    print(result.numOfRows);
    print(result.lastInsertID);
    print(result.affectedRows);

    // print query result
    for (final row in result.rows) {
      // print(row.colAt(0));
      // print(row.colByName("title"));

      // print all rows as Map<String, String>
      print(row.assoc());
    }

    // close all connections
    await conn.close();
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(

        title: Text(widget.title),
      ),
      body: Center(

        child: Column(

          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'Push button to move:',
            ),

            Text(
              style: Theme.of(context).textTheme.headline4,
              'これなら動く？'
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _defi,
        tooltip: 'vas-y',
        child: const Icon(Icons.add),
      ),
    );
  }
}
```

　conn.closeがエラーじゃなくなっている。これがペライチ効果だろう。
　が、最初はonPressedのところが昨日と同じエラーだった。なので沈思黙考の後、関数の引数指定を止めてみた。と、表面的にはエラーが消える。　

　では、いってみましょう。行け！　
　動かん。　
　行け、行け、行け〜！（連打）　

　行ったわ、最後まで。
　しかも、連打したので、consoleに大量のプリントが出た。新規登録のJaneさんはIDだけどんどん自動でインクリメントしながら、大量に登録された。

　次は落ち着いて、一回だけクリック。ちゃんと動くじゃん。またJaneさんが増えてしまった。　

　すると何？　私はm1macに対してさえ、気が短すぎると？　

　まあいいか。　

## 明日はなんとかして、select結果をリスト表示したい〜！

https://qiita.com/dongri727/items/b7167b3a35883179c336 

https://qiita.com/dongri727/items/c32d328aed5dcca3bba1