我想将路径名称保存为变量,转到类并显示路径名称(作为应用栏标题)。当我尝试执行此操作时,我收到以下代码行的错误“命名参数‘path’未定义”:
builder: (_, state) => ItemDetails(path: state.path),
您能给我指出正确的方向吗?这是代码:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
runApp(MaterialApp.router(routerConfig: router));
}
final router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (_, __) => Scaffold(
appBar: AppBar(title: const Text('Home Screen')),
),
routes: [
GoRoute(
path: 'jobs/*',
builder: (_, state) => ItemDetails(path: state.path),
),
],
),
],
);
class ItemDetails extends StatelessWidget {
Map routeData = {};
@override
Widget build(BuildContext context) {
routeData = ModalRoute
.of(context)
?.settings
.arguments as Map;
final Query docRef = FirebaseFirestore.instance.collection("Collection_Name").where(
"path", isEqualTo: path);
return FutureBuilder<QuerySnapshot>(
future: docRef. get (),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
appBar: AppBar(
title: Text(path),
),
body: Center(child: CircularProgressIndicator()),
);
} else if (snapshot.hasError) {
return Scaffold(
appBar: AppBar(
title: Text(path),
),
body: Center(child: Text("Error: ${snapshot.error}")),
);
} else {
var querySnapshot = snapshot.data!;
var docs = querySnapshot.docs;
final data = docs[0].data() as Map<String, dynamic>;
final yourScrollController = ScrollController();
return Scaffold(
appBar: AppBar(
title: Text(path),
),
您需要一个带有 ItemDetails 命名参数的构造函数:
波浪括号
{}
表示有一个必需的参数path
,并且在调用构造函数时必须用名称定义它。因此使用它的方式如下:ItemDetails(path: state.path)
是正确的。但使用它如下:
ItemDetails(state.path)
是不正确的。附注:
您还可以像这样定义位置参数:
你可以这样称呼它:
ItemDetails(state.path)
这两种方法各有利弊,但对于您来说,差别并不大。