我将IconData作为Widget的参数传递,但我收到错误,指出类型‘Icon’不是类型Case中的类型‘IconData’的子类型. 我试了这么多问题,但都不能帮我改正错误.

我试过这个问题:

How to solve "IconData' is not a subtype of type 'Widget'"?

Category.dart

import 'package:flutter/material.dart';

class Catgory extends StatelessWidget {
  final String Txt;
  const Catgory({super.key, required this.Txt});

  @override
  Widget build(BuildContext context) {

    return   Scaffold(
           body: category_card(name: Txt),
          );
  }
}
double defaultRadius = 8.0;
class category_card extends StatefulWidget {
  final String name;
  const category_card({super.key, required this.name});

  @override
  State<category_card> createState() => _category_cardState();
}

class _category_cardState extends State<category_card> {
  @override
  Widget build(BuildContext context) {
    return  Directionality(
      textDirection: TextDirection.rtl,
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          leading: IconButton(
            icon: const Icon(Icons.arrow_back, color: MyColorsSample.primaryDark),
            onPressed: () => Navigator.pop(context),
          ),
          title:  Text('طالع بینی ماه '+widget.name, style: const TextStyle(color: MyColorsSample.primaryDark),),
          backgroundColor: Colors.white,
          elevation: 0,
        ),

        body: SingleChildScrollView(
          padding: const EdgeInsets.all(8),
          scrollDirection: Axis.vertical,
          child: Row(
            children: [
              Column(
                children: [
                Row(
                  children: [
                    // gradientCardSample("کلی", 12, context, IconData(Icon(Icons.ac_unit) as int)),
                    const SizedBox(width: 10,),
                    gradientCardSample("عشق", 12, context, const Icon(Icons.book, size: 20, color: Colors.blue,) as IconData),
                  ]

             
              //
                  ),
                ]
              ),

            ],
          ),
        ),
      ),

    );
  }
}


Widget gradientCardSample(String title, int hint, BuildContext mcontext, IconData icon) {
  return Builder(
    builder: (context)=> InkWell(
      splashColor: Colors.black.withAlpha(30),
      onTap: () {
        debugPrint('Card tapped.');

        // Navigator.of(mcontext).push(MaterialPageRoute(builder: (mcontext) => const Catgory(Txt: "hi")));


      },
      child: Container(
        height: 120,
        width: 180,
        padding:  const EdgeInsets.all(10),
        decoration: BoxDecoration(
            gradient: const LinearGradient(
              begin: Alignment.topLeft,
              end: Alignment.bottomRight,
              colors: [ Color(0xFF846AFF), Color(0xFF755EE8), Colors.blueAccent,Colors.blue,],
            ),
            borderRadius: radius(16)),
        clipBehavior: Clip.hardEdge,

        child: Row(

          children: [
            Column(
              mainAxisAlignment: MainAxisAlignment.start,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                const SizedBox(height: 10,),
                Text(title, style: const TextStyle(fontSize: 20, color: Colors.white, )),
              ],

            ),
            //, style: boldTextStyle(color: Colors.white, size: 20)
            const Spacer(),

             Icon(
              icon
            ),

          ],

        ),

      ),
    ),
  );
}

/// returns Radius
BorderRadius radius([double? radius]) {
  return BorderRadius.all(radiusCircular(radius ?? defaultRadius));
}
/// returns Radius
Radius radiusCircular([double? radius]) {
  return Radius.circular(radius ?? defaultRadius);
}


}

推荐答案

您将Icon转换为IconData.但Icon不是IconData,所以您无法对其进行强制转换.实际上,您不需要强制转换它,只需移除Icon小部件并只传递IconData即可.

这一行导致了问题:

gradientCardSample("عشق", 12, context, const Icon(Icons.book, size: 20, color: Colors.blue,) as IconData),

您可以通过将此代码块替换为以下代码块来解决此问题:

gradientCardSample("عشق", 12, context, Icons.book),

因为您希望在gradientCardSample中使用IconData.但您可以通过传递Icon Widget来调用此Widget.您必须在此处传递IconData.

Flutter相关问答推荐

无效字符(位于字符68处)flutter—update—... europe-west1.firebasedatabase.app/

在保持标高=1的情况下更改AppBar立面 colored颜色 /遮罩

CMakeLists.txt处的CMake错误:3(项目)找不到指定的Visual Studio实例

来自FirebaseAuth的错误DisplayName和邮箱在Flutter应用程序中给出错误

我想创建一个可滚动的堆叠列表项,每个项都朝向屏幕

Ffltter Firebase向用户添加公司

如何在flutter中使用youtube_explod_start加载下一页

谷歌 map 在 flutter 应用程序中显示错误的当前位置

Flutter Web Dio XMLHttpRequest 上传大文件时出错

构建上下文不能跨异步间隙使用

如果其他Provider 的帐户已存在,如何阻止用户登录?

获取通过列表呈现的相同 TextEditingController 的值

从子集合sem中获取参考学年&&课程名称的值

如何显示从 MariaDB 获取的数据到列表视图

配置项目:firebase_core时出现问题

如何修复int类型不是String类型的子类型

Flutter 如何要求用户在应用程序中设置电话密码?

更新未知文档 ID firebase\flutter 中的字段

使用 Firebase/Flutter 进行应用判断 - 100% 无效请求

小部件库捕获的 Flutter 异常