当我将值从主页传递到源页面时,它显示一个错误:参数类型"Future"不能分配给参数类型"void function()".(ARGUMENT_TYPE_NOT_ASSIGNABLE位于[strong text] lib\home.dart:15)

我哪里做错了??

主页-

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,
        ),
      ),
    );
  }
}

下面的页面是我想要使用主页值的地方-

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),
        ),
      ),
    );
  }
}

推荐答案

代替

onPressed: Navigator.push(...)

使用

onPressed: () => Navigator.push(...)

如果你需要使用await关键字,你可以这样做

onPressed: () async {
  await Navigator.push(...);
  await anyOtherMethod();
}

Flutter相关问答推荐

获取屏幕大小的滚动视图与动态大小?

如何从外部控制有状态窗口小部件本身?

允许冻结在初始化时使用工厂

CLI数据库连接后将SHA-1密钥添加到Firebase项目

audioQuery不会等待判断存储权限

如何知道当前屏幕是否处于抖动状态?

关闭模式,但再次打开时微件条件相同

如何在Flutter 中共享选定文本

BaseInputfield和Textfield有什么不同?

上传的图像不能在FireBase中预览.S档案类型为空白,摆动

集装箱堆放和定位时的高度问题

当我转到其他屏幕并按下后退按钮时,屏幕将不会刷新

Riverpod 2.0-如何使用FutureOr和AutoDisposeSyncNotificationer处理api状态代码?

Flutter Dismissible 不会在 startToEnd 滑动时被关闭

如何在 Flutter 中使用 drawLine() 和 drawCircle() 绘制等距离的 4 条线

Show Snackbar above to showModalBottomSheet Flutter

Future.wait() 中的 futures 可以顺序调用吗?

在 Flutter 中,您什么时候应该更喜欢Widget继承而不是组合?

在 Flutter 中将提取的 Listview.builder 与两个列表一起使用

如何在 ListView.builder 中扩展文本?