Flutter 抽头上的颤振开关抛出失败的断言

Flutter 抽头上的颤振开关抛出失败的断言,flutter,push,swiper,navigator,Flutter,Push,Swiper,Navigator,我已经实现了一个Swier小部件,它在一张卡片中显示图书信息,下一步是当卡片被录音以推送一个新页面时,下面是代码: class CardSwiper extends StatelessWidget { final List<Book> books; CardSwiper(this.books); @override Widget build(BuildContext context) { return new Scaffold( ba

我已经实现了一个Swier小部件,它在一张卡片中显示图书信息,下一步是当卡片被录音以推送一个新页面时,下面是代码:

class CardSwiper extends StatelessWidget {


  final List<Book> books;


  CardSwiper(this.books);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        backgroundColor: Colors.blueGrey,
        body: new Swiper(
          //containerHeight: 25.0,
          itemBuilder: (BuildContext context, int index) {
            return _getSwiperCardContent(index, context);
          },

          indicatorLayout: PageIndicatorLayout.COLOR,
          autoplay: false,
          itemCount: books.length,
          pagination: null,
          control: null,
          viewportFraction: 0.6,
          scale: 0.9,
        ));
  }

  _getSwiperCardContent(int index, BuildContext context){
    return Card(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(7.0),
        ),
        elevation: 10,
        color: Colors.white,
        child: Column(
          children: <Widget>[
            Flexible(
              child: Align(
                  alignment: Alignment.center,
                  child: InkWell(
                    onTap: _goToBookPage(context),
                    child: Image.network(
                      this.books[index].picture,
                    ),
                  )
              ),
              flex: 6,
            ),

            Flexible(
              child: Align(
                alignment: Alignment.center,
                child: Container(
                  child: Text(
                    this.books[index].title,
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
              flex: 1,
            ),


            Flexible(
              child: Align(
                alignment: Alignment.center,
                child: Text(
                  this.books[index].author,
                  style: TextStyle(
                    color: Colors.grey[500],
                  ),
                ),
              ),
              flex: 1,
            )
          ],
        ),

    );
  }

  _goToBookPage(BuildContext context){
    Navigator.of(context)
        .push(MaterialPageRoute(builder: (context) => BookPage("title", this.books)));
  }
}
class CardSwiper扩展了无状态小部件{
最终书目;
卡片刷卡器(本书);
@凌驾
小部件构建(构建上下文){
归还新脚手架(
背景颜色:颜色。蓝灰色,
车身:新泳衣(
//集装箱重量:25.0,
itemBuilder:(构建上下文,int索引){
返回_getSwiperCardContent(索引、上下文);
},
indicatorLayout:PageIndicatorLayout.COLOR,
自动播放:错误,
itemCount:books.length,
分页:空,
控件:null,
视口分数:0.6,
比例:0.9,
));
}
_getSwiperCardContent(int索引,BuildContext上下文){
回程卡(
形状:圆形矩形边框(
边界半径:边界半径。圆形(7.0),
),
标高:10,
颜色:颜色,白色,
子:列(
儿童:[
灵活的(
子对象:对齐(
对齐:对齐.center,
孩子:InkWell(
onTap:_goToBookPage(上下文),
孩子:Image.network(
这个.图书[索引].图片,
),
)
),
弹性:6,
),
灵活的(
子对象:对齐(
对齐:对齐.center,
子:容器(
子:文本(
此.books[index].title,
样式:TextStyle(
fontWeight:fontWeight.bold,
),
),
),
),
弹性:1,
),
灵活的(
子对象:对齐(
对齐:对齐.center,
子:文本(
本.图书[索引].作者:,
样式:TextStyle(
颜色:颜色。灰色[500],
),
),
),
弹性:1,
)
],
),
);
}
_goToBookPage(构建上下文){
导航器(上下文)
.push(materialpage(builder:(context)=>BookPage(“title”,this.books));
}
}
结果是以下错误:

在生成过程中调用setState()或markNeedsBuild()。

'package:flatter/src/widgets/navigator.dart':失败的断言:第1762行位置12:“_debugLocked':不正确。


当点击Swiper项目时,我应该如何实现新的\u goToBookPage方法?

不是这样做,您可能希望用GestureDetector小部件包装整个小部件,并用匿名函数调用方法

GestureDetector(
  onTap: () {
    // Your_method_call_here
  },

  child: Your_Widget(
      ....
    )
);

感谢这项工作,将InkWell更改为GestureDetector比用匿名函数替换方法调用更重要,原因是什么?我不太清楚您的方法接收到什么,但当您执行这样的直接调用时,它确实从其父小部件接收到一些参数,而不仅仅是上下文。在使用Navigator之前,您可以在方法内部使用print方法来验证它。