Flutter中使用widget.availableMeals报错Undefined name 'widget',求解决
问题原因与解决方法
错误原因
widget 属性仅存在于 StatefulWidget 的 State 子类中,用于访问对应的 StatefulWidget 实例的成员变量。你的 CategoryMealsScreen 是 StatelessWidget,本身并没有 widget 这个属性,因此会触发“Undefined name 'widget'”的错误。
修复后的代码
直接使用类自身的成员变量 availableMeals 即可,无需添加 widget. 前缀:
import 'package:flutter/material.dart'; import 'package:meals_recipes/models/meal.dart'; import 'package:meals_recipes/widgets/meal_item.dart'; class CategoryMealsScreen extends StatelessWidget { static const routeName = '/categorymeals'; final List<Meal> availableMeals; CategoryMealsScreen(this.availableMeals); @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context)!.settings.arguments as Map<String, String>; final categoryTitle = routeArgs['title']; final categoryId = routeArgs['id']; // 直接使用availableMeals,去掉widget.前缀 final displayedMeals = availableMeals.where((meal) { return meal.categories.contains(categoryId); }).toList(); return Scaffold( appBar: AppBar( title: Text(categoryTitle!), ), body: ListView.builder( itemBuilder: (ctx, index) { return MealItem( duration: displayedMeals[index].duration, imageUrl: displayedMeals[index].imageUrl, title: displayedMeals[index].title, id: displayedMeals[index].id, affordability: displayedMeals[index].affordability, complexity: displayedMeals[index].complexity); }, itemCount: displayedMeals.length, ), ); } }
什么时候使用 widget.
只有在使用 StatefulWidget 时,在其对应的 State 类中需要访问 StatefulWidget 实例的成员变量,才会用到 widget.xxx 格式,示例:
class DemoScreen extends StatefulWidget { final String demoText; const DemoScreen(this.demoText, {super.key}); @override State<DemoScreen> createState() => _DemoScreenState(); } class _DemoScreenState extends State<DemoScreen> { @override Widget build(BuildContext context) { // 在State类中通过widget访问StatefulWidget的成员 return Center(child: Text(widget.demoText)); } }
内容的提问来源于stack exchange,提问作者Tooraj rezaei
相关产品推荐
相关产品推荐

