简体   繁体   English

颤动 TabBarView 有时不会在手势滑动时触发

[英]flutter TabBarView sometimes not triggering on gesture swipe

I am using Flutter -Android studio.我正在使用 Flutter -Android 工作室。 I have main screen with TabBarView control (2 pages).我的主屏幕带有 TabBarView 控件(2 页)。 each page get data from sqfite database.每个页面从 sqfite 数据库中获取数据。 both have same statefull widget class, but I pass parameter to look into database and display.两者都有相同的 statefull 小部件类,但我传递参数来查看数据库和显示。 Issue : when I click tabbar header , data displayed is Ok.问题:当我单击 tabbar header 时,显示的数据正常。 But when I swipe tabs, it sometimes work and sometimes does not work.但是当我滑动选项卡时,它有时会起作用,有时不起作用。 as per below video.按照下面的视频。 I have check and seems that Build event is not trigger every if Swipe was done.我已经检查过,如果完成滑动,似乎不会每次都触发 Build 事件。 Main widget with tabbarview带有 tabbarview 的主要小部件

screen record屏幕记录

Note that 1st tab has only 1 record, while second has 6 records.请注意,第一个选项卡只有 1 条记录,而第二个选项卡有 6 条记录。 tabClick works fine, but swipe sometime not work properly. tabClick 工作正常,但滑动有时无法正常工作。

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")),
      )
    ],
  ),

------ > Widget to display data into listview for each tabbar page ------ > 小部件将数据显示到每个标签栏页面的列表视图中

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(

It looks like the app is taking some time to retrieve the new data.该应用程序似乎需要一些时间来检索新数据。 Try checking for null on the snapshot.data and display a circularProgressIndicator.尝试在 snapshot.data 上检查 null 并显示一个 circleProgressIndicator。

if (snapshot.data == null) {
  return CirgularProgressIndicator();
 } else {
//display data
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM