如何在颤动中将数据从一个小部件传递到另一个小部件?
Posted
技术标签:
【中文标题】如何在颤动中将数据从一个小部件传递到另一个小部件?【英文标题】:How i can pass Data from one widget to another widget in flutter? 【发布时间】:2020-08-08 09:55:15 【问题描述】:我想将数据从一个小部件传递到另一个小部件。 我正在从 firebase 获取数据,我希望通过小部件传递该数据。 如何将数据从一个屏幕传递到另一个屏幕。 这就是我的代码的样子。
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,
],
),
);
);
从此小部件中,数据从 firebase 加载。现在我想将 snapshot.data 传递给 Dashboard()
小部件和 Search()
小部件。
我想显示用户名 Dashboard()。 这就是我的 ```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')
),
);
这是模型类:
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 );
【问题讨论】:
【参考方案1】:如果是像你这样的简单场景,请通过构造函数:
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')
),
);
和HomeState
(不要将小部件保存为类的字段,动态创建它们):
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,
],
),
);
);
【讨论】:
@Lucii 查看已编辑的答案,如果它回答了您的问题,则将其标记为 true :) 我收到一条错误消息 没有为类“_HomeState”定义方法“_Column”。尝试将名称更正为现有方法的名称,或定义名为“_Column”的方法。 @Lucii 这是答案中的错字,也不要复制答案,这样重写它你会看到你的问题是什么 我是编码新手,也是这里的新手。谢谢它醒了。以上是关于如何在颤动中将数据从一个小部件传递到另一个小部件?的主要内容,如果未能解决你的问题,请参考以下文章