Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中的网络呼叫在哪里编写?_Flutter_Dart_Flutter Bottomnavigation - Fatal编程技术网

Flutter 颤振中的网络呼叫在哪里编写?

Flutter 颤振中的网络呼叫在哪里编写?,flutter,dart,flutter-bottomnavigation,Flutter,Dart,Flutter Bottomnavigation,我有一个带有3个选项卡的BottomNavigationBar。考虑我从电子商务应用程序中选择一个产品,从第一页的代码> BottomNavigationBarItem < /代码>。我需要在第二个BottomNavigationBarItem(购物车页面)中查看该产品。我已经在第二个BottomNavigationBarItem的initState()中编写了网络调用代码;但当我转到该页面时,它将不会被调用,并且我无法看到最近添加到购物车中的产品。在构建方法本身中编写它们更好吗?每次我转到其他

我有一个带有3个选项卡的
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