简体   繁体   English

如何将 Map 从孩子传给父母 Flutter

[英]How to Pass Map From Child to Parent Flutter

So, I am taking an example from Flutter documentation.因此,我以 Flutter 文档中的示例为例。 Actually, it is working fine but I just want to customize it by passing the result (Map) to parent实际上,它工作正常,但我只想通过将结果 (Map) 传递给父级来自定义它

import 'package:flutter/material.dart';

void main() {
  runApp(
    const MaterialApp(
      title: 'Returning Data',
      home: HomeScreen(),
    ),
  );
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  Map AdList = {};
  callback(AdListNew){
    setState(() {
      AdList = AdListNew; ////// 1. WANT TO UPDATE THE LIST WITH NEW MAP FROM CHILD ////
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Returning Data Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('This text is'),
            SelectionButton(AdList,callback),
          ],
        ),
      ),
    );
  }
}

class SelectionButton extends StatefulWidget {
  Map AdList;
  Function(String) callback;

  SelectionButton(this.AdList,this.callback);
  @override
  State<SelectionButton> createState() => _SelectionButtonState();
}

class _SelectionButtonState extends State<SelectionButton> {
  String show = 'Pick me';
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: (){
        NavigateAndDisplay(context);
      },
      child: Text(show),
    );
  }

  void NavigateAndDisplay(BuildContext context) async{
    final result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => const SelectionScreen()),
    );
    // After the Selection Screen returns a result, hide any previous snackbars
    // and show the new result.
    setState(() {
      show = result;
    });
    Map AdListNew = {
      'text':result,
    };
    widget.callback(AdListNew); //// 2. PASS MAP TO PARENT ////
  }
}

Here is an error that I got这是我得到的一个错误

lib/main.dart:80:21: Error: The argument type 'Map<dynamic, dynamic>' can't be assigned to the parameter type 'String'. lib/main.dart:80:21: 错误:无法将参数类型“Map<dynamic, dynamic>”分配给参数类型“String”。

  • 'Map' is from 'dart:core'. “地图”来自“飞镖:核心”。 widget.callback(AdListNew); widget.callback(AdListNew); ^ ^

I really appreciate any answers.我真的很感激任何答案。 Thank you谢谢

You are facing this problem because you declared function with input type as String but you are trying to pass Map, so declaring Function with Map will solve your problem.您遇到此问题是因为您将 function 的输入类型声明为字符串,但您正试图传递 Map,因此将 Function 声明为 Map 将解决您的问题。

Map AdList;
Function(Map) callback;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM