【问题标题】:Flutter how to open page with arguments颤振如何打开带有参数的页面
【发布时间】:2025-12-07 10:45:01
【问题描述】:

我正在使用此代码打开带有参数的页面:

_modalBottomSheetMenu() {
    wsModalBottom(
      context,
      title: trans(context, "Categories"),
      bodyWidget: ListView.separated(
        itemCount: _categories.length,
        separatorBuilder: (cxt, i) => Divider(),
        itemBuilder: (BuildContext context, int index) => ListTile(
          title: Text(parseHtmlString(_categories[index].name)),
          onTap: () {
            Navigator.pop(context);
            Navigator.pushNamed(context, "/browse-category",
                    arguments: _categories[index])
                .then((value) => setState(() {}));
          },
        ),
      ),
    );
  }

但现在我只想直接在页面上设置参数。我试过这个,但它不起作用:

BrowseCategoryPage(key: 1),

我在浏览类别页面中得到了这个代码:

BrowseCategoryPage({Key key}) : super(key: key);

我能做些什么来解决这个问题?

【问题讨论】:

  • 有任何理由使用命名路由吗?因为您可以轻松地在 Constructer 上传递值。

标签: flutter dart


【解决方案1】:

我认为一个好方法是使用 get 包以方便。

第一道 -

Get.to(Second(), arguments: ["First", "Second"]);

然后就可以像这样在Second()界面接收数据了,

var data = Get.arguments;

注意:data 在这里将是一个数组,因为我们在参数中传递了一个数组。因此,要获取第一个参数,您可以使用data[0],而要获取第二个参数,您可以使用data[1]

第二种方式- 只需为参数创建另一个类模型,就像这样,

class SecondScreenModel{

final String first,second;

SecondScreenModel({this.first,this.second});
}

然后做这样的事情,

Get.to(Second(),arguments: SecondScreenModel(first: "aaa",second:"bbb"));

在第二屏接收数据,

SecondScreenModel model = Get.arguments;

【讨论】:

  • 我不知道这是否能解决我的问题。我想要的只是为没有路线的 BrowseCategoryPage 设置类别。也许是这样的:BrowseCategoryPage(_categories[1])。我已经尝试过你的代码,但我无法让它工作。
【解决方案2】:

integer 不能分配给 Key。因此,当您编写BrowseCategoryPage(key: 1) 时,您将收到错误消息The argument type 'int' can't be assigned to the parameter type 'Key?'(或类似的内容)。

Key(通常)是可选的。您不需要它,可以像这样创建小部件的实例:BrowseCategoryPage()

如果您想使用密钥,请使用GlobalKey。比如:

var _browseKey = GlobalKey();

BrowseCategoryPage(key: _browseKey);

如果您想将值传递到BrowseCategoryPage,则创建一个 final 变量来保存您要传递的数据。

class BrowseCategoryPage extends StatefulWidget {
  final int categoryId;
  BrowseCategoryPage({this.categoryId});
  @override
  BrowseCategoryPageState createState() => BrowseCategoryPageState();
}

有了这个,你可以像这样将类别 id 传递到页面中:

BrowseCategoryPage(categoryId: 1);

【讨论】:

    最近更新 更多