ページがフラッターアプリで正しくページを読み込めません(更新)無効な引数:ソースをnullにすることはできません
Aug 23 2020
投稿した質問を更新しました:別のダーツファイルからウィジェットを取得するページがあります。ウィジェットの代わりにextractメソッドを使用して1ページのすべてのページを変更したので、最初の関数からfutureを削除しました:
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'),
),
),
);
}
}
以前のエラーは修正されましたが、エラーが表示され、デバッグコンソールでこのエラーが表示されてページが正常に読み込まれます。
Invalid argument(s): The source must not be null
どうすればこれを解決できますか?
回答
Salim Aug 23 2020 at 21:57
多くのテストを行った後、エラーの原因はsavedCourseId変数であることがわかりました。ページの読み込み時に、データがnullであるため、このエラーが発生しました。したがって、savedCourseIdの値がnullの場合は、条件ステートメントを追加します。conatinerを表示するか、ページを表示します。詳細、したがってエラーは見つかりませんでした:ページは次のようになります:
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'),
),
),
);
}
}