You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中出现2个body参数提示已指定报错的原因是什么

问题原因

教程里带-、+标记的代码片段是代码diff(版本变更对比)格式,不是要求同时写两个body参数:

  • 行首带-的是需要删掉的旧代码
  • 行首带+的是替换上去的新代码

Dart语法规则里,不允许给函数/组件的同一个命名参数重复传值,你在同一个Scaffold组件下写了两个body参数,自然会触发「命名参数'body'的传参已被重复指定」的报错。

正确写法

Scaffold组件只接收一个body参数,你只需要删掉旧的固定文本的body配置,保留修改后的随机词展示逻辑即可。注意WordPair是对象类型,不能直接传给Text组件,需要调用asPascalCase方法转成驼峰格式的字符串,完整可运行代码如下:

import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final wordPair = WordPair.random();
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(title: const Text('Hello there')),
        body: Center(
          child: Text(wordPair.asPascalCase),
        ),
      ),
    );
  }
}

如果你需要同时展示「The word is」固定提示和随机词组,不要重复写body,用Column之类的布局组件把多个文本组件组合起来传给唯一的body参数即可,示例:

body: Center(
  child: Column(
    mainAxisSize: MainAxisSize.min,
    children: [
      const Text('The word is'),
      Text(wordPair.asPascalCase),
    ],
  ),
)

内容的提问来源于stack exchange,提问作者Ya Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:09:33