Порхание| Dio : Недопустимые аргументы(значения): Не должны быть равны нулю

#flutter #dio

Вопрос:

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

 Invalid argument(s) (value): Must not be null

 

я вызываю api входа в систему, он успешно работает, я получаю данные api о его ответе, но он переходит на часть после печати данных, он не переходит на другой экран, вот код функции входа

 SharedPreferences myPrefs;
Future login() async {
    Dio dio = new Dio();
    
    try {  
      data = {
        'username':"Munib khatri",
        'password':"Munib123",
        'date': formattedDate
      }; 
     await dio
          .post(localhostUrlLogin, data: json.encode(data),)
          .then((onResponse) async {
            print(onResponse.data);

        String name = (onResponse.data['User']['username']);        
        String email = (onResponse.data['User']['email']);
        String designation = (onResponse.data['User']['Designation']);
        String token = (onResponse.data['AccessToken']);

           //here i am calling another api
         data={ 
          "token":token,
          "username":name,
          "leave":"Approved",
          "type":"maternity"
        };
         dio
          .post(localHostUrlleaveCount, data: json.encode(data))
            .then((onResponse) async {
              int sickCount=(onResponse.data['sick']);
              int annualCount=(onResponse.data['annual']);             
                       
              await myPrefs.setInt('sickCount', sickCount);
              await myPrefs.setInt('annualCount', annualCount);
            

            }).catchError((onerror){
          });

        await myPrefs.setString('name', name);
        await myPrefs.setString('email', email);
        await myPrefs.setString('designation', designation);
      

        Navigator.push(
              context, new MaterialPageRoute(builder: (context) => Navigation()));
      
      });
    } catch (e) {
          print(e.toString()); 
      
    }
  }
 

Навигация:

 

class Navigation extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: new ThemeData(primaryColor: Colors.blue),
      home: EmployeeNavigation(),
    );
  }
}

int _selectedTab = 0;
final _pageOptions = [Home(), location(), Profile()];

String getname = "";
String getemail = "";
String getdesignation = "";
String getaccesstoken = "";

// ignore: must_be_immutable
class EmployeeNavigation extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return EmployeeNavigationState();
  }
}

class EmployeeNavigationState extends State<EmployeeNavigation> {
  var email;
  var designation;
  var date;
  bool valuefirst = false;
  String backtext = "";

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
        onWillPop: () async {
          if (_selectedTab == 0) {
            return true;
          }
          setState(() {
            _selectedTab = 0;
          });
          return false;
        },
        child: Scaffold(
            drawer: NavigationDrawerWidget(), //this is a drawer file
            body: _pageOptions[_selectedTab],
            bottomNavigationBar: BottomNavigationBar(
              backgroundColor: Colors.blue[50],
              type: BottomNavigationBarType.fixed,
              currentIndex: _selectedTab,
              onTap: (value) {
                print(value);
                setState(() {
                  _selectedTab = value;
                });
              },
              items: [
                BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
                BottomNavigationBarItem(
                    icon: Icon(Icons.location_on), label: "Location"),
                BottomNavigationBarItem(
                  icon: Icon(Icons.person),
                  label: "Profile",
                ),
              ],
            )));
  }
}


 

я получаю ответ от обоих api, но не могу перейти на другой экран.

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

1. вы тоже можете опубликовать Navigation() код?

2. хорошо ,позвольте мне отредактировать свой вопрос.

3. Где вы инициализируете myPrefs экземпляр?

4. я редактирую свой пост, пожалуйста, проверьте

5. можете ли вы опубликовать два ответа?

Ответ №1:

myPrefs, похоже, не инициализирован !!!

Попробуй:

 Future login() async {
  Dio dio = new Dio();
  var myPrefs = await SharedPreferences.getInstance();
  ...
}
 

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

1. я описал это так SharedPreferences myPrefs; , не так ли это неправильно?

2. Это не C …. В dart его переменная создана, а не инициализирована ! По умолчанию все переменные равны нулю.