我试着在Flutter中使用计算功能。
void _blockPressHandler(int row, int col) async {
// Called when user clicks any block on the sudoku board . row and col are the corresponding row and col values ;
setState(() {
widget.selCol = col;
}
});
bool boardSolvable;
boardSolvable = await compute(SudokuAlgorithm.isBoardInSudoku , widget.board , widget.size) ;
}
isBoardInSudoku
是SudokuAlgorithm类的静态方法。它存在于另一个文件中。编写上面的代码,告诉我error: The argument type '(List<List<int>>, int) → bool' can't be assigned to the parameter type '(List<List<int>>) → bool'. (argument_type_not_assignable at [just_sudoku] lib/sudoku/SudokuPage.dart:161)
我该如何修正这个问题?可以在不把SudokuAlgorithm类的方法从文件中取出的情况下完成吗?如何发送多个参数到compute函数?static bool isBoardInSudoku(List<List<int>>board , int size ){ }
是我的isBoardInSudoku函数。
6条答案
按热度按时间u5rb5r591#
只需将参数放在Map中并传递它即可。
没有办法向
compute
传递多个参数,因为它是启动隔离的方便函数,也不允许任何东西,但只有一个参数。du7egjpx2#
使用Map。下面是一个示例:
tcomlyy63#
在OOP中以及一般情况下,为您需要的字段创建一个
class
会更优雅,这会给您带来更大的灵活性,减少为键名硬编码字符串或常量的麻烦。例如:
boardSolvable = await compute(SudokuAlgorithm.isBoardInSudoku , widget.board , widget.size) ;
替换为
093gszye4#
使用Tuple
下面是我的应用程序中的一些示例代码:
aiazj4mn5#
你可以有一个只有一个Map参数的函数,这样你就可以通过传递一个带有属性和值的Map来传递多个参数。但是,我现在遇到的问题是我不能传递函数。如果一个Map的属性值是一个函数,我在运行计算函数时会得到一个错误。
这个例子是有效的(请记住我已经导入了库,这就是为什么一些函数和类定义没有出现在这个例子中的原因)
这是不起作用的(同样的事情与一个属性的值thows一个错误的函数)
esbemjvw6#
使用类很容易,也可以使用Map或列表,但使用类更好,更干净
像这样改变你的函数
并像下面这样使用它