gpt4 book ai didi

flutter - 在 Dart/Flutter 中动态访问类的属性

转载 作者:行者123 更新时间:2023-12-03 03:00:31 25 4
gpt4 key购买 nike

我正在尝试使用动态变量访问 Dart 类中的属性。在 JavaScript 中,我可以使用括号表示法并执行以下操作:

var icons = {
mars: "male",
venus: "female"
};

getIcon = genderIcon => {
return icons[genderIcon];
};

console.log(getIcon("mars")); // Prints "male"

我可以在 Dart 中做类似的事情吗?

我在 Dart 中尝试了两种方法,但遇到了两个我不太理解的不同错误:

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

class GenderSelection extends StatelessWidget {
final IconData genderIcon;

GenderSelection({@required this.genderIcon});

@override
Widget build(BuildContext context) {
return Container(
child: Icon(
// Using dot notation...
FontAwesomeIcons.genderIcon // error: The getter 'genderIcon' isn't defined for the class 'FontAwesomeIcons'. (undefined_getter at [bmi_calculator] lib/input_page.dart:71)

// ...or using bracket notation like JS
FontAwesomeIcons[genderIcon] // error: The operator '[]' isn't defined for the class 'Type'. (undefined_operator at [bmi_calculator] lib/input_page.dart:71)
),
);
}
}


编辑

我正在添加完整的代码以试图更好地解释我想要实现的目标。此外,这是关于动态访问 Dart 中类的属性。它与图标或 FontAwesome 无关。

这是完整的代码:

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

class InputPage extends StatefulWidget {
@override
_InputPageState createState() => _InputPageState();
}

class _InputPageState extends State<InputPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: SafeArea(
child: Column(
children: <Widget>[
Expanded(
child: Row(
children: <Widget>[
BmiCard(
cardChild: GenderSelection(
genderIcon: 'mars', // Comment#1: This won't work.
genderLabel: 'male',
),
),
BmiCard(
cardChild: GenderSelection(
genderIcon: 'venus', // Comment#2: This won't work.
genderLabel: 'female',
),
),
],
),
),
],
),
),
),
);
}
}

class GenderSelection extends StatelessWidget {
final IconData genderIcon;
final String genderLabel;

GenderSelection({@required this.genderIcon, @required this.genderLabel});

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
Icon(
FontAwesomeIcons().genderIcon, // Comment#3: This doesn't work.
),
Text(
genderLabel.toUpperCase(),
),
],
),
);
}
}

class BmiCard extends StatelessWidget {
final int color;
final Widget cardChild;
BmiCard({this.color = 0xFF1d1e33, this.cardChild});

@override
Widget build(BuildContext context) {
return Expanded(
child: Container(
child: cardChild,
),
);
}
}


如果我将评论中的行更改为:
- 评论#1: genderIcon: FontAwesomeIcons.mars,- 评论#2: genderIcon: FontAwesomeIcons.venus,- 评论#3: genderIcon,

最佳答案

这里的问题是 FontAwesomeIcons库没有定义动态 getter。您无法做任何事情来让动态对象获取在您身边工作。

但是,在您的特定场景中,您只需使用 FontAwesomeIcons 初始化一些变量即可。然后你可以在任何你想要的地方使用,或者使用 FontAwesomeIcons ' 对象通过直接引用它们(如您在帖子末尾指出的那样)。

还有其他方法可以实现相同的结果,例如将图标名称映射硬编码到 FontAwesomeIcons 中的图标对象。图书馆。但是没有办法从类中动态获取一个对象,因为getter还没有定义。

关于flutter - 在 Dart/Flutter 中动态访问类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61309913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com