リストビューの 2 つの列を識別するために使用できるコンポーネントを構築しようとしています。このタイトル バーを Scaffold のアプリ バーとして実装して、Scaffold の本体部分に ListView を実装できるようにしたいと考えています。このパターンをアプリ全体で複数回使用したいので、そのたびに粗雑なタイトル バーを実装したくないため、これを実現したいと考えています。
AppBar コンポーネントに必要なのは PreferredSizeWidget の実装だけなので、これはかなり簡単だと思いました。
import 'package:flutter/material.dart';
class ListTitleBar extends StatefulWidget implements PreferredSizeWidget {
final String _left;
final String _right;
ListTitleBar(this._left, this._right);
@override
State<StatefulWidget> createState() => new ListTitleBarState(_left, _right);
@override
Size get preferredSize {
new Size.fromHeight(20.0);
}
}
class ListTitleBarState extends State<ListTitleBar> {
String _leftTitle;
String _rightTitle;
ListTitleBarState(this._leftTitle, this._rightTitle);
@override
Widget build(BuildContext context) {
return new Container(
decoration: new BoxDecoration(
color: Colors.redAccent,
border: new Border.all(color: Colors.black),
),
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
///Left Column Title
new Column(
children: <Widget>[
new Container(
color: Colors.redAccent,
padding: const EdgeInsets.all(10.0),
child: new Text(_leftTitle,
style: new TextStyle(
color: Colors.white,
fontSize: 18.0
),
),
)
],
),
///Right Column Title
new Column(
children: <Widget>[
new Container(
color: Colors.redAccent,
padding: const EdgeInsets.all(10.0),
child: new Text(_rightTitle,
style: new TextStyle(
color: Colors.white,
fontSize: 18.0
),
),
)
],
),
],
),
);
}
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
}
私の質問は、PreferredSizeWidget を正常に実装するため、または目標を達成するために他に何が必要かということです。現在、次のスタック トレースが表示されていますが、これは実装のいくつかの側面を無視していることを示しているようです。
══╡ウィジェット ライブラリによって例外が発生しました ╞═ ... I/flutter ( 9130): レシーバー: null I/flutter ( 9130): 呼び出しを試みました: height I/flutter ( 9130): I/flutter ( 9130): 例外がスローされたときのスタックは次のとおりでした: I/flutter ( 9130): #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:46:5) I/flutter ( 9130): #1 ScaffoldState.build (package:flutter/src/material/scaffold.dart:1447:57) I/flutter ( 9130): #2 StatefulElement.build (package:flutter/src/widgets/framework.dart:3713:27) I/flutter ( 9130): #3 ComponentElement.performRebuild (パッケージ:flutter/src/widgets/framework.dart:3625:15) I/flutter ( 9130): #4 Element.rebuild (パッケージ:flutter/src/widgets/framework.dart:3478:5) I/flutter ( 9130): #5 ComponentElement._firstBuild (パッケージ:flutter/src/widgets/framework.dart:3605:5) I/flutter ( 9130): #6 StatefulElement._firstBuild (パッケージ:flutter/src/widgets/framework.dart:3752:11) I/flutter ( 9130): #7 ComponentElement.mount (パッケージ:flutter/src/widgets/framework.dart:3600:5) I/flutter ( 9130): #8 Element.inflateWidget (パッケージ:flutter/src/widgets/framework.dart:2890:14) I/flutter (9130): #9 Element.updateChild (パッケージ:flutter/src/widgets/framework.dart:2693:12) I/flutter (9130): #10 ComponentElement.performRebuild (パッケージ:flutter/src/widgets/framework.dart:3636:16)
ベストアンサー1
return
のステートメントを忘れたと思いますpreferredSize
。次のようになるはずです:
Size get preferredSize { return new Size.fromHeight(20.0); }