ボタンをグレーアウトする
CoddyのFlutterジャーニー「アプリをインタラクティブにする」セクションの一部。レッスン 21/34。
「最初のボタン」では、onPressed: null によってボタンがグレー表示になりました。今度はアプリの実行中に切り替えられます。ボタンが使えるときはonPressedに関数を渡し、使えないときはnullを渡します。
ElevatedButton(
onPressed: _count > 0 ? _decrease : null,
child: const Text('Minus'),
)? :はメソッドとnullのどちらを使うか選びます。setStateが画面を再構築するたびに比較が再実行されるため、ボタンは自動的にグレー表示になったり、元に戻ったりします。
グレー表示のボタンなら、タップする前に何も起きない理由が伝わります。押せるのに何も起きないボタンは、ただ壊れているように見えてしまいます。
チャレンジ
簡単カート内のアイテム数が0未満になることがあります。アイテムがないときはRemoveボタンをグレー表示にして、_itemsが0より大きい場合にのみ押せるようにしてください。
自分で試してみよう
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(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _items = 0;
void _add() {
setState(() {
_items++;
});
}
void _remove() {
setState(() {
_items--;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Cart')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Items: $_items', style: const TextStyle(fontSize: 24)),
const SizedBox(height: 16),
ElevatedButton(onPressed: _add, child: const Text('Add')),
ElevatedButton(onPressed: _remove, child: const Text('Remove')),
],
),
),
);
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
アプリをインタラクティブにするのすべてのレッスン
自分で練習してみよう: Flutterオンラインコンパイラ