如何将函数中的参数连接到 UI 中的操作调用?

问题描述 投票:0回答:1

我尝试在 nullsafety 中进行完全迁移,但现在我的函数和 UI 中函数的调用之间出现错误

在升级之前,所有这些代码都运行良好。

这是我的旧功能:

void goToNewItemView() async {

    final slider= await showDialog<String>(
      context: context,
      builder: (context) => NewTodo(),
    ).then((title){
      if(title != null) {
        addItem(Todo_bis(title: title));
        _saveData();
      }
    }
   );
} 

这是我的用户界面

             Align(
              alignment: Alignment.bottomCenter,
              child :  new RawMaterialButton(
                onPressed: () {
                  goToNewItemView();
                },
                child: new Icon(
                  Icons.add,
                  color:  Color(0xffff9a7b),
                  size: 30.0,
                ),
                shape: new CircleBorder(),
                elevation: 4.0,
                fillColor: Colors.white,
                padding: const EdgeInsets.all(10.0),
              ),
            )

这是函数

goToNewItemView()
showDialog
调用的有状态小部件:

class NewTodo extends StatefulWidget {
  final Todo item;

  NewTodo({this.item });

  @override
  _NewTodoState createState() => _NewTodoState();
}

class _NewTodoState extends State<NewTodo> {
...
 }

flutter 升级后出现一些错误。

首先我添加

required this.item
以兼容 NewTodo 有状态小部件中的 nullsafety

在我的函数

goToNewItemView()
出现缺少参数错误后,我添加
goToNewItemView(item)
NewTodo(item:item)

但之后我在 UI 部分收到错误

goToNewItemView();
需要一个参数,但我不知道是什么?

如果我不带任何参数让

goToNewItemView();
我得到一个错误:

预期有 1 个位置参数,但找到了 0 个

我不知道添加什么参数,我试过了

goToNewItemView(item);
goToNewItemView(item: item);

但我总是遇到错误。

这是我升级后的功能

void goToNewItemView(item) async {

    final slider= await showDialog<String>(
      context: context,
      builder: (context) => NewTodo(item:item),
    ).then((title){
      if(title != null) {
        addItem(Todo_bis(title: title));
        _saveData();
      }
    }
   );
} 

这是我的用户界面

             Align(
              alignment: Alignment.bottomCenter,
              child :  new RawMaterialButton(
                onPressed: () {
                  goToNewItemView();
                },
                child: new Icon(
                  Icons.add,
                  color:  Color(0xffff9a7b),
                  size: 30.0,
                ),
                shape: new CircleBorder(),
                elevation: 4.0,
                fillColor: Colors.white,
                padding: const EdgeInsets.all(10.0),
              ),
            )

这是函数

goToNewItemView(item)
showDialog

调用的有状态小部件
class NewTodo extends StatefulWidget {
  final Todo item;

  NewTodo({required this.item });

  @override
  _NewTodoState createState() => _NewTodoState();
}

class _NewTodoState extends State<NewTodo> {
...
 }

我找到了解决方案,只需转换最终的 Todo 项目即可;到最后的 Todo?物品; 这样我就可以从必需的 this.item 中删除必需的,其余的都不需要参数

flutter
1个回答
0
投票

该错误与空安全无关。

该参数不是可选的,因此需要指定它:

goToNewItemView(the_item_to_pass) 

如果不起作用,则存在另一个错误。 或者它可能指的是这些功能:

    addItem(Todo_bis(title: title));
    _saveData();
© www.soinside.com 2019 - 2024. All rights reserved.