Tableウィジェット配下のTableRowをコンポーネント化しようとしたら、value of type 'TableRow' can't be returned from the method 'build' because it has a return type of 'Widget'.
と怒られました。
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return TableRow();
}
}
そして、このページを見ろと言われました。
return_of_invalid_type
という「診断メッセージ」で、宣言されたreturnの型と合わないということで怒られているみたいです。
特にreturnの型を宣言しているつもりはないのですが...。
こちらのページにヒントがありました。同じエラーではないですが。
Flutterでは全ての要素がウィジェットだと思っていたのですが、どうやらTable Row
クラスはウィジェットではないらしいです。その証拠に(?)、明確にWidgetであるTable
やText
では公式ドキュメントで、Widgetであるという文面がありますが、TableRowはA horizontal group of cells in a Table.
という説明になっています。
また、ウィジェットのドキュメントにあるものがTable Row
にはありません。それはInheritance(継承?)の情報です。
TableRow class
https://api.flutter.dev/flutter/widgets/TableRow-class.html
Table class
https://api.flutter.dev/flutter/widgets/Table-class.html
Inheritance
Object > DiagnosticableTree > Widget > RenderObjectWidget > Table
Text class
https://api.flutter.dev/flutter/widgets/Text-class.html
Inheritance
Object > DiagnosticableTree > Widget > StatelessWidget > Text
ちなみにTableRow
はWidgetではないけど、TableCell
はWidgetらしい
ドキュメントにそう書いてあるし、手元で試してみたら確かにコンポーネント化できました。
TableCell class
https://api.flutter.dev/flutter/widgets/TableCell-class.html
Inheritance
Object > DiagnosticableTree > Widget > ProxyWidget >ParentDataWidget<TableCellParentData>
> TableCell
対応としては、 TableRow周りをコンポーネントに切り出したいと思ったら、TableRow
の中身のContainer
とかTableCell
をコンポーネント化するか、Tableごとコンポーネント化するとかなのかなと思います。