如何解决如何解决Flutter Navigation BuilderContext子类型错误?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter_auths/pages/searchservice.dart';
import 'package:flutter_auths/pages/tasks.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue,),home: new MyHomePage(),);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var queryResultSet = [];
var tempSearchStore = [];
initiateSearch(value) {
if (value.length == 0) {
setState(() {
queryResultSet = [];
tempSearchStore = [];
});
}
var capitalizedValue =
value.substring(0,1).toUpperCase() + value.substring(1);
if (queryResultSet.length == 0 && value.length == 1) {
SearchService().searchByName(value).then((QuerySnapshot docs) {
for (int i = 0; i < docs.documents.length; ++i) {
queryResultSet.add(docs.documents[i].data);
}
});
} else {
tempSearchStore = [];
queryResultSet.forEach((element) {
if (element['Username'].startsWith(capitalizedValue)) {
setState(() {
tempSearchStore.add(element);
});
}
});
}
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: Text('Firestore search'),body: ListView(children: <Widget>[
Padding(
padding: const EdgeInsets.all(10.0),child: TextField(
onChanged: (val) {
initiateSearch(val);
},decoration: InputDecoration(
prefixIcon: IconButton(
color: Colors.black,icon: Icon(Icons.arrow_back),iconSize: 20.0,onPressed: () {
Navigator.of(context).pop();
},contentPadding: EdgeInsets.only(left: 25.0),hintText: 'Search by name',border: OutlineInputBorder(
borderRadius: BorderRadius.circular(4.0))),SizedBox(height: 10.0),GridView.count(
padding: EdgeInsets.only(left: 10.0,right: 10.0),crossAxisCount: 2,crossAxisSpacing: 4.0,mainAxisSpacing: 4.0,primary: false,shrinkWrap: true,children: tempSearchStore.map((element) {
return buildResultCard(element);
}).toList())
]));
}
}
Widget buildResultCard(data) {
return Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),elevation: 2.0,child: Container(
child: Column(
children: <Widget> [ Text(data['Username'],textAlign: TextAlign.center,style: TextStyle(
color: Colors.black,fontSize: 20.0,RaisedButton(
onPressed: () {
Navigator.push(
data,MaterialPageRoute(builder: (data) => ProfilePage()),);
},child: const Text('asd',style: TextStyle(fontSize: 12)),]
)
)
);
}
在这里我从数据库中搜索一个用户,然后向我显示卡片中的结果,我添加了一个按钮,然后单击它,我想将该页面导航到另一个页面,但是发生以下错误。 this is the error and the app
因此,我想单击特定用户的按钮,然后将页面重定向到该用户的个人资料。我该怎么办?
解决方法
您将收到此错误,因为您没有传递buildContext,而是传递了数据。 因此,如果您从此处更改代码,则错误将被消除
import re
string = '#2a$#b%c%561#' # input string
new_string = '#' * len(re.sub(r'\D','',string))
到
Navigator.push(
data,MaterialPageRoute(builder: (data) => ProfilePage()),);
这是将数据传递到“个人资料页面”的方式。
也
Navigator.push(
context,MaterialPageRoute(builder: (context) => ProfilePage(username: data['Username']))
);
更改为
Widget buildResultCard(data)
和
Widget buildResultCard(context,data)
到
buildResultCard(element);
,
首先,您需要使用类似的数据导航到该页面
Navigator.push(
context,MaterialPageRoute(builder: (context) => ProfilePage(profileData: data))
);
然后您需要接收该数据
class ProfilePage extends StatefulWidget {
var profileData;
ProfilePage({this.profileData});
@override
_ProfilePageState createState() => _ProfilePageState();
}
class _ProfilePageState extends State<ProfilePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(widget.profileData['username']),),);
}
}
您可以通过其他方式传递和接收数据
Navigator.push(
context,MaterialPageRoute(builder: (context) => ProfilePage(),settings: RouteSettings(arguments: data))
);
然后
class ProfilePage extends StatefulWidget {
@override
_ProfilePageState createState() => _ProfilePageState();
}
class _ProfilePageState extends State<ProfilePage> {
var profileData;
@override
Widget build(BuildContext context) {
profileData=ModalRoute.of(context).settings.arguments;
return Scaffold(
body: Center(
child: Text(profileData['username']),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。