While I am passing value from home page to source page it shows an error: The argument type 'Future' can't be assigned to the parameter type 'void Function()'. (argument_type_not_assignable at [strong text] lib\home.dart:15)
Where I am doing wrong??
Home page -
import 'package:flutter/material.dart'; import 'sourceScreen.dart'; class Home extends StatefulWidget { int value; Home({this.value}); @override _HomeState createState() => _HomeState(); } class _HomeState extends State<Home> { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: FlatButton( onPressed: Navigator.push(context, MaterialPageRoute(builder: (context)=>SourceScreen({value:value}))), child: null, ), ), ); } }
Below page is where I wanna use home page value-
import 'package:flutter/material.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; import 'models/model.dart'; import 'models/card.dart'; import 'article.dart'; final API_KEY = '***'; Future<List<Source>> fetchNewsSource() async { final response = await http.get( 'https://newsapi.org/v2/sources?language=en&country=in&apiKey=$API_KEY'); if (response.statusCode == 200) { List sources = json.decode(response.body)['sources']; return sources.map((source) => new Source.formJson(source)).toList(); } else { throw Exception('Fail to load data'); } } class SourceScreen extends StatefulWidget { @override _SourceScreenState createState() => _SourceScreenState(); } class _SourceScreenState extends State<SourceScreen> { var list_source; var refreshKey = GlobalKey<RefreshIndicatorState>(); @override void initState() { super.initState(); refreshListSource(); } Future<Null> refreshListSource() async { refreshKey.currentState?.show(atTop: false); setState(() { list_source = fetchNewsSource(); }); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( backgroundColor: Color.fromRGBO(58, 66, 86, 1.0), appBar: AppBar( elevation: 1.0, backgroundColor: Color.fromRGBO(58, 66, 86, 1.0), title: Text('uTTerNews'), ), body: Center( child: RefreshIndicator( child: FutureBuilder<List<Source>>( future: list_source, builder: (context, snapshot) { if (snapshot.hasError) { Text('Error: ${snapshot.error}'); } else if (snapshot.hasData) { List<Source> sources = snapshot.data; return new ListView( children: sources .map((source) => GestureDetector( onTap: () { Navigator.push(context, MaterialPageRoute( builder: (context) => articleScreen(source: source,))); }, child: card(source), )) .toList()); } return CircularProgressIndicator(); }, ), onRefresh: refreshListSource), ), ), ); } }
Replace
onPressed: Navigator.push(...)
with
onPressed: () => Navigator.push(...)
If you need to use await
keyword, you can do
onPressed: () async { await Navigator.push(...); await anyOtherMethod(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With