我不确定为什么问题会出现在代码中,我尝试了多种修复,但没有任何效果,项目的其他部分也存在类似的问题。我不知道如何修复它,它已经在小部件中具有构建上下文,但我仍然不确定它缺少什么。
缺少“State.Widget”的具体实现。 尝试实现缺少的方法,或者使类成为abstract.dartnon_abstract_class_inherits_abstract_member _MonthDateRowState 类扩展了 State 包:study_sync/Pages/home.dart
class MonthDateRow extends StatefulWidget {
@override
State<MonthDateRow> createState() => _MonthDateRowState();
}
class _MonthDateRowState extends State<MonthDateRow> {
late ApiService _apiService;
late TokenStorageService _tokenStorageService;
List<VideoModel>? _videos;
bool _isLoading = true;
String? _errorMessage;
@override
void initState() {
super.initState();
_tokenStorageService = TokenStorageService();
_apiService = ApiService(
'https://fe00-117-220-236-245.ngrok-free.app/api',
_tokenStorageService,
);
_fetchData();
}
Future<void> _fetchData() async {
setState(() => _isLoading = true);
try {
final token = await _tokenStorageService.getToken() ?? '';
final fetchedVideos = await _apiService.fetchVideos(token);
setState(() {
_videos = fetchedVideos.cast<VideoModel>();
_isLoading = false;
});
} catch (error) {
setState(() {
_isLoading = false;
_errorMessage = error.toString();
});
}
}
List<DateTime> _getNextDates(int count) {
return List.generate(
count,
(index) => DateTime.now().add(Duration(days: index)),
);
}
Widget Build(BuildContext context) {
if (_isLoading) {
return _loadingWidget();
} else if (_errorMessage != null) {
return _errorWidget();
} else if (_videos == null || _videos!.isEmpty) {
return _emptyWidget();
} else {
return _videosWidget();
}
}
Widget _loadingWidget() {
return Scaffold(
appBar: AppBar(title: Text('Scheduled Videos')),
body: Center(child: CircularProgressIndicator()),
);
}
Widget _errorWidget() {
return Scaffold(
appBar: AppBar(title: Text('Error')),
body: Center(child: Text(_errorMessage!)),
);
}
Widget _emptyWidget() {
return Scaffold(
appBar: AppBar(title: Text('Scheduled Videos')),
body: Center(child: Text('No scheduled videos found')),
);
}
Widget _videosWidget() {
final dateList = _getNextDates(20);
int videoIndex = 0;
return Scaffold(
appBar: AppBar(title: Text('Scheduled Videos')),
body: ListView.builder(
itemCount: dateList.length,
itemBuilder: (context, index) {
final date = dateList[index];
final video = _videos![videoIndex % _videos!.length];
videoIndex++;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
DateFormat('EEEE, MMMM d').format(date),
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
),
_buildScheduledVideo(context, video),
],
);
},
),
);
}
Widget _buildScheduledVideo(BuildContext context, VideoModel video) {
return Card(
margin: EdgeInsets.only(bottom: 8),
child: ListTile(
leading: Icon(Icons.video_library),
title: Text(
video.title,
style: TextStyle(fontWeight: FontWeight.bold),
),
subtitle: Text(video.videoUrl),
trailing: Text(DateFormat.jm().format(video.scheduledDate)),
),
);
}
}
请提出修复建议
您缺少抽象
build
方法的实现
这就是你所做的,但这不是构建方法。
Widget Build(BuildContext context) {
if (_isLoading) {
return _loadingWidget();
} else if (_errorMessage != null) {
return _errorWidget();
} else if (_videos == null || _videos!.isEmpty) {
return _emptyWidget();
} else {
return _videosWidget();
}
}
像这样修改方法签名
@override
Widget build(BuildContext context) {}
希望对您有帮助。