在通用有状态小部件中不能具有具有通用参数的函数

毗湿奴

我试图在 flutter 中创建一个通用的有状态小部件,它带有一个参数作为一个带有通用参数的函数,如下所示:-

class MyWidget<T> extends StatefulWidget {
  MyWidget(
    {this.fn}
  );
  
  final void Function(T value)? fn;
  
  @override
  _MyWidgetState createState() => _MyWidgetState<T>();
}

class _MyWidgetState<T> extends State<MyWidget> {
  @override
  Widget build(BuildContext context) {
    return Text('Hello, World! ${widget.fn == null}');
  }
}

然后我这样称呼它:-

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark(),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: MyWidget<double>(
            fn: (_) {},
          ),
        ),
      ),
    );
  }
}

但这不会产生任何输出,有人可以帮助我吗?这在StatelessWidget 和fnvalue 的情况下非常有效null

迈克尔·霍恩

这是因为_MyWidgetState 不知道如何参数化其父widget 的类型,所以当您尝试使用widget.fn 时,运行时无法正确解析类型。

要修复它,请尝试以下操作:

class _MyWidgetState<T> extends State<MyWidget<T>> {
                                              ^^^

而不是这个

class _MyWidgetState<T> extends State<MyWidget> {

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章