我是新手,我尝试了以前的解决方案来回答相同的问题,但这没有帮助。 在下面的代码中,当我单击添加图标时,我需要导航到要添加数据的另一页。但是即使我在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
答案 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更新为最新版本。