トッカンソフトウェア

Flutter 入力項目

Flutterで入力項目のサンプルを作ってみます。


ボタン

lib\main.dart


import 'package:flutter/material.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: OutlinedButton(
            onPressed: () {
              print("Hello World");
            },
            child: Text("Btn"),
          ),
        ),
      ),
    );
  }
}

実行結果


テキスト

lib\main.dart


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Center(child: MyTextField())));
  }
}

class MyTextField extends StatefulWidget {
  @override
  State<MyTextField> createState() {
    return _MyTextFieldState();
  }
}

class _MyTextFieldState extends State<MyTextField> {
  final TextEditingController _controller = TextEditingController();

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _controller,
      onChanged: (text) {
        print(text);
      },
    );
  }
}

実行結果


複数テキスト

lib\main.dart


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Center(child: MyTextField())));
  }
}

class MyTextField extends StatefulWidget {
  @override
  State<MyTextField> createState() {
    return _MyTextFieldState();
  }
}

class _MyTextFieldState extends State<MyTextField> {
  final TextEditingController _controller1 = TextEditingController();
  final TextEditingController _controller2 = TextEditingController();

  @override
  void dispose() {
    _controller1.dispose();
    _controller2.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        TextField(controller: _controller1),
        TextField(controller: _controller2),
        OutlinedButton(
          onPressed: () {
            print(_controller1.text + ":" + _controller2.text);
          },
          child: Text("Btn"),
        ),
      ],
    );
  }
}

実行結果


setState

lib\main.dart


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Center(child: MyTextField())));
  }
}

class MyTextField extends StatefulWidget {
  @override
  State<MyTextField> createState() {
    return _MyTextFieldState();
  }
}

class _MyTextFieldState extends State<MyTextField> {
  final TextEditingController _controller = TextEditingController();
  String _str = '';
  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        TextField(
          controller: _controller,
          onChanged: (text) {
            setState(() {
              _str = text;
            });
          },
        ),
        Text(_str),
      ],
    );
  }
}

setStateはsetState内で修正のあった内容に合わせて画面を再描画します。

実行結果



ページのトップへ戻る