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
相关产品推荐
相关产品推荐

