问题描述
我正在尝试进行 API 调用并获取 JSON 对象列表作为回报。使用此 JSON 数据,我正在尝试创建一个自定义小部件。代码运行良好,小部件已制作完成,但我需要在成功构建后手动热重载才能在屏幕上实际呈现这些卡片。
这是我尝试制作自定义小部件的地方。
import 'dart:collection';
import 'package:beyond_static_app/screens/allTheBrains/projectBrain.dart';
import 'package:beyond_static_app/screens/profileCards/cardContent.dart';
import 'package:beyond_static_app/screens/profileCards/reusableCard.dart';
import 'package:Flutter/material.dart';
class CardCreator {
late List<Widget> cards = [];
Future<List> getAllCards() async {
var projects = await ProjectOptions().getProjects();
int length = projects.length;
for (int i = 0; i < length; i++) {
LinkedHashMap project = projects[i];
int id = project['id'] as int;
String projectName = project['ProjectName'] as String;
cards.add(
ReusableCard(
colour: Color(0xFF7D00B5),cardChild: CardContent(
title: projectName,state: 'active',),id: id,);
}
print(cards);
return cards;
}
CardCreator() {
this.getAllCards();
}
}
这是我尝试显示自定义小部件列表的地方,但每次我想在屏幕上看到它们时,我都必须手动热重新加载它。
import 'package:beyond_static_app/screens/allTheBrains/projectCards.dart';
import 'package:beyond_static_app/screens/dashboardCards/blueCard.dart';
import 'package:beyond_static_app/screens/dashboardCards/purpleCard.dart';
import 'package:beyond_static_app/screens/dashboardCards/userCard.dart';
import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';
import 'dashboardCards/bottomCard.dart';
import 'package:beyond_static_app/screens/dashboardCards/createNewCard.dart';
class DashBoard extends StatefulWidget {
@override
_DashBoardState createState() => _DashBoardState();
}
class _DashBoardState extends State<DashBoard> {
CardCreator cc = CardCreator();
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Container(
padding: EdgeInsets.only(left: 8.0,right: 8.0),child: CustomScrollView(
slivers: [
SliverList(
delegate: SliverChildListDelegate(
[
SizedBox(
height: 10,UserCard(),SizedBox(
height: 10,InkWell(
child: NewCard(),onTap: () {
Navigator.pushNamed(context,'/new_project');
},Container(
child: SingleChildScrollView(
child: Column(
children: cc.cards,Row(
children: [
Expanded(child: BlueCard()),SizedBox(width: 10.0),Expanded(child: PurpleCard()),],// SizedBox(
// height: 10,// ),BottomCard(),);
}
}
解决方法
发生这种情况是因为您没有等待异步函数返回。要解决此问题,您可以在此部分使用 FutureBuilder
Container(
child: SingleChildScrollView(
child: Column(
children: cc.cards,),