Skip to content

Instantly share code, notes, and snippets.

@KoheiKanagu
Last active March 4, 2025 09:11
Show Gist options
  • Save KoheiKanagu/60166109704733995b2307b2bdd66b55 to your computer and use it in GitHub Desktop.
Save KoheiKanagu/60166109704733995b2307b2bdd66b55 to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool checkboxListTileValue = false;
bool checkboxListTileWithTextFieldValue = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ListView(
children: [
CheckboxListTile(
key: ValueKey("checkbox_list_tile"),
title: Text("Checkbox List Tile"),
value: checkboxListTileValue,
onChanged: (value) {
setState(() {
checkboxListTileValue = value!;
});
},
controlAffinity: ListTileControlAffinity.leading,
),
CheckboxListTile(
key: ValueKey("checkbox_list_tile_with_text_field"),
title: TextField(
enabled: checkboxListTileWithTextFieldValue,
decoration: InputDecoration(
hintText: "$checkboxListTileWithTextFieldValue",
),
),
value: checkboxListTileWithTextFieldValue,
onChanged: (value) {
setState(() {
checkboxListTileWithTextFieldValue = value!;
});
},
controlAffinity: ListTileControlAffinity.leading,
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:list_tile/main.dart';
void main() {
testWidgets("CheckboxListTileがオンオフできること", (tester) async {
await tester.pumpWidget(MyApp());
final tileFinder = find.byKey(ValueKey("checkbox_list_tile"));
// 初期値はfalse
expect(tester.widget<CheckboxListTile>(tileFinder).value, isFalse);
// タップ
await tester.tap(tileFinder);
await tester.pumpAndSettle();
// 値がtrueになる
expect(tester.widget<CheckboxListTile>(tileFinder).value, isTrue);
// タップ
await tester.tap(tileFinder);
await tester.pumpAndSettle();
// 値がfalseになる
expect(tester.widget<CheckboxListTile>(tileFinder).value, isFalse);
});
testWidgets("TextField付きのCheckboxListTileがオンオフできること", (tester) async {
await tester.pumpWidget(MyApp());
final tileFinder = find.byKey(
ValueKey("checkbox_list_tile_with_text_field"),
);
// 初期値はfalse
expect(tester.widget<CheckboxListTile>(tileFinder).value, isFalse);
// タップ
await tester.tap(tileFinder);
await tester.pumpAndSettle();
// 値がtrueになる
expect(tester.widget<CheckboxListTile>(tileFinder).value, isTrue);
// タップ
await tester.tap(tileFinder);
await tester.pumpAndSettle();
// **値がfalseにならない**
expect(tester.widget<CheckboxListTile>(tileFinder).value, isFalse);
});
testWidgets("TextField付きのCheckboxListTileがオンオフできること fix", (tester) async {
await tester.pumpWidget(MyApp());
final tileFinder = find.byKey(
ValueKey("checkbox_list_tile_with_text_field"),
);
final checkboxFinder = find.descendant(
of: tileFinder,
matching: find.byType(Checkbox),
);
// 初期値はfalse
expect(tester.widget<CheckboxListTile>(tileFinder).value, isFalse);
// タップ
await tester.tap(checkboxFinder);
await tester.pumpAndSettle();
// 値がtrueになる
expect(tester.widget<CheckboxListTile>(tileFinder).value, isTrue);
// タップ
await tester.tap(checkboxFinder);
await tester.pumpAndSettle();
// 値がfalseになる
expect(tester.widget<CheckboxListTile>(tileFinder).value, isFalse);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment