Flutter将图标参数作为构造函数传递

问题描述

这是我的设置菜单窗口小部件页面代码页面

class Setting extends StatelessWidget {
  Setting(this.title);

  String title;


  @override
  Widget build(BuildContext context) {
     return Scaffold(
        appBar: AppBar(
        title: Text(title),backgroundColor: Theme.of(context).primaryColor,),body: Column(
     children: <Widget>[
      setttingWidget(Icons.favorite),],)
  );
 }
}

这是settingWidget页面代码

class setttingWidget extends StatelessWidget {

  setttingWidget(IconData next);

  var next;

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Row(
        children: <Widget>[
          Icon(next),Text("Network Setting",style: TextStyle(
            fontSize: 20
          ),)
        ],);
  }
}

我想从设置小部件中设置图标图像,所以使用图标数据,但应用程序中没有图标,代码也完全没有错误

enter image description here

解决方法

这样做,

class Setting extends StatelessWidget {

final title;
  Setting({this.title});

  


  @override
  Widget build(BuildContext context) {
     return MaterialApp(home:Scaffold(
        appBar: AppBar(
        title: Text(title),backgroundColor: Theme.of(context).primaryColor,),body: Column(
     children: <Widget>[
      setttingWidget(Icons.favorite),],)
  ));
 }
}

设置小部件-

class setttingWidget extends StatelessWidget {
final IconData next;
  setttingWidget({this.next});

  

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Row(
        children: <Widget>[
          Icon(next),Text("Network Setting",style: TextStyle(
            fontSize: 20
          ),)
        ],);
  }
}

您必须使用final关键字,因为无状态小部件是不可变的,这意味着它们无法更改其状态。

,

您可以在下面尝试我的代码:

class Setting extends StatelessWidget {
  Setting(this.title);

  final String title;

  @override
  Widget build(BuildContext context) {
     return Scaffold(
        appBar: AppBar(
        title: Text(title),)
  );
 }
}

class setttingWidget extends StatelessWidget {
  final IconData next;
  
  setttingWidget(this.next);

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Row(
        children: <Widget>[
          Icon(next),);
  }
}

注意::如果小部件是无状态的,则其一个或多个实例字段必须是最终的。所以,

更改此内容:

var next;

final IconData next;

输出:

enter image description here