Flutter 颤振中的网络呼叫在哪里编写?
我有一个带有3个选项卡的Flutter 颤振中的网络呼叫在哪里编写?,flutter,dart,flutter-bottomnavigation,Flutter,Dart,Flutter Bottomnavigation,我有一个带有3个选项卡的BottomNavigationBar。考虑我从电子商务应用程序中选择一个产品,从第一页的代码> BottomNavigationBarItem < /代码>。我需要在第二个BottomNavigationBarItem(购物车页面)中查看该产品。我已经在第二个BottomNavigationBarItem的initState()中编写了网络调用代码;但当我转到该页面时,它将不会被调用,并且我无法看到最近添加到购物车中的产品。在构建方法本身中编写它们更好吗?每次我转到其他
BottomNavigationBar
。考虑我从电子商务应用程序中选择一个产品,从第一页的代码> BottomNavigationBarItem < /代码>。我需要在第二个BottomNavigationBarItem
(购物车页面)中查看该产品。我已经在第二个BottomNavigationBarItem
的initState()
中编写了网络调用代码;但当我转到该页面时,它将不会被调用,并且我无法看到最近添加到购物车中的产品。在构建方法本身中编写它们更好吗?每次我转到其他选项卡时,在build方法中写入它们都会调用它。使用或网络调用并将数据流到UI希望这对您有所帮助
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _selectedPage = 0;
String _selectedProduct;
Widget getCurrentPage(){
switch(_selectedPage){
case 0:
return Page1((selectedProduct){
setState((){
this._selectedProduct = selectedProduct;
_selectedPage=1;
});});
case 1:
return Page2(this._selectedProduct);
case 2:
return Page3();
default:
return Center(child:Text('Error'));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: getCurrentPage(),
bottomNavigationBar: BottomNavigationBar(
onTap: (index){
setState((){
_selectedPage = index;
});
},
currentIndex: _selectedPage,
items: ['tab 1', 'tab 2', 'tab3'].map((e)=>BottomNavigationBarItem(
icon: Container(),
title: Text(e),
)).toList(),),
);
}
}
class Page1 extends StatelessWidget {
final Function(String) onProductClick;
const Page1(this.onProductClick);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:Text('Page 1')),
body:Column(
children: <Widget>[
RaisedButton(
child: Text('Product 1'),onPressed: ()=>onProductClick('Product 1'),),
RaisedButton(
child: Text('Product 2'),onPressed: ()=>onProductClick('Product 2'),),
RaisedButton(
child: Text('Product 3'),onPressed: ()=>onProductClick('Product 3'),),
RaisedButton(
child: Text('Product 4'),onPressed: ()=>onProductClick('Product 4'),),
RaisedButton(
child: Text('Product 5'),onPressed: ()=>onProductClick('Product 5'),),
],)
);
}
}
class Page2 extends StatelessWidget {
final String selectedProduct;
const Page2(this.selectedProduct);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:Text('Page 2')),
body:Center(child:Text(selectedProduct??'Nothing selected'))
);
}
}
class Page3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:Text('Page 3')),
body:Center(child:Text('Page 3'))
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int _selectedPage=0;
字符串\u选择的产品;
小部件getCurrentPage(){
开关(_selectedPage){
案例0:
返回第1页((所选产品){
设置状态(){
这.\u selectedProduct=selectedProduct;
_selectedPage=1;
});});
案例1:
返回第2页(此.\u所选产品);
案例2:
返回第3页();
违约:
返回中心(子项:文本('Error'));
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:getCurrentPage(),
底部导航栏:底部导航栏(
onTap:(索引){
设置状态(){
_selectedPage=索引;
});
},
currentIndex:_selectedPage,
项目:['tab 1','tab 2','tab 3'].map((e)=>BottomNavigationBarItem(
图标:Container(),
标题:文本(e),
)).toList(),),
);
}
}
类Page1扩展了无状态小部件{
ProductClick上的最终函数(字符串);
const Page1(this.onProductClick);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“第1页”),
正文:专栏(
儿童:[
升起的按钮(
子项:文本('Product 1'),按下时:()=>onProductClick('Product 1'),),
升起的按钮(
子项:文本('Product 2'),按下时:()=>onProductClick('Product 2'),),
升起的按钮(
子项:文本('Product 3'),按下时:()=>onProductClick('Product 3'),),
升起的按钮(
子项:文本('Product 4'),按下时:()=>onProductClick('Product 4'),),
升起的按钮(
子项:文本('Product 5'),按下时:()=>onProductClick('Product 5'),),
],)
);
}
}
类Page2扩展了无状态小部件{
最终字符串选择产品;
常量第2页(此.所选产品);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“第2页”),
正文:居中(子项:文本(selectedProduct???'Nothing selected'))
);
}
}
类Page3扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“第3页”),
正文:居中(子项:文本(“第3页”))
);
}
}
您可以将购物车项目存储在购物车项目列表中,然后在购物车页面中加载列表。因此,在第一个导航中,您将项目添加到该列表中,在第二个导航中,您将加载项目。@gegobyte但是,持久化该列表和所有项目变得非常复杂。。。没有其他方法吗?它具有与在build方法中编写网络调用相同的效果。是否可以仅在选中该选项卡时调用build()方法@库马苏利尼17