La pagina non può caricare correttamente la pagina nella mia app flutter (AGGIORNATA) Argomenti non validi: la fonte non deve essere nulla
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
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'),
),
),
);
}
}