【问题标题】:Flutter: From Stateless Widget to Stateful Widget with MaterialPageRouteFlutter:使用 MaterialPageRoute 从无状态小部件到有状态小部件
【发布时间】:2020-05-24 11:08:41
【问题描述】:

我有一个作为StatelessWidget 的详细信息页面。我的 Feed.dart 中有一个 listview。通过单击 Listview 元素,您可以进入详细信息页面。现在我想将无状态的详细信息转换为有状态的,但在我的提要中 MaterialPageRoute 现在是错误,即未定义命名的参数商店。如何修复错误?

细节为无状态

    class Detail extends StatelessWidget {

  final Shop shop;
  Detail({ this.shop });

  var top = 0.0;

  int segmentedControlGroupValue = 0;
  final Map<int, Widget> myTabs = const <int, Widget>{
    0: Text("Item 1"),
    1: Text("Item 2")
  };

作为有状态小部件的我的详细信息

class Detail extends StatefulWidget {
   @override
  _DetailState createState() => _DetailState(Shop());
}


class _DetailState extends State<Detail> {

  final Shop shop;
  _DetailState(this.shop);


  var top = 0.0;

还有我的提要

class ShopTile extends StatelessWidget {

  final Shop shop;
  ShopTile({ this.shop });

 @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.only(bottom: 16),
      child: InkWell(
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => Detail(shop: shop)),
        );
      },

上面说第一个店铺不再详细定义。因此存在错误。当它是一个无状态的小部件时,它仍然可以工作。你能帮我看看错误在哪里吗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你应该把构造函数放在Detail类而不是_DetailState

    class Detail extends StatefulWidget {
      final Shop shop;
      Detail({ this.shop });
    
       @override
      _DetailState createState() => _DetailState(Shop());
    }
    
    
    class _DetailState extends State<Detail> {
    
      var top = 0.0;
      Shop shopValue; 
    
      @override
      void initState() {
        super.initState();
        // access the property 'shop' using 'widget.shop' 
        shopValue = widget.shop
      }
    }
    

    【讨论】:

    • 我不能那样改变它。 widget.shop 出现此错误:在初始化程序中只能访问静态成员。以及 _DetailState(Shop()) 中的 Shop;收到此错误 -> 位置参数过多:预期为 0,但找到了 1。尝试删除多余的参数。
    【解决方案2】:

    Ashok 的解决方案是正确的。根据您的提要需要 onTap 需要更改

    onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => Detail(shop: widget[index])),
        );
      },
    

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 2021-06-11
      • 2021-08-27
      • 2021-05-19
      • 2019-09-23
      • 2020-10-19
      • 2021-08-29
      • 2020-03-10
      • 2021-12-15
      相关资源
      最近更新 更多