无法在flutter中导航到主页。

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

我有一个由主屏幕和更新屏幕组成的应用程序。

我无法从更新屏幕导航回主屏幕。

请看以下代码的主屏幕

  // build the list widget
  Widget _buildTaskWidget(task) {
    return ListTile(
      leading: Icon(Icons.assignment),
      title: Text(task['name']),
      subtitle: Text(task['created_at']),
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => UpdateTask(task: task),
          ),
        );
      }
    );
  }

更新画面请看下面的代码

@override
      Widget build(BuildContext context) {
        // final Task task = ModalRoute.of(context).settings.arguments;
        return Scaffold(
          resizeToAvoidBottomInset: true,
          appBar: AppBar(
            title: Text('Update Task'),
          ),
          body: ListView(
            children: <Widget>[
              inputWidget(),
              inputWidgetForVendor(),
              inputWidgetForAmount(),
              Container(
                margin: EdgeInsets.fromLTRB(45, 1, 45, 1),
                child: RaisedButton(
                  color: Colors.blueAccent,
                  child: Text('Update Task', style: TextStyle(color: Colors.white)),
                  onPressed: () async {
                     var res = await updateNewTask(_taskTextInput.text, _vendorTextInput.text,  _amountTextInput.text, id);
                     print(res);
                      Navigator.pop(context);
                  },
                ),
              )
            ],
          )// This trailing comma makes auto-formatting nicer for build methods.
        );
      }

如果我去掉当前的onPressed函数,用下面这个替换,就可以了

onPressed: () { Navigator.pop(context); },

我在初始功能中做错了什么?"更新功能 "成功更新了列表项,但是我无法导航返回,请看下面的错误日志。

E/flutter (27123): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'
E/flutter (27123): #0      updateNewTask (package:task/repository/services.dart:67:10)
E/flutter (27123): <asynchronous suspension>

请帮助我。

flutter dart flutter-layout flutter-test dart-webui
2个回答
0
投票

也许外包你的异步更新功能是一个简单的解决方案,此时,当你想即时回到主屏幕。那么你可以直接在函数中打印更新。

只要把onpressed()保持原样就可以了。

onPressed: () {
  updateNewTask(_taskTextInput.text, _vendorTextInput.text,  _amountTextInput.text, id);
  Navigator.pop(context);
},
© www.soinside.com 2019 - 2024. All rights reserved.