颤动的 TabBarView 有时不会在手势滑动时触发
flutter TabBarView sometimes not triggering on gesture swipe
我正在使用 Flutter -Android studio。我有带 TabBarView 控件的主屏幕(2 页)。每个页面都从 sqfite 数据库中获取数据。两者都有相同的有状态小部件 class,但我传递参数以查看数据库和显示。
问题:当我单击 tabbar header 时,显示的数据正常。但是当我滑动标签时,它有时有效,有时无效。按照下面的视频。我已经检查过,如果完成滑动,似乎构建事件不会每次都触发。
带 tabbarview 的主要小部件
screen record
Note that 1st tab has only 1 record, while second has 6 records. tabClick works fine, but swipe sometime not work properly.
body: TabBarView(
controller: _tabController,
children: [
DisplayTransactions(
tmptransType: TransactionType.enIncome,
transacBloc: _transacBloc,
SelectedItemsCount: bRowSelectionCount,
onSelectionChanged: (count) {
setState(() {
bRowSelectionCount = count;
});
},
),
// Center(child: Text("Page 1")),
DisplayTransactions(
tmptransType: TransactionType.enExpense,
transacBloc: _transacBloc,
SelectedItemsCount: bRowSelectionCount,
onSelectionChanged: (count) {
setState(() {
bRowSelectionCount = count;
});
},
//Center(child: Text("Page 2")),
)
],
),
------ > 将数据显示到每个标签栏页面的列表视图中的小部件
class DisplayTransactions extends StatefulWidget {
final TransactionType tmptransType;
final FinanceTransBlock transacBloc;
final Function onSelectionChanged;
int SelectedItemsCount;
/// -1 expense 1 income
DisplayTransactions(
{Key key,
@required this.tmptransType,
@required this.transacBloc,
this.SelectedItemsCount,
this.onSelectionChanged})
: super(key: key);
@override
_DisplayTransactionsState createState() => _DisplayTransactionsState();
}
class _DisplayTransactionsState extends State<DisplayTransactions> {
var isSelected = false;
var mycolor = Colors.white;
// int iselectionCount = 0;
@override
Widget build(BuildContext context) {
widget.transacBloc.transacType = widget.tmptransType;
debugPrint("----------------------------- ${widget.tmptransType}");
if (widget.SelectedItemsCount == 0) {// if no rows selected, then reload database based on trans type, eg expense, or income.. etc
widget.transacBloc.refresh();
}
return StreamBuilder<List<FinanceTransaction>>(
stream: widget.transacBloc.transacations,
builder: (context, snapshot) {
if (snapshot.hasData) {
List<FinanceTransaction> list = snapshot.data;
// return buildTaskListWal(snapshot.data);
return Padding(
应用似乎需要一些时间来检索新数据。尝试在 snapshot.data 上检查 null 并显示一个 circularProgressIndicator。
if (snapshot.data == null) {
return CirgularProgressIndicator();
} else {
//display data
}
我正在使用 Flutter -Android studio。我有带 TabBarView 控件的主屏幕(2 页)。每个页面都从 sqfite 数据库中获取数据。两者都有相同的有状态小部件 class,但我传递参数以查看数据库和显示。 问题:当我单击 tabbar header 时,显示的数据正常。但是当我滑动标签时,它有时有效,有时无效。按照下面的视频。我已经检查过,如果完成滑动,似乎构建事件不会每次都触发。 带 tabbarview 的主要小部件
screen record
Note that 1st tab has only 1 record, while second has 6 records. tabClick works fine, but swipe sometime not work properly.
body: TabBarView(
controller: _tabController,
children: [
DisplayTransactions(
tmptransType: TransactionType.enIncome,
transacBloc: _transacBloc,
SelectedItemsCount: bRowSelectionCount,
onSelectionChanged: (count) {
setState(() {
bRowSelectionCount = count;
});
},
),
// Center(child: Text("Page 1")),
DisplayTransactions(
tmptransType: TransactionType.enExpense,
transacBloc: _transacBloc,
SelectedItemsCount: bRowSelectionCount,
onSelectionChanged: (count) {
setState(() {
bRowSelectionCount = count;
});
},
//Center(child: Text("Page 2")),
)
],
),
------ > 将数据显示到每个标签栏页面的列表视图中的小部件
class DisplayTransactions extends StatefulWidget {
final TransactionType tmptransType;
final FinanceTransBlock transacBloc;
final Function onSelectionChanged;
int SelectedItemsCount;
/// -1 expense 1 income
DisplayTransactions(
{Key key,
@required this.tmptransType,
@required this.transacBloc,
this.SelectedItemsCount,
this.onSelectionChanged})
: super(key: key);
@override
_DisplayTransactionsState createState() => _DisplayTransactionsState();
}
class _DisplayTransactionsState extends State<DisplayTransactions> {
var isSelected = false;
var mycolor = Colors.white;
// int iselectionCount = 0;
@override
Widget build(BuildContext context) {
widget.transacBloc.transacType = widget.tmptransType;
debugPrint("----------------------------- ${widget.tmptransType}");
if (widget.SelectedItemsCount == 0) {// if no rows selected, then reload database based on trans type, eg expense, or income.. etc
widget.transacBloc.refresh();
}
return StreamBuilder<List<FinanceTransaction>>(
stream: widget.transacBloc.transacations,
builder: (context, snapshot) {
if (snapshot.hasData) {
List<FinanceTransaction> list = snapshot.data;
// return buildTaskListWal(snapshot.data);
return Padding(
应用似乎需要一些时间来检索新数据。尝试在 snapshot.data 上检查 null 并显示一个 circularProgressIndicator。
if (snapshot.data == null) {
return CirgularProgressIndicator();
} else {
//display data
}