Флаттер: "(путь): не должен быть нулевым" при проверке условных файлов - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь создать фон для своего приложения, которое либо пользователь выбрал ранее, либо использовать изображение по умолчанию, если файл не найден.

Код очень прост:

decoration: BoxDecoration(
  color: Colors.blueAccent,
  image: DecorationImage(
    image: File(customImageFile).existsSync() ? FileImage(File(customImageFile)) : backgroundImage,
    fit: BoxFit.fill,
  ),
),

Приложение аварийно завершает работу в условной строке, говоря, что (путь): не должен быть нулевым.Я пробовал много способов обойти это, но то, что я специально говорю, это «если путь к файлу пуст, не используйте его. Используйте это изображение, которое я сделал для вас ранее».Но тогда это все равно расстраивается.

Есть ли другой способ, которым я могу достичь желаемого результата здесь?

Редактировать:

По запросу @Vikas, более полный пример кодаучаствует:

ImageProvider backgroundImage;
String themeLoader = 'blueTheme';
String customImageFile;

// Декларация

void initState() {
  _loadThemeSettings();
  super.initState();
}

// Инициализация

_loadThemeSettings() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  themeLoader = prefs.getString('themeColour' ?? 'blueTheme');
  customImageFile = prefs.getString('customImageFile' ?? 'empty')
  if (customImageFile != null) {
    if(File(customImageFile).existsSync()) {
      prefs.setString('customImageFile', customImageFile);
    } else {
      print('Path not valid');
    }
  } else {
    print('customImageFile is NULL');
  }

    if (themeLoader != null) {
          switch (themeLoader) {
            case 'blueTheme':
              {
                colorBloc.changeColor('blueTheme');
                setState(() {
                  backgroundImage = ExactAssetImage('lib/images/bg_blue_new.jpg');
                  buttonTheme = AppState.blueTheme;
                }
              }
              break;

            } else {
              print('Theme loader was NULL');
            }
          }
        }
      }

// Загрузка ранее выбранных тем во время выполнения.Здесь есть несколько цветов в выражении case, но все они идентичны, и вы поймете, что.

@override
Widget build(BuildContext context) {
   return WillPopScope(
  onWillPop: () => _exitApp(context),
  child: Scaffold(
    body: SafeArea(
      child: BlocProvider<ColorBloc>(
        bloc: colorBloc,
        child: Container(
          child: Stack(
            children: [
              Container(
                decoration: BoxDecoration(
                  color: Colors.blueAccent,
                  image: DecorationImage(
                    image: (customImageFile != null && File(customImageFile).existsSync()) ? FileImage(File(customImageFile)) : backgroundImage,
                    fit: BoxFit.fill,
                  ),
                ),

// вот где он находится, все остальное работает нормально.Остальная часть метода сборки не имеет отношения к этой проблеме и работает, но здесь она в любом случае:

                    child: SafeArea(
                      child: Stack(
                        children: <Widget>[
                          Column(
                            mainAxisAlignment: MainAxisAlignment.end,
                            children: <Widget>[
                              themesVisible == true
                                  ? SizedBox()
                                  : buttonRow(),
                              SizedBox(
                                height: 20,
                              ),
                            ],
                          ),
                          Padding(
                            padding: EdgeInsets.all(15),
                            child: topMenuRow(),
                          ),
                        ],
                      ),
                    ),
                  ),
                  BlocProvider<CustomToggleBloc>(
                  bloc: customToggleBloc,
                    child: Center(
                      child: Container(
                        child: themesVisible == true ? singlePlayerThemes(singlePlayerCallbacks: callBacks) : scoreText(),
                      ),
                    ),
                  ),//bloc
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...