[英]How i can pass Data from one widget to another widget in flutter?
I want to pass Data from one widget to another widget.我想将数据从一个小部件传递到另一个小部件。 I'm getting data from firebase and I want the pass that data across the widgets.
我从 firebase 获取数据,我希望通过小部件传递该数据。 How to pass Data from one screen to another screen.
如何将数据从一个屏幕传递到另一个屏幕。 this is how my code looks like.
这就是我的代码的样子。
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
int _currentindex = 0;
final List<Widget> _children = [
Dashboard(),
Search(),
];
void onTappedBar(int index) {
setState(() {
_currentindex = index;
});
}
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamBuilder<UserData>(
stream: DatabaseService(uid: user.uid).userData,
builder: (context, snapshot) {
if (snapshot.hasData) {
UserData userData = snapshot.data;
return return Scaffold(
backgroundColor: Color(0xFFf6f5fb),
body: _children[_currentindex],
bottomNavigationBar: CurvedNavigationBar(
onTap: onTappedBar,
index: _currentindex,
items: <Widget>[
Icon(
Icons.home,
),
Icon(
Icons.search,
],
),
);
});
}
}
From this widget, Data get loaded from firebase.从此小部件中,数据从 firebase 加载。 Now I want pass snapshot.data to
Dashboard()
widget and Search()
widget.现在我想将snapshot.data传递给
Dashboard()
小部件和Search()
小部件。
i want show the username Dashboard().我想显示用户名 Dashboard()。 this how my ```Dashboard()`` Widget for exmaple
这就是我的 ```Dashboard()`` 小部件的例子
class Dashboard extends StatefulWidget {
@override
_DashboardState createState() => _DashboardState();
}
class _DashboardState extends State<Dashboard> {
@override
Widget build(BuildContext context) {
return Center(
child: Text('Here i want display the data')
),
);
}
}
Here is the model class:这是 model class:
class User {
final String uid;
User({this.uid});
}
class UserData {
final String uid;
final String username;
final String phonenumber;
UserData({ this.uid, this.username, this.phonenumber });
}
pass it through constructor if it is simple scenario like yours:如果它是像你这样的简单场景,则通过构造函数传递它:
class Dashboard extends StatefulWidget {
final UserData userData;
// userData is not optional-named parameter
const Dashboard(this.userData, {Key key}) : super(key: key);
@override
_DashboardState createState() => _DashboardState();
}
class _DashboardState extends State<Dashboard> {
@override
Widget build(BuildContext context) {
final UserData userData = widget.userData;//do something with user
return Center(
child: Text('user is ${user.username}')
),
);
}
}
and the HomeState
(don't save widgets as fields of the class, create them on the fly):和
HomeState
(不要将小部件保存为 class 的字段,即时创建它们):
class _HomeState extends State<Home> {
int _currentindex = 0;
void onTappedBar(int index) {
setState(() {
_currentindex = index;
});
}
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamBuilder<UserData>(
stream: DatabaseService(uid: user.uid).userData,
builder: (context, snapshot) {
if (snapshot.hasData) {
UserData userData = snapshot.data;
return Scaffold(
backgroundColor: Color(0xFFf6f5fb),
body: Column(
children: [
Dashboard(userData),
Search(userData),
],
),
bottomNavigationBar: CurvedNavigationBar(
onTap: onTappedBar,
index: _currentindex,
items: <Widget>[
Icon(
Icons.home,
),
Icon(
Icons.search,
],
),
);
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.