簡體   English   中英

Flutter Navigator“無法將參數類型'Context'分配給參數類型'BuildContext'”

[英]Flutter Navigator “argument type 'Context' can't be assigned to the parameter type 'BuildContext'”

我試圖將我的 menuButton 類別名稱傳遞到下一頁,並在我的 categoryScreens 上設置下一頁的狀態。

目前我收到一條紅色波浪線,上面寫着“無法將參數類型‘Context’分配給參數類型‘BuildContext’”

import 'package:flutter/material.dart';
import 'package:boardwalk/Screens/categoryScreen.dart';
import 'package:boardwalk/Widgets/headerCategory.dart';
import 'package:path/path.dart';

class homeMenu extends StatelessWidget {
  const homeMenu({Key key}) : super(key: key);
  Padding menuButton(String category, IconData categoryIcon) {
    return Padding(
        padding: const EdgeInsets.symmetric(horizontal: 10),
        child: Container(
          width: 95,
          child: InkWell(
            onTap: ()=>
              Navigator.of(context).push(MaterialPageRoute(builder: (context) => categoryScreen()));
            ,
            child: Column(
              children: <Widget>[
                Center(
                  child: Container(
                    height: 70,
                    width: 70,
                    decoration: BoxDecoration(
                      gradient: LinearGradient(
                        colors: [Colors.deepPurple, Colors.deepPurpleAccent],
                      ),
                      shape: BoxShape.circle,
                    ),
                    child: Icon(
                      categoryIcon,
                      size: 40.0,
                      color: Colors.white,
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(6.0),
                  child: Text(
                    category,
                    style: TextStyle(
                      color: Colors.deepPurpleAccent,
                      fontSize: 14,
                    ),
                  ),
                )
              ],
            ),
          ),
        ));
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.only(top: 8.0),
      child: Container(
        height: 100,
        width: 400,
        child: ListView(scrollDirection: Axis.horizontal, children: <Widget>[
          menuButton('Home', Icons.home),
          menuButton('Eat', Icons.restaurant_menu),
          menuButton('Shop', Icons.store),
          menuButton('Travel', Icons.airplanemode_active),
          menuButton('Play', Icons.local_activity),
          menuButton('Service', Icons.build),
        ]),
      ),
    );
  }
}

如果導航器不喜歡上下文,我不確定在導航器中傳遞什么,我完全不確定此時會發生什么。

實際上,問題是由導入 path.dart 包引起的。 要解決此問題,請將上下文更改為 this.context

我只是將上下文更改為 this.context 並在尋找解決方案 2 小時后解決了問題!

Widget 無權訪問build方法之外的BuildContext 如果您正在創建一個可重用的 Widget 函數,例如這里的menuButton ,那么您必須傳入您在build方法中收到的BuildContext實例。

所以你的代碼變成,

class homeMenu extends StatelessWidget {
  const homeMenu({Key key}) : super(key: key);

  Padding menuButton(BuildContext context, String category, IconData categoryIcon, BuildContext context) {
    return Padding(
        padding: const EdgeInsets.symmetric(horizontal: 10),
        ...
        );
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.only(top: 8.0),
      child: Container(
        height: 100,
        width: 400,
        child: ListView(scrollDirection: Axis.horizontal, children: <Widget>[
          menuButton(context, 'Home', Icons.home),
          ...
        ]),
      ),
    );
  }
}

如果“導入包”沒有幫助,則意味着您應該嘗試以下語句。

聲明BuildContext 上下文; 這是一個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM