大家好,我新的Flutter,并试图使一个新闻应用程序与API。但我有一个错误,在我的主页类,在
itemBuilder: (context, index) => listTile(articles[index])
在(articles[index])
中,有一个红色下划线表示“预期有2个位置参数,但找到1个。尝试添加缺失的参数”。在我添加“BuildContext上下文”以在ListTile类中添加InkWell小部件后,发生此错误
Widget listTile(Article article, BuildContext context) {
return InkWell(
onTap: (){
Navigator.push(
context, MaterialPageRoute(
builder: (
context) => NewsDetail(
article: article))
);
},
这是我完整的主页类代码
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:medreminder/NewsArticle/components/list_tile.dart';
import 'package:medreminder/NewsArticle/models/article_models.dart';
import 'package:medreminder/NewsArticle/services/api_service.dart';
class NewsHomePage extends StatelessWidget {
//const NewsHomePage({super.key});
ApiService client = ApiService();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Get.isDarkMode?Colors.grey[600]:Colors.white,
leading: IconButton(
onPressed: ()=>Get.back(),
icon: Icon(Icons.arrow_back_ios,
color: Get.isDarkMode?Colors.white:Colors.grey
),
),
title: Text("News & Article", style: TextStyle(
color: Get.isDarkMode?Colors.white:Colors.black
),),
),
body: FutureBuilder<List<Article>>(
future: client.getArticle(),
builder: (BuildContext context, AsyncSnapshot<List<Article>> snapshot) {
if(snapshot.hasData&&snapshot.data!=null&& snapshot.data!.isNotEmpty){
List<Article>? articles = snapshot.data;
return ListView.builder(
itemCount: articles!.length,
itemBuilder: (context, index) => listTile(articles[index])
);
}
return Center(child: CircularProgressIndicator(),);
},
),
);
}
}
这是我的ListTile类
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:medreminder/NewsArticle/models/article_models.dart';
import 'package:medreminder/NewsArticle/pages/news_detail.dart';
import 'package:medreminder/Reminder/ui/theme.dart';
Widget listTile(Article article, BuildContext context) {
return InkWell(
onTap: (){
Navigator.push(
context, MaterialPageRoute(
builder: (
context) => NewsDetail(
article: article))
);
},
child: Container(
margin: EdgeInsets.all(12),
padding: EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(13),
boxShadow: [BoxShadow(color: Colors.black, blurRadius: 3)]),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: 180,
width: double.infinity,
decoration: BoxDecoration(
image: DecorationImage(image: NetworkImage(article.urlToImage!),
fit: BoxFit.cover),
borderRadius: BorderRadius.circular(10),
),
),
SizedBox(height: 9),
Container(
padding: EdgeInsets.all(6),
decoration: BoxDecoration(
color: lightblueColor,
borderRadius: BorderRadius.circular(20),
),
child: Text(article.source!.name!, style: TextStyle(color: Get.isDarkMode?Colors.white:Colors.black),),
),
SizedBox(
height: 8,
),
Text(
article.title!,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
)
],
),
),
);
}
让我知道如果你们需要看到更多的我的代码,如果有必要。谢谢你们
5条答案
按热度按时间cld4siwp1#
listTile
有两个位置参数。第一篇文章和下一篇文章是BuildContext你能做到
但是我更喜欢转换位置,先创建上下文。更多的时候,我更喜欢必需的命名参数。
7qhs6swi2#
试试这个
项目生成器:(上下文,索引)=〉listTile(文章[索引],上下文)
kqqjbcuj3#
listTile小部件需要buildContext也将代码更改为
3mpgtkmj4#
您可以使用如下
eqqqjvef5#
好吧,既然你是扑动新手,那我先给予你个建议,然后再回答你的问题。
建议
如果你没有任何编程经验就开始学习flutter,那么你应该花点时间,先学习编程基础知识,然后再学习flutter。
关于您的问题
描述问题和解决方案
在程序设计中,我们有方法或函数。函数是一行代码块,但与主程序分离。
在上面的代码中
在这里,ListTile只是一个函数,
调用函数参数,这些参数需要从我们调用函数的地方传递,在代码中,请在此处调用:
但是,你错过了什么,当你创建你的函数你创建它,并使它采取2个参数,第一个是“文章”,第二个是上下文,
当你调用它的时候,你忘记了传递上下文给它,所以显示给你的错误是“期望2个位置参数,但是找到1个“。
最终答案
将缺少的参数添加到函数后,将如下所示,错误将得到解决: