Navigator.pop() - 如何将 "context "传递给导航器读取 -------。

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

我是按照翩翩起舞的教程 ,。

在这个widget中,为了使它在输入数据后消失,我将调用navigator类,但在教程中,我将不得不将无状态转换为有状态的widget,尽管我不需要它。

我怎么能用: Navigator.of(context).pop(); 与我的无状态的widget,而不会得到错误的上下文没有定义?context 由导航员阅读

CODE:

import 'package:flutter/material.dart';


class NewTransaction extends StatelessWidget {
  final titleController = TextEditingController();
  final amountController = TextEditingController();
  final Function addNEW;
  NewTransaction(this.addNEW);

  void submitData() {

if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){

  return;
}
    Navigator.of().pop();

    addNEW(
      titleController.text,
      double.parse(amountController.text),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 5,
      child: Container(
        padding: EdgeInsets.all(12),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(labelText: 'Title'),
              controller: titleController,
              onSubmitted: (_) => submitData(),
            ),
            TextField(
              decoration: InputDecoration(labelText: 'Amount'),
              keyboardType: TextInputType.numberWithOptions(decimal: true),
              controller: amountController,
              onSubmitted: (_) => submitData(),
            ),
            FlatButton(
              child: Text('Add Transaction'),
              onPressed: submitData,
            )
          ],
        ),
      ),
    );
  }
}
flutter widget navigator stateless stateful
1个回答
3
投票

当使用无状态小部件时,你不能访问... Context 外的构建方法。要解决这个错误,你可以做以下工作之一:1) 转换你的 Stateless widgetStateful widget

2) 将上下文作为参数传递给你的 submitdata 函数。比如下面的代码。


  void submitData(BuildContext context) {

if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){

  return;
}
    Navigator.of().pop();

    addNEW(
      titleController.text,
      double.parse(amountController.text),
    );
  }

所以当它被用在 FlatButton,它将是像下面的东西。

onPressed: submitdata(context),

3)把你的主体 submitdata 的功能,直接在 onPressed 的你按钮。

像下面的代码。

onPressed: (){
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){

  return;
}
    Navigator.of().pop();

    addNEW(
      titleController.text,
      double.parse(amountController.text),
    );
}

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.