如何在 Flutter 中重构一个函数

Posted

技术标签:

【中文标题】如何在 Flutter 中重构一个函数【英文标题】:How to Refactor a Function in Flutter 【发布时间】:2021-11-23 19:40:07 【问题描述】:
import 'package:flutter/material.dart';

Widget justButton(
  String btText = '',
  Color bgColor = Colors.blue,
  Color? txtColor = Colors.white,
  Color borderColor = Colors.black,
  void Function() onpressedAction,//here iam getting problem
) 
  return OutlinedButton(
    //i wanted to refactor this onpressed 
    onPressed: () 
      print('Go to events Page');
    ,
    child: Text(btText),
    style: OutlinedButton.styleFrom(
        backgroundColor: bgColor,
        primary: txtColor,
        side: BorderSide(color: borderColor)),
  );

这是我的代码,我试图重构 onpressed outlineButton , 怎么可能重构一个函数

【问题讨论】:

【参考方案1】:

您想修复错误吗? 这是我的重构结果。

import 'package:flutter/material.dart';

Widget justButton(
  String btText = '',
  Color bgColor = Colors.blue,
  Color? txtColor = Colors.white,
  Color borderColor = Colors.black,
  Function? onpressedAction,//here iam getting problem
) 
  return OutlinedButton(
    //i wanted to refactor this onpressed 
    onPressed: () => onpressedAction!(),
    child: Text(btText),
    style: OutlinedButton.styleFrom(
        backgroundColor: bgColor,
        primary: txtColor,
        side: BorderSide(color: borderColor)),
  );

【讨论】:

【参考方案2】:

onpressed 方法接受VoidCallBack 类型,这只是void function() 的一种奇特方式。除此之外,它不包含任何空格,您可以自己查看here。所以就这样声明吧。

Widget justButton(
   ....
  VoidCallBack? onpressedAction,
   
)
return OutlinedButton(
   ....
    onPressed: onpressedAction,
   ....

【讨论】:

【参考方案3】:

像这样创建函数

Widget customOutlinedButton(Function? func)
    return OutlinedButton(
        onPressed: func,
        child: Text(btText),
        style: OutlinedButton.styleFrom(
            backgroundColor: bgColor,
            primary: txtColor,
            side: BorderSide(color: borderColor)),
      );
    

现在只需传递您想要在按下时调用的函数

customOutlinedButton(*your function here*);

【讨论】:

以上是关于如何在 Flutter 中重构一个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何重构一个使用相同函数的promise catch,但在调用函数中也是一个变量?

如何在 Flutter 上实现 BLoC 模式的 TDD

如何在 Dart / Flutter 中使用另一个文件的函数?

如何在 Flutter 小部件中测试回调函数

重构.改善既有代码的设计7在对象之间搬移特性(如何优化类)

我如何在 FutureBuilder Widget 的构建器函数中等待 - Flutter