Как установить условное выражение для изображения в Flutter? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть условный оператор для установки изображения из ресурсов Flutter, но он не работает в теле Scaffold.

Как установить условный оператор для изображения в Flutter?

String _backgroundImage;

void _setImage() {
  String _mTitle = "${widget.title.data}";

  if(_mTitle == “Goodmorrning”) {
    _backgroundImage = "assets/mobil_hello/goodmorrning.jpg";
  } else if(_mTitle == “Good day”) {
    _backgroundImage = "assets/mobil_hello/goodday.jpg";
  } 

  print("_mTitle: $_mTitle");  // works
  print("_backgroundImage: $_backgroundImage"); // works
}


Widget build(BuildContext contest) {

  return Scaffold(
    body: new Container(
        decoration: BoxDecoration(
            color: widget.backgroundColor,
                image: new DecorationImage(
                        fit: BoxFit.cover,
                        image: new AssetImage("$_backgroundImage") // not working
                        ),
        ),
    ),
  );
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Здесь вы создали метод void _setImage (), который ничего не возвращает, а также вы не можете использовать его таким образом new AssetImage (_setImage ()) , поэтому вы должны создать метод, подобный String _setImage (), который возвращает String (_backgroundImage), так что вы можете напрямую вызывать этот метод в новом AssetImage (_setImage ()).

Замените свой код на код ниже:

import 'package:flutter/material.dart';
    String _backgroundImage;
    String _setImage() {
      String _mTitle = "${widget.title.data}";

      if(_mTitle == "Goodmorrning") {
        _backgroundImage = "assets/mobil_hello/goodmorrning.jpg";
      } else if(_mTitle == "Good day") {
        _backgroundImage = "assets/mobil_hello/goodday.jpg";
      }
      print("_mTitle: $_mTitle");  
      print("_backgroundImage: $_backgroundImage");
      return _backgroundImage; // here it returns your _backgroundImage value

    }


    Widget build(BuildContext contest) {

      return Scaffold(
        body: new Container(
          decoration: BoxDecoration(
            color: widget.backgroundColor,
            image: new DecorationImage(
                fit: BoxFit.cover,
                image: new AssetImage(_setImage()) //call your method here
            ),
          ),
        ),
      );
    }
0 голосов
/ 01 октября 2018

Вы можете сделать что-то вроде этого:

String _setImage() {
  String _mTitle = "${widget.title.data}";

  if(_mTitle == “Goodmorrning”) {
    return "assets/mobil_hello/goodmorrning.jpg";
  } else if(_mTitle == “Good day”) {
    return "assets/mobil_hello/goodday.jpg";
  } 

  print("_mTitle: $_mTitle");  // works
  print("_backgroundImage: $_backgroundImage"); // works
}


Widget build(BuildContext contest) {

  return Scaffold(
    body: new Container(
        decoration: BoxDecoration(
            color: widget.backgroundColor,
                image: new DecorationImage(
                        fit: BoxFit.cover,
                        image: new AssetImage(_setImage()) // not working
                        ),
        ),
    ),
  );
}
...