La pagina non può caricare correttamente la pagina nella mia app flutter (AGGIORNATA) Argomenti non validi: la fonte non deve essere nulla

Aug 23 2020

Ho aggiornato la domanda che ho postato: ho un widget per ottenere la pagina da un altro file dart. Ho cambiato tutte le pagine in una pagina usando il metodo extract invece del widget, quindi ho rimosso il futuro dalla prima funzione:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
  var username;
  var userId;
  var lang;
  var savedCourseId;
  var savedDayId;

// getting m_id from status user
  void getUserStatus() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      username = preferences.getString('username');
      userId = preferences.getString('logined_id');
      lang = preferences.getString('lang');
    });
    var url =
        "http://10.0.2.2/jiyan/test/api/users/status_user.php?username=$username";
    var response = await http.get(url);
    var data = jsonDecode(response.body);
    setState(() {
      savedCourseId = data['m_id'];
      savedDayId = int.parse(data['d_id']);
    });
  }
  @override
  void initState() {
    getUserStatus();

    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size.width;
    return Scaffold(
      drawer: buildDrawerMyDrawer(),
      appBar: AppBar(
        backgroundColor: Colors.pink[900],
        title: Text(
          'ژیان و قورئان',
          style: TextStyle(fontSize: 32),
        ),
        centerTitle: true,
      ),
      body: Container(
        padding: const EdgeInsets.only(top: 20),
        decoration: BoxDecoration(
            image: DecorationImage(
          image: AssetImage('./assets/images/background.png'),
          fit: BoxFit.cover,
        )),
        child: Directionality(
          textDirection: TextDirection.rtl,
          child: ListView(
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  buildContainer(size, 1, userId, savedCourseId),
                  buildContainer(size, 2, userId, savedCourseId),
                  buildContainer(size, 3, userId, savedCourseId),
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  buildContainer(size, 4, userId, savedCourseId),
                  buildContainer(size, 5, userId, savedCourseId),
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  buildContainer(size, 6, userId, savedCourseId),
                  buildContainer(size, 7, userId, savedCourseId),
                  buildContainer(size, 8, userId, savedCourseId),
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  buildContainer(size, 9, userId, savedCourseId),
                  buildContainer(size, 10, userId, savedCourseId),
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  buildContainer(size, 11, userId, savedCourseId),
                  buildContainer(size, 12, userId, savedCourseId),
                  buildContainer(size, 13, userId, savedCourseId),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
//
  Container buildContainer(size, courseId, userID, savedCourseId) {
    return Container(
      width: 0.25 * size,
      child: InkWell(
        onTap: courseId <= int.parse(savedCourseId)
            ? () {
                Navigator.of(context).pushNamed('weeks', arguments: {
                  'courseId': courseId,
                  'lang': lang,
                  'savedDayId': savedDayId,
                  'savedCourseID': int.parse(savedCourseId),
                  'userID': userID,
                });
              }
            : null,
        child: Image(
          image: AssetImage(courseId <= int.parse(savedCourseId)
              ? './assets/images/months/course' + courseId.toString() + '.png'
              : './assets/images/months/course' +
                  courseId.toString() +
                  'c.png'),
        ),
      ),
    );
  }
}

Ora l'errore precedente è stato corretto ma viene visualizzato un errore, quindi la pagina viene caricata correttamente con questo errore sulla console di debug:

Invalid argument(s): The source must not be null

Come posso risolverlo adesso?

Risposte

Salim Aug 23 2020 at 21:57

Dopo molti test che ho fatto ho scoperto che l'errore è causato dalla variabile saveCourseId, al caricamento della pagina ha dati nulli quindi mi ha dato questo errore, quindi aggiungo una dichiarazione di condizione se il valore di savedCourseId è nullo mostra solo conatiner altrimenti mostra la pagina dettaglio, quindi nessun errore trovato ora: la pagina è così:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
  var username;
  var userId;
  var lang;
  var savedCourseId;
  var savedDayId;

// getting m_id from status user
  void getUserStatus() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      username = preferences.getString('username');
      userId = preferences.getString('logined_id');
      lang = preferences.getString('lang');
    });
    var url =
        "http://10.0.2.2/jiyan/test/api/users/status_user.php?username=$username";
    var response = await http.get(url);
    var data = jsonDecode(response.body);
    setState(() {
      savedCourseId = data['m_id'];
      savedDayId = int.parse(data['d_id']);
    });
  }
  @override
  void initState() {
    getUserStatus();

    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size.width;
    return Scaffold(
      drawer: buildDrawerMyDrawer(),
      appBar: AppBar(
        backgroundColor: Colors.pink[900],
        title: Text(
          'ژیان و قورئان',
          style: TextStyle(fontSize: 32),
        ),
        centerTitle: true,
      ),
      body: Container(
        padding: const EdgeInsets.only(top: 20),
        decoration: BoxDecoration(
            image: DecorationImage(
          image: AssetImage('./assets/images/background.png'),
          fit: BoxFit.cover,
        )),
        child: Directionality(
          textDirection: TextDirection.rtl,
          child: savedCourseId != null //---------Add this condition
            ? ListView(
                children: [
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceAround,
                    children: [
                      buildContainer(size, 1, userId, savedCourseId),
                      buildContainer(size, 2, userId, savedCourseId),
                      buildContainer(size, 3, userId, savedCourseId),
                    ],
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    children: [
                      buildContainer(size, 4, userId, savedCourseId),
                      buildContainer(size, 5, userId, savedCourseId),
                    ],
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceAround,
                    children: [
                      buildContainer(size, 6, userId, savedCourseId),
                      buildContainer(size, 7, userId, savedCourseId),
                      buildContainer(size, 8, userId, savedCourseId),
                    ],
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    children: [
                      buildContainer(size, 9, userId, savedCourseId),
                      buildContainer(size, 10, userId, savedCourseId),
                    ],
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceAround,
                    children: [
                      buildContainer(size, 11, userId, savedCourseId),
                      buildContainer(size, 12, userId, savedCourseId),
                      buildContainer(size, 13, userId, savedCourseId),
                    ],
                  ),
                ],
              )
            : Container()),
      ),
    );
  }
//
  Container buildContainer(size, courseId, userID, savedCourseId) {
    return Container(
      width: 0.25 * size,
      child: InkWell(
        onTap: courseId <= int.parse(savedCourseId)
            ? () {
                Navigator.of(context).pushNamed('weeks', arguments: {
                  'courseId': courseId,
                  'lang': lang,
                  'savedDayId': savedDayId,
                  'savedCourseID': int.parse(savedCourseId),
                  'userID': userID,
                });
              }
            : null,
        child: Image(
          image: AssetImage(courseId <= int.parse(savedCourseId)
              ? './assets/images/months/course' + courseId.toString() + '.png'
              : './assets/images/months/course' +
                  courseId.toString() +
                  'c.png'),
        ),
      ),
    );
  }
}