【问题标题】:Flutter: Passing image between pagesFlutter:在页面之间传递图像
【发布时间】:2020-09-10 10:56:48
【问题描述】:

我在这里有一份来自我的应用程序的草稿作为演示,我正在尝试将图像从一个页面传递到另一个页面,但这不是问题,可以从主页和图像页面这两个页面访问接收页面 (CandyJar)。 Imagepage 将蛋糕图像(AssetImage('images/cake.png')) 传递到 Candyjar 页面 & 主页只是导航到 CandyJar 页面; 从主页导航时我的问题在这里我希望它显示神秘框图像(AssetImage('images/mystrybox.png'),除非蛋糕图像已经从图像页面传递,那么它将显示蛋糕图像。 我知道描述令人困惑,但我试图尽可能地具有描述性&这里是三个页面的代码示例以澄清更多

主页:

    void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        RaisedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => CandyJar(),
              ),
            );
          },
          child: Text('Got to candy jar page'),
        ),
        SizedBox(
          height: 40.0,
        ),
        RaisedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => ImagePage(),
              ),
            );
          },
          child: Text('Go to Image page'),
        )
      ],
    );
  }
}

CandyJar 页面

 class CandyJar extends StatefulWidget {
  CandyJar({
    this.cakeImage,
  });
  final ImageProvider cakeImage;
  @override
  _CandyJarState createState() => _CandyJarState();
}

class _CandyJarState extends State<CandyJar> {
  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(25.0),
      padding: EdgeInsets.all(10.0),
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(25.0),
        color: Colors.white30,
      ),
      child: Image(
//image: AssetImage('images/mysterybox.png'), Show this Image when navigating from Homepage unless the Cake image has been already passed through from Image page then it will show the cake image.
        image: widget.cakeImage,
        height: 70.0,
        width: 70.0,
      ),
    );
  }
}

图片页面:

    class ImagePage extends StatefulWidget {
  @override
  _ImagePageState createState() => _ImagePageState();
}

class _ImagePageState extends State<ImagePage> {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Image(
          image: AssetImage('images/cake.png'),
        ),
        RaisedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => CandyJar(
                  cakeImage: AssetImage('images/cake.png'),
                ),
              ),
            );
          },
          child: Text(
              'Pass cake image to Candy Jar Page & replace the mysterybox image'),
        ),
      ],
    );
  }
}

非常感谢您在此问题上的任何帮助将不胜感激:D

【问题讨论】:

  • 所以您想将图像路径传递给所有小部件
  • 我想从 Imagepage 传递图像作为奖励,这样在从主页导航时它不会显示,直到它被传递

标签: flutter dart


【解决方案1】:

所以基本上你可以做如下所示的事情:

widget.cakeImage ?? AssetImage('images/mysterybox.png')

“??”表示如果 widget.cakeImage 为 null 则显示默认图像 否则显示在 widget.cakeImage 中传递的图像

【讨论】:

  • 非常感谢,双问号符号完美运行
  • 很高兴知道这解决了您的问题。随时我的朋友!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多