InkWell小部件需要Material小部件祖先

时间:2019-06-20 04:38:11

标签: flutter dart flutter-layout

我在行中将InkWell添加为小部件,但这会引发错误:

flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown building InkWell(gestures: [tap], clipped to BoxShape.rectangle,
flutter: dirty, state: _InkResponseState<InkResponse>#0e6c5):
flutter: No Material widget found.
flutter: InkWell widgets require a Material widget ancestor.

这是我的代码:

Container(
  color: Colors.red,
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      InkWell(
        onTap: (){
          //Forgot password Tapped
        },
      child: Text(Constants.forgotPassword),),
    ],
),

4 个答案:

答案 0 :(得分:3)

用脚手架包裹InkWell类,然后问题就解决了。

答案 1 :(得分:2)

Inwell类将始终与材料类一起使用

请尝试以下代码。

代码:将InkWell类与材料类包装起来

  Material(
          child: InkWell(
      onTap: (){
        //Forgot password Tapped
      },
    child: Text(Constants.forgotPassword),),
  ),

谢谢

答案 2 :(得分:0)

没有说Material应该被添加为父亲。

如果它是StatelessWidget,而您按下该页面,他会自动希望它是小部件的父级,例如Scaffold

这也发生在我身上,最后Flutter中的许多组件已经扩展了Material,所以问题可能会更快。

答案 3 :(得分:0)

有两种方法可以解决上述问题。

  1. InkWell替换GestureDetector

     GestureDetector(
       onTap: () {
    
     },);
    
  2. InkWell 包裹 Material,因为 InkWell 需要 Material 小部件包裹

     InkWell(
       onTap: () {
    
         },);
    

注意:要引入 Material 小部件,您可以直接包含一个小部件,也可以使用包含 Material 本身的小部件,例如卡片、对话框、抽屉或脚手架。< /strong>