flutter - 颤振未定义的名称“上下文”。尝试将名称更正为已定义的名称,或定义名称
问题描述
任何帮助请我如何在此类错误中传递上下文说:未定义的名称'上下文'。尝试将名称更正为已定义的名称,或定义名称。
当我将类别名称作为字符串传递时,它工作正常,就像下面的类工作得很好
import 'package:flutter/material.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:domain/classes/localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
// products categories
class Category {
int id;
String name;
Icon icon;
Color color;
Category(this.id, this.name, this.icon, this.color);
static List<Category> getCategories() {
return <Category>[
Category(0, 'All' ,Icon(Icons.border_all, size: 30.0,), Colors.red),
Category(1, 'Phones' ,Icon(Icons.phone_android, size: 30.0,), Colors.blue),
Category(2, 'Electronics', Icon(Icons.devices_other, size: 30.0,), Colors.lightBlue),
Category(3, 'Woman Fashions',Icon(MdiIcons.humanFemale, size: 30.0,), Colors.pink),
Category(4, 'Woman Accessories',Icon(MdiIcons.shoeHeel, size: 30.0,), Colors.pink),
Category(5, 'Man Fashions',Icon(MdiIcons.humanMale, size: 30.0,), Colors.brown),
Category(6, 'Man Accessories',Icon(MdiIcons.shoeFormal, size: 30.0,), Colors.brown),
Category(7, 'Baby Child', Icon(Icons.child_care, size: 30.0,), Colors.lightBlueAccent),
Category(8, 'Sports Outdoors', Icon(Icons.fitness_center, size: 30.0,), Colors.blueAccent),
Category(9, 'Gaming',Icon(Icons.videogame_asset, size: 30.0,), Colors.deepPurple),
Category(10, 'Home Appliances', Icon(Icons.home, size: 30.0,), Colors.green),
Category(11, 'Cars',Icon(Icons.directions_car, size: 30.0,), Colors.blueGrey),
Category(12, 'Auto Parts', Icon(MdiIcons.carBattery, size: 30.0,), Colors.blueGrey),
Category(13, 'Trucks Bus', Icon(Icons.local_shipping, size: 30.0,), Colors.blueGrey),
Category(14, 'Other Vehicles', Icon(Icons.directions_boat, size: 30.0,), Colors.blueGrey),
Category(15, 'Housing Sale', Icon(MdiIcons.homeGroup, size: 30.0,), Colors.black),
];
}
但是我想将类别的名称设置为根据用户设备语言自动翻译和加载,所以当我从本地化类中调用翻译后的名称时,它会给我一个错误
Undefined name 'context'. Try correcting the name to one that is defined, or defining the name.
我不知道如何传递上下文任何帮助
import 'package:flutter/material.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:domain/classes/localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
// products categories
class Category {
int id;
String name;
Icon icon;
Color color;
Category(this.id, this.name, this.icon, this.color);
static List<Category> getCategories() {
return <Category>[
Category(0, DemoLocalizations.of(context).allCategories ,Icon(Icons.border_all, size: 30.0,), Colors.red),
Category(1, DemoLocalizations.of(context).phones ,Icon(Icons.phone_android, size: 30.0,), Colors.blue),
Category(2, DemoLocalizations.of(context).electronics, Icon(Icons.devices_other, size: 30.0,), Colors.lightBlue),
];
}
}
解决方案
上下文不是全局变量。
上下文只能在小部件内部的build
方法等中访问。initState
因此,您需要context
在创建类时将 作为参数并将其分配给this.context
.
class Category {
int id;
String name;
Icon icon;
Color color;
BuildContext context;
Category(this.id, this.name, this.icon, this.color, this.context);
static List<Category> getCategories() {
return <Category>[
Category(0, DemoLocalizations.of(context).allCategories ,Icon(Icons.border_all, size: 30.0,), Colors.red),
Category(1, DemoLocalizations.of(context).phones ,Icon(Icons.phone_android, size: 30.0,), Colors.blue),
Category(2, DemoLocalizations.of(context).electronics, Icon(Icons.devices_other, size: 30.0,), Colors.lightBlue),
];
}
}
并且在调用时传递当前小部件的构建上下文Category(..., context);
当有多个属性时,将它们全部设置为更优雅,Category({@required this.id, @required this.name, ...}
这样您就可以知道在调用构造函数时传递了什么。
另请注意:
传递context
给小部件是不好的做法。正如@GenchiGenbutsu 在评论中所说。
推荐阅读
- flutter - 颤振 | Dart 有没有更优雅的方式来编写这段代码?
- javascript - 如何使用来自 div 输入标签的输入进行计算
- postgresql - Postgres - 函数
- node.js - Javascript 承诺 console.logs 不会在 AWS Lambda 周围首次打印
- ajax - ajax/jsp 会话变量的问题
- javascript - 如何通过javascript将隐藏字段数据从url传递到嵌入式typeform?
- phoenix-live-view - Phoenix Live View 使用 phx-update="ignore" 不断重建 DOM 元素
- javascript - JavaScript 对象:为什么 value1.a[x] 和 value2.b[x] 返回未定义,因为 a[x] = a 和 b[x] = b 是 value1 和 value2 的属性?
- ruby - 从Ruby中的字符串转换日期
- git - 无法从 WSL 中的 Github 更新子模块