So, I am taking an example from Flutter documentation. Actually, it is working fine but I just want to customize it by passing the result (Map) to parent
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'.
- 'Map' is from 'dart:core'. widget.callback(AdListNew); ^
I really appreciate any answers. Thank you