android - 字段 '_suratList' 应该被初始化,因为它的类型是 'Future>' 不允许为空
问题描述
应用程序调试时执行错误并返回空值
获取波纹管错误调试代码
lib/quran/surat_list_detail.dart:16:27:错误:应初始化字段“_ayatList”,因为其类型“Future<List>”不允许为空。
- “未来”来自“飞镖:异步”。
- “列表”来自“飞镖:核心”。
- “SuratAyat”来自“package:issaq_pro/model/surat_ayat_model.dart”(“lib/model/surat_ayat_model.dart”)。未来<列表> _ayatList;
import 'package:flutter/material.dart';
import 'package:issaq_pro/model/surat_ayat_model.dart';
class SuratListDetail extends StatefulWidget {
final String suratId;
final String suratName;
final String totalAyat;
SuratListDetail(this.suratId, this.suratName, this.totalAyat);
@override
_SuratListDetailState createState() => _SuratListDetailState();
}
class _SuratListDetailState extends State<SuratListDetail> {
Future<List<SuratAyat>> _ayatList;
@override
void initState() {
super.initState();
_ayatList = getSuratAyatData(widget.suratId);
}
ListView _suratListView(data) {
return ListView.builder(
itemCount: data.length,
itemBuilder: (BuildContext context, index) {
return Card(
elevation: 8,
child: _tile(
data[index].ayatNumber,
data[index].ayatText,
),
);
},
);
}
ListTile _tile(
String ayatNumber,
String ayatText,
) =>
ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
leading: Container(
padding: EdgeInsets.only(right: 12),
decoration: BoxDecoration(
border: Border(
right: BorderSide(width: 1, color: Colors.black),
),
),
child: CircleAvatar(
backgroundColor: Colors.amberAccent,
child: Text(
'$ayatNumber',
style: TextStyle(
color: Colors.black,
fontSize: 12,
),
),
),
),
title: Text(
ayatText,
style: TextStyle(fontSize: 24),
),
trailing: Icon(
Icons.keyboard_arrow_right,
color: Colors.white,
size: 30,
),
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
widget.suratName,
style: TextStyle(color: Colors.white),
),
backgroundColor: Colors.black,
),
body: SafeArea(
child: Center(
child: FutureBuilder<List<SuratAyat>>(
future: _ayatList,
builder: (BuildContext context,AsyncSnapshot snapshot) {
if (snapshot.hasData) {
List<SuratAyat> data = snapshot.data;
return _suratListView(data);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return CircularProgressIndicator();
},
),
),
),
);
}
}
楷模 :
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
class QuranSurat {
final String id;
final String suratName;
final String suratText;
final String translate;
final String totalAyat;
QuranSurat(
{required this.id,
required this.suratName,
required this.suratText,
required this.translate,
required this.totalAyat});
factory QuranSurat.createSuratList(Map<String, dynamic> json) {
return QuranSurat(
id: json['id'].toString(),
suratName: json['surat_name'],
suratText: json['surat_text'],
translate: json['surat_terjemahan'],
totalAyat: json['count_ayat'].toString());
}
}
Future<List<QuranSurat>> getSuratList() async {
try {
final apiUrl = 'https://quran.kemenag.go.id/index.php/api/v1/surat';
final response = await http.get(Uri.parse(apiUrl));
List result = json.decode(response.body)['data'];
return result
.map((surat) => new QuranSurat.createSuratList(surat))
.toList();
} catch (err) {
throw err;
}
}
解决方案
只是在 Future 之前添加它应该可以工作
late Future<List<SuratAyat>> _ayatList;
推荐阅读
- python-3.x - 使用python从文本中打印匹配的字符串后的第n行
- dolphindb - 如何在已建立的流表中添加列?
- c++ - 迭代除当前对象之外的所有其他对象
- javascript - 在springboot中用manytomany管理两个代码类的联合
- vba - 我应该怎么做才能修复错误 - 查询表达式中的语法错误(缺少运算符)?
- c++ - 如何访问 STL Stack C++ 中的结构属性?
- database - AWS RDC - Sql 开发人员,无法连接
- php - 设置工艺 cms 时获得许可被拒绝
- r - 在 R `data.table` 中使用命名列表和 `:=` 设置多个列
- r - 从销售数据创建汇总表的功能