1

コンテナーであり、画像へのパスと画像のタイトルの 2 つの引数を取るウィジェットを作成しようとしています。これまでのウィジェット コードは次のとおりです。


class CharacterBox extends StatelessWidget {
  final String imagePath;
  final String characterName;
  CharacterBox(this.imagePath, this.characterName);
  @override
  Widget build(BuildContext context) {
    final CharacterBox args = ModalRoute.of(context).settings.arguments;
    return Container(
      margin: EdgeInsets.all(20.0),
      height: 200,
      width: 100,
      child: Column(
        children: [
          Expanded(
            child: Image(
              image: AssetImage(args.imagePath),
              alignment: Alignment.center,
              fit: BoxFit.contain,
            ),
          ),
          Container(
            margin: EdgeInsets.all(5.0),
            child: Text(
              args.characterName,
              style: TextStyle(color: Colors.white),
            ),
          )
        ],
      ),
      decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(5.0),
          color: Color.fromARGB(255, 252, 70, 82)),
    );
  }
}

そして、次を使用して引数を渡します。

body: SafeArea(
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              CharacterBox("assets/artwork.png", "Character"),
            ],
          ),
        ),

ただし、次のエラーが表示されます。

The getter 'imagePath' was called on null.
Receiver: null
Tried calling: imagePath

このドキュメンテーションで行っていたので、ModalRoute 宣言に関連していると思います。しかし、私はまだ黙っていませんでした。

4

3 に答える 3

1

コンストラクターを介して既に引数を渡しているため、使用しているのは Removeargs.imagePathのみである必要があります。imagePathfinal CharacterBox args = ModalRoute.of(context).settings.arguments;

コードの読みやすさとパフォーマンスを向上させるために、次のことをお勧めします。

constコンストラクターに追加できます。これに変更し、明確にするために名前パラメーターを使用します。

class CharacterBox extends StatelessWidget {
  final String imagePath;
  final String characterName;
  const CharacterBox({
    Key key,
    this.imagePath,
    this.characterName
  }) : super(key: key);
于 2020-11-22T09:04:38.307 に答える
0

書く必要はありませんしargs.imagePathargs.characterName

imagePathあなたは直接それを呼び出すことができますcharacterName

     Image(
          image: AssetImage(imagePath),
          alignment: Alignment.center,
          fit: BoxFit.contain,
        ),

これは、フラッターでルート名ナビゲーションを使用するためのものです

于 2020-11-22T09:07:04.880 に答える