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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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
Dart 颤振:将数据从有状态类传递到另一个类_Dart_Flutter - Fatal编程技术网

Dart 颤振:将数据从有状态类传递到另一个类

Dart 颤振:将数据从有状态类传递到另一个类,dart,flutter,Dart,Flutter,我需要将数据(basketCount)从Stateful类(DashboardState)传递到另一个不支持状态的类(TestTabBarDelegate)。两个类都在同一个文件中。我怎样才能做到 我尝试了mixins,但是mixins不能使用Stateful类 import 'dart:convert'; import 'package:benyaghlane/widgets/default_aap_bar_row.dart'; import 'package:flutter/materia

我需要将数据(
basketCount
)从
Stateful
类(
DashboardState
)传递到另一个不支持状态的类(
TestTabBarDelegate
)。两个类都在同一个文件中。我怎样才能做到

我尝试了
mixins
,但是
mixins
不能使用
Stateful

import 'dart:convert';

import 'package:benyaghlane/widgets/default_aap_bar_row.dart';
import 'package:flutter/material.dart';
import 'package:benyaghlane/pages/liste_panier.dart';
import 'package:benyaghlane/pages/produit_sauvegarde.dart';
import 'package:benyaghlane/widgets/grid_categories.dart';
import 'package:benyaghlane/widgets/grid_meilleurs_ventes.dart';
import 'package:benyaghlane/widgets/grid_produits_fards.dart';
import 'package:benyaghlane/widgets/side_drawer.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:carousel_slider/carousel_slider.dart';

class TestTabBarDelegate extends SliverPersistentHeaderDelegate {
  TestTabBarDelegate({this.controller});

  final TabController controller;

  @override
  double get minExtent => 85.0;

  @override
  double get maxExtent => 85.0;

  @override
  Widget build(
      BuildContext context, double shrinkOffset, bool overlapsContent) {
    return new Container(
      height: 200.0,
      child: new TabBar(
        controller: controller,
        key: new PageStorageKey<Type>(TabBar),
        labelColor: Colors.black,
        labelStyle: TextStyle(color: Colors.black, fontSize: 12.0),
        indicatorColor: Color(0xff93b800),
        tabs: [
          Tab(
            icon: Icon(
              Icons.home,
              color: Color(0xff93b800),
            ),
            text: "ACCUEIL",
          ),
          Tab(
            icon: Icon(Icons.favorite_border, color: Colors.red),
            text: "SAUVEGARDER",
          ),
          Tab(
              text: "PANIER",
              icon: Stack(
                overflow: Overflow.visible,
                children: <Widget>[
                  Icon(Icons.shopping_cart, color: Color(0xffda9a25)),
                  Positioned(
                    left: 16.0,
                    bottom: 12.0,
                    child: Container(
                      padding: EdgeInsets.all(4.0),
                      decoration: BoxDecoration(
                          color: Color(0xff93b800), shape: BoxShape.circle),
                      child: Center(
                        child: Text(
                          "$basketCount",
                          style: TextStyle(color: Colors.white),
                        ),
                      ),
                    ),
                  )
                ],
              )),
        ],
      ),
    );
  }

  @override
  bool shouldRebuild(covariant TestTabBarDelegate oldDelegate) {
    return oldDelegate.controller != controller;
  }
}

class Dashboard extends StatefulWidget {
  @override
  DashboardState createState() => new DashboardState();

  int index;
  Dashboard(int index) {
    this.index = index;
  }
}

class DashboardState extends State<Dashboard> with TickerProviderStateMixin {
  ScrollController _scrollController = new ScrollController();

  TabController _tabController;

  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

  int basketCount = 0;

  Future _getBasket() async {
    final SharedPreferences prefs = await _prefs;

    var b = prefs.getString('basket') ?? '';
    if (b != '' && b != '[]') {
      var basket = json.decode(b);
        // this.basketCount = basket.length;
        print(basket.length);
        return basket.length;
    }
  }

  @override
  void initState() {
    super.initState();
    _scrollController = new ScrollController();
    _tabController =
        new TabController(length: 3, vsync: this, initialIndex: widget.index);
  }

  @override
  void dispose() {
    _scrollController.dispose();
    _tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new PreferredSize(
          preferredSize: new Size(MediaQuery.of(context).size.width, 60.0),
          child: new DefaultAppBar()),
      body: Container(
        margin: EdgeInsets.only(top: 30.0),
        child: new NestedScrollView(
          controller: _scrollController,
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            return <Widget>[
              new SliverPersistentHeader(
                pinned: false,
                delegate: new TestTabBarDelegate(controller: _tabController),
              ),
            ];
          },
          body: new TestHomePageBody(
            tabController: _tabController,
            scrollController: _scrollController,
          ),
        ),
      ),
      drawer: SideDrawer(),
    );
  }
}

final List<String> imgList = [
  'https://images.unsplash.com/photo-1522205408450-add114ad53fe?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=368f45b0888aeb0b7b08e3a1084d3ede&auto=format&fit=crop&w=1950&q=80',
  'https://images.unsplash.com/photo-1519125323398-675f0ddb6308?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=94a1e718d89ca60a6337a6008341ca50&auto=format&fit=crop&w=1950&q=80',
  'https://images.unsplash.com/photo-1523205771623-e0faa4d2813d?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=89719a0d55dd05e2deae4120227e6efc&auto=format&fit=crop&w=1953&q=80',
  'https://images.unsplash.com/photo-1508704019882-f9cf40e475b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=8c6e5e3aba713b17aa1fe71ab4f0ae5b&auto=format&fit=crop&w=1352&q=80',
  'https://images.unsplash.com/photo-1519985176271-adb1088fa94c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=a0c8d632e977f94e5d312d9893258f59&auto=format&fit=crop&w=1355&q=80'
];
final List child = map<Widget>(
  imgList,
  (index, i) {
    return Container(
      margin: EdgeInsets.all(5.0),
      child: ClipRRect(
        borderRadius: BorderRadius.all(Radius.circular(5.0)),
        child: Stack(children: <Widget>[
          Image.network(i, fit: BoxFit.fill, width: 1000.0),
          Positioned(
            bottom: 0.0,
            left: 0.0,
            right: 0.0,
            child: Container(
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  colors: [
                    Color.fromARGB(200, 0, 0, 0),
                    Color.fromARGB(0, 0, 0, 0)
                  ],
                  begin: Alignment.bottomCenter,
                  end: Alignment.topCenter,
                ),
              ),
              padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
              child: Text(
                'No. $index image',
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 20.0,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
          ),
        ]),
      ),
    );
  },
).toList();

List<T> map<T>(List list, Function handler) {
  List<T> result = [];
  for (var i = 0; i < list.length; i++) {
    result.add(handler(i, list[i]));
  }

  return result;
}

class TestHomePageBody extends StatefulWidget {
  TestHomePageBody({this.scrollController, this.tabController});

  final ScrollController scrollController;
  final TabController tabController;

  TestHomePageBodyState createState() => new TestHomePageBodyState();
}

class TestHomePageBodyState extends State<TestHomePageBody> {
  Key _key = new PageStorageKey({});
  bool _innerListIsScrolled = false;

  void _updateScrollPosition() {
    if (!_innerListIsScrolled &&
        widget.scrollController.position.extentAfter == 0.0) {
      setState(() {
        _innerListIsScrolled = true;
      });
    } else if (_innerListIsScrolled &&
        widget.scrollController.position.extentAfter > 0.0) {
      setState(() {
        _innerListIsScrolled = false;
        // Reset scroll positions of the TabBarView pages
        _key = new PageStorageKey({});
      });
    }
  }

  @override
  void initState() {
    widget.scrollController.addListener(_updateScrollPosition);
    super.initState();
  }

  @override
  void dispose() {
    widget.scrollController.removeListener(_updateScrollPosition);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new TabBarView(
      controller: widget.tabController,
      key: _key,
      children: <Widget>[
        SingleChildScrollView(
          child: Column(
            children: <Widget>[ 
                  CarouselSlider(
                    viewportFraction: 1.0,
                    aspectRatio: 2.0,
                    autoPlay: true,
                    enlargeCenterPage: false,
                    items: map<Widget>(
                      imgList,
                      (index, i) {
                        return Container(
                          decoration: BoxDecoration(
                            image: DecorationImage(
                                image: NetworkImage(i), fit: BoxFit.cover),
                          ),
                        );
                      },
                    ),
                  ),
              Container(
                margin: EdgeInsets.only(top: 20.0, bottom: 20.0),
                child: new Column(
                  children: <Widget>[
                    GridCategories(),
                    SizedBox(
                      height: 20.0,
                    ),
                    CarouselSlider(
                    viewportFraction: 1.0,
                    aspectRatio: 2.0,
                    autoPlay: true,
                    enlargeCenterPage: false,
                    items: map<Widget>(
                      imgList,
                      (index, i) {
                        return Container(
                          decoration: BoxDecoration(
                            image: DecorationImage(
                                image: NetworkImage(i), fit: BoxFit.cover),
                          ),
                        );
                      },
                    ),
                  ),
                    Container(
                      margin: EdgeInsets.only(top: 20.0),
                      child: Text('Meilleurs ventes',
                          style: TextStyle(fontSize: 25.0)),
                    ),
                    GridMeilleurVente(),
                    SizedBox(
                      height: 20.0,
                    ),
                    CarouselSlider(
                    viewportFraction: 1.0,
                    aspectRatio: 2.0,
                    autoPlay: true,
                    enlargeCenterPage: false,
                    items: map<Widget>(
                      imgList,
                      (index, i) {
                        return Container(
                          decoration: BoxDecoration(
                            image: DecorationImage(
                                image: NetworkImage(i), fit: BoxFit.cover),
                          ),
                        );
                      },
                    ),
                  ),
                    Container(
                      margin: EdgeInsets.only(top: 20.0),
                      child: Text('Produits Phare',
                          style: TextStyle(fontSize: 25.0)),
                    ),
                    GridProduitsFards(),
                  ],
                ),
              ),
            ],
          ),
        ),
        ProduitSauvegarder(),
        ListPanier(),
      ],
    );
  }
}
导入'dart:convert';
导入“package:benyaghlane/widgets/default_aap_bar_row.dart”;
进口“包装:颤振/材料.省道”;
导入“package:benyaghlane/pages/liste_panier.dart”;
进口“包装:benyaghlane/pages/produit_sauvegarde.dart”;
导入“package:benyaghlane/widgets/grid_categories.dart”;
导入“包:benyaghlane/widgets/grid_meilleurs_ventes.dart”;
导入“包:benyaghlane/widgets/grid_produits_fards.dart”;
导入“package:benyaghlane/widgets/side_drawer.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
导入“package:carousel_slider/carousel_slider.dart”;
类TestTabBarDelegate扩展SliverPersistentHeaderDelegate{
TestTabBarDelegate({this.controller});
最终选项卡控制器;
@凌驾
double-get-minExtent=>85.0;
@凌驾
double get maxExtent=>85.0;
@凌驾
小部件构建(
BuildContext上下文、双收缩偏移、布尔重叠内容){
退回新货柜(
高度:200.0,
孩子:新的TabBar(
控制器:控制器,
键:新页面存储键(TabBar),
labelColor:Colors.black,
标签样式:文本样式(颜色:Colors.black,字体大小:12.0),
指示颜色:颜色(0xff93b800),
选项卡:[
标签(
图标:图标(
我的家,
颜色:颜色(0xff93b800),
),
文本:“ACCUEIL”,
),
标签(
图标:图标(Icons.favorite_边框,颜色:Colors.red),
文字:“SAUVEGARDER”,
),
标签(
文本:“窗格”,
图标:堆栈(
溢出:溢出。可见,
儿童:[
图标(Icons.shopping_cart,颜色:color(0xffda9a25)),
定位(
左:16.0,
底部:12.0,
子:容器(
填充:所有边缘设置(4.0),
装饰:盒子装饰(
颜色:颜色(0xff93b800),形状:BoxShape.circle),
儿童:中心(
子:文本(
“$basketCount”,
样式:TextStyle(颜色:Colors.white),
),
),
),
)
],
)),
],
),
);
}
@凌驾
布尔应重建(协变测试选项卡Baldelegate oldDelegate){
返回oldDelegate.controller!=控制器;
}
}
类Dashboard扩展StatefulWidget{
@凌驾
DashboardState createState()=>新建DashboardState();
整数指数;
仪表板(int索引){
这个指数=指数;
}
}
类DashboardState使用TickerProviderStateMixin扩展状态{
ScrollController_ScrollController=新的ScrollController();
TabController\u TabController;
Future_prefs=SharedReferences.getInstance();
int basketCount=0;
Future\u getBasket()异步{
最终共享优先权=等待优先权;
var b=prefs.getString('basket')??“”;
如果(b!=''&&b!='[]'){
var basket=json.decode(b);
//this.basketCount=basket.length;
打印(篮子长度);
返回篮长度;
}
}
@凌驾
void initState(){
super.initState();
_scrollController=新的scrollController();
_选项卡控制器=
新的TabController(长度:3,vsync:this,initialIndex:widget.index);
}
@凌驾
无效处置(){
_scrollController.dispose();
_tabController.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的PreferredSize(
preferredSize:新大小(MediaQuery.of(context).Size.width,60.0),
子项:新建DefaultAppBar()),
主体:容器(
边距:仅限边缘集(顶部:30.0),
子项:新嵌套滚动视图(
控制器:\ u滚动控制器,
headerSliverBuilder:(BuildContext上下文,boolInnerBoxIsCrolled){
返回[
新型滑片导板(
错,,
代表:新的TestTabBarDelegate(控制器:_TabbController),
),
];
},
正文:新的TestHomePageBody(
tabController:\u tabController,
scrollController:\u scrollController,
),
),
),
抽屉:侧抽屉(),
);
}
}
最终列表imgList=[
'https://images.unsplash.com/photo-1522205408450-add114ad53fe?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=368F45B088AEB0B7B08E3A1084D3EDE&auto=format&fit=crop&w=1950&q=80',
'https://images.unsplash.com/photo-1519125323398-675f0ddb6308?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=94a1e718d89ca60a6337a6008341ca50&auto=format&fit=crop&w=1950&q=80',
'https://images.unsplash.com/photo-1523205771623-e0faa4d2813d?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=89719a0d55dd05e2deae4120227e6efc&auto=format&fit=crop&w=1953&q=80',
'https://images.unsplash.com/photo-1508704019882-f9cf40e475b4?ixlib=rb-0.3.5&ixid=eyjhcbfawqiojeymdd9&s=8c6e5e3aba713b17aa1fe71ab4f0ae5b&auto=format&fit=crop&w=1352&q=80',
'https://images.unsplash.com/photo-1519985176271-adb1088fa94c?ixlib=rb-0.3.5&ixid=eyjhcbfawqiojeymdd9&s=a0c8d632e977f94e5d312d9893258f59&auto=format&fit=crop&w=1355&q=80'
];
最终列表子项=映射(
英格利特,
(索引一){
返回容器(
边距:所有边缘集(5.0),
孩子:ClipRRect(
borderRadius:borderRadius.all(半径.圆形(5.0)),
子:堆栈(子:[
Image.net