Flutter-路线“ null”的构建器返回null

时间:2020-08-27 09:36:35

标签: flutter dart navigation

我是新手,我尝试了以前的解决方案来回答相同的问题,但这没有帮助。 在下面的代码中,当我单击添加图标时,我需要导航到要添加数据的另一页。但是即使我在MaterialPageRoute中添加了return语句,我也遇到了错误。

Companies.dart-

import 'package:flutter/material.dart';
import './Object.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import './Detail_Pages/Company_details.dart';
import './Add object Popup/add_company.dart';

class Companies extends StatefulWidget {
  @override
  _CompaniesState createState() => _CompaniesState();
}

class _CompaniesState extends State<Companies> {
  GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

  Future<List<Company>> _getCompanies() async {
    var data = await http.get("http://localhost/crm_demo/getData.php");
    var jsonData = json.decode(data.body);
    List<Company> companies = [];
    for (var c in jsonData) {
      Company company = Company(
          c["name"],
          c["address"],
          c["opportunities"],
          c["pipelineRevenue"],
          c["revenueAchieved"],
          c["city"],
          c["state"],
          c["country"],
          c["zipcode"],
          c["phone"],
          c["timezone"],
          c["tags"]);
      companies.add(company);
    }
    return companies;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(
            "Companies",
            style: TextStyle(fontWeight: FontWeight.w600),
          ),
          actions: [
            IconButton(
                icon: Icon(
                  Icons.add,
                  color: Colors.white,
                ),
                onPressed: () {
                  Navigator.push(context,
                      MaterialPageRoute(builder: (BuildContext context) {
                    return addCompany();
                  }));
                })
          ],
        ),
        body: FutureBuilder(...)

add_Company.dart-

import 'package:flutter/material.dart';
import '../Object.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import '../Detail_Pages/Company_details.dart';

class addCompany extends StatefulWidget {
  @override
  _addCompanyState createState() => _addCompanyState();
}

class _addCompanyState extends State<addCompany> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        actions: [
          IconButton(
            icon: Icon(Icons.arrow_back),
            onPressed: () {
              Navigator.pop(context);
            },
          )
        ],
        title: Text("Add New Contact"),
      ),
    );
  }
}

错误(我唯一遇到的错误)

════════ Exception caught by widgets library ═══════════════════════════════════
The builder for route "null" returned null.
The relevant error-causing widget was
    MaterialApp 

2 个答案:

答案 0 :(得分:0)

代替此:

b

使用此:

Navigator.push(context,
  MaterialPageRoute(builder: (BuildContext context) {
  return addCompany();
}));

您可能会问:“是不是同一回事?”。否。仅因为在第一个变量中,您就声明了Navigator.push( context, MaterialPageRoute(builder: (context) => addCompany()), ); 类型的变量上下文。因此,您没有使用负责导航部分的上下文变量。如果仔细看,您只需使用BuildContext,因为它以前已经传递到了build方法。

大箭头与一个方括号相同。

答案 1 :(得分:0)

@VishalPrabhu提到的解决方案应该起作用。如果不是,请尝试使用其他方法执行相同的操作。 步骤1-将类名addCompany重命名为AddCompany。 第2步-定义导航方法。

void changeScreen(BuildContext context, Widget widget) {
Navigator.push(context, MaterialPageRoute(builder: (context) => widget));
}

第3步-在需要屏幕导航的地方调用方法。

changeScreen(context, AddCompany());

**将futter和dart更新为最新版本。