flutter 编写组件时,碰到奇怪报错,为什么?

city_selecter.dart

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

class CitySelecter extends StatefulWidget{
  final Function callback;
  const CitySelecter({Key? key, required this.callback}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _state();
}

class _state extends State<CitySelecter>{
  String text = "请选择";
  // Result result;
  Result result = Result();
  
  show(BuildContext context, Function onClick) async {
    Result? tempResult = await CityPickers.showCitiesSelector(
          context: context, 
          hotCities: [
            HotCity(id: 110100, name: '北京'),
            HotCity(id: 310100, name: '上海'),
            HotCity(id: 440100, name: '广洲'),
            HotCity(id: 440300, name: '深圳'),
          ],);

    if (tempResult == null) {
      return;
    }

    onClick(tempResult);
    // return tempResult;
  }

  @override
  Widget build(BuildContext context) {
    
    // print(list);
    // TODO: implement build
    return InkWell(
      onTap: (){
        show(context, (e)=>{
          // print(e)
          setState(() {
            result = e;
          });
          widget.callback(e);
        });

      },
      child: Row(
        children: [
          Text(result.cityName??text, style: const TextStyle(fontSize: 14),),
          const Icon(Icons.arrow_forward_ios, size: 16,)
        ],
      ),
    );
  }
}

image.png
报错如图,应该是一个语法错误,但我尝试去除 ; ,则下一行又报错,我在其它地方有类似的写法,但并没有报错

下面是同样类型语法的地方,但未报错。
image.png

阅读 1.7k
2 个回答
show(context, (e)=>{
          // print(e)
          setState(() {
            result = e;
          });
          widget.callback(e);
        });

去掉 => 号

箭头函数的返回只能是一条语句,多条语句的话不能使用箭头函数.
所以你添加分号就代表了多条语句,所以报错了,有以下方式可修改;
1.改为普通写法,也即是去掉箭头.
2.通过逗号分隔语句;
示例:onPressed: () => {debugPrint('xxx'), debugPrint('yyy')}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题