flutter 躺坑之路

2021-10-29  本文已影响0人  Deck方
1.编译提示错误 The values in a const list literal must be constants

错误代码:

class RichTextMultipleWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _RichTextMultipleState();
  }
}

class _RichTextMultipleState extends State<RichTextMultipleWidget> {
  bool _toggle = false;

  TapGestureRecognizer _tapGestureRecognizer = TapGestureRecognizer();

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        RichText(
            text: TextSpan(
                text: 'Hello ',
                style: DefaultTextStyle
                    .of(context)
                    .style,
                children:const <TextSpan>[
                  TextSpan(text: 'Hi, ', style: TextStyle(letterSpacing: 5)),
                  TextSpan(
                    //这里提示 编译错误 The values in a const list literal must be constants
                    text: _toggle ? 'OK' : 'NO',
                    style: TextStyle(
                        fontSize: 26,
                        //这里提示 编译错误 The values in a const list literal must be constants
                        color: _toggle ? Colors.purple : Colors.orange),
                    //这里提示 编译错误 The values in a const list literal must be constants
                    recognizer: _tapGestureRecognizer..onTap=(){
                      setState(() {
                        _toggle = !_toggle;
                      });
                    }
                  )
                ]))
      ],
    );
  }

  @override
  void dispose() {
    _tapGestureRecognizer.dispose();
    super.dispose();
  }
}

原因:父容器使用了 const关键字修饰 ,本示例中使用const关键字修饰了children导致编译错误
修改:在build方法体中去掉children前的const,我遇到的是这种情况,其他情况可查找类似情形

@override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        RichText(
            text: TextSpan(
                text: 'Hello ',
                style: DefaultTextStyle
                    .of(context)
                    .style,
                children: <TextSpan>[
                   TextSpan(text: 'Hi, ', style: TextStyle(letterSpacing: 5)),
                   TextSpan(
                    //这里提示 编译错误 The values in a const list literal must be constants
                    text: _toggle ? 'OK' : 'NO',
                    style: TextStyle(
                        fontSize: 26,
                        color: _toggle ? Colors.purple : Colors.orange),
                    recognizer: _tapGestureRecognizer..onTap=(){
                      setState(() {
                        _toggle = !_toggle;
                      });
                    }
                  )
                ]))
      ],
    );
  }

拓展Dart中的finalconst的异同

1.相同点

  final f1="111";
  final String f2="111";
  const c1="111";
  const String c2 ="111";

2.区别(需要注意的地方)

上一篇 下一篇

猜你喜欢

热点阅读