Как исправить, что общие настройки возвращают нулевую строку в Flutter?

#android #flutter #sharedpreferences

#Android #flutter #sharedpreferences

Вопрос:

Я использую общие настройки для хранения и загрузки значений карты во Flutter, но получаю сообщение об ошибке

 The following assertion was thrown building UserPro(dirty):
A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 360 pos 10: 'data != null'
  

Конечно, я понимаю, что общие настройки возвращают нулевое строковое значение, но я не понимаю почему, поскольку я жду значение. И как это исправить. Я прилагаю свой код с этим вопросом для вашей справки

—-Сохранение ——

 void setUserValues() async{
    SharedPreferences sharedPrefs = await SharedPreferences.getInstance();
    currentUser.forEach((k,v)=>sharedPrefs.setString(k, v));
  }
  

Здесь CurrentUser содержит карту, содержащую пользовательские данные, такие как «Имя», «Электронная почта» и т.д.

—-Загрузка ——

 import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

SharedPreferences localStorage;


class UserPro extends StatelessWidget{
  final currentUser;

  String name;
  UserPro({this.currentUser}){
    name=localStorage.getString("Name");;
  }
  static Future init() async{
    localStorage = await SharedPreferences.getInstance();
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Center(
        child: Text(
            name,
            style: TextStyle(
              fontSize: 15,
              fontFamily: 'Berlin Sans FB',
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
    );
  }
}
  

Комментарии:

1. Вам нужно дождаться инициализации общих настроек. Где вы вызываете метод init()?

Ответ №1:

Используйте FutureBuilder

 import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

//SharedPreferences localStorage;


class UserPro extends StatelessWidget{
  final currentUser;

  //String name;
  UserPro({this.currentUser});
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Center(
        child: FutureBuilder<SharedPreferences>(
             future: SharedPreferences.getInstance(),
             builder: (context,snapshot){
                if (!snapshot.hasData) {
                   return CircularProgressIndicator();
                  }
            return Text(
            snapshot.data.getString("name"),
            style: TextStyle(
              fontSize: 15,
              fontFamily: 'Berlin Sans FB',
              fontWeight: FontWeight.bold,
            ),
          ),
      },
   ),
    ),
    );
  }
}
  

Комментарии:

1. Мне нужна еще одна помощь, я получаю эту ошибку [ОШИБКА: flutter / lib / ui / ui_dart_state.cc(166)] Необработанное исключение: исключение MissingPluginException (Не найдена реализация для метода GetAll в плагинах канала. flutter.io/shared_preferences ) Я запустил очиститель flutter, pub get и стер данные эмулятора и запустил его снова, но снова получаю ту же ошибку

2. Для меня удаление приложения на эмуляторе и повторное создание проекта решает эту проблему. Часто случается, когда плагин используется в первый раз

3. Я снова стер данные эмулятора, очистил дерево сборки и холодно загрузил эмулятор, и я все еще получаю ту же ошибку, попытался понизить общие настройки с 0.5.10 до 0.5.9, но все еще получаю ту же ошибку

4. Было бы более полезно поднять проблему с репозиторием SharedPreferences на github