Flutter 需要帮助从自定义小部件获取相应的值吗

Flutter 需要帮助从自定义小部件获取相应的值吗,flutter,Flutter,我是弗利特的一个笨蛋,我需要帮助。所以我制作了这个计数器小部件,您可以使用按钮增加和减少计数器值,并在我的根小部件中调用了该小部件两次。现在我想在每次调用计数器小部件时分别获得这些计数器小部件的计数器值。我如何做到这一点 这是我的主.dart文件 class _MyHomePageState extends State<MyHomePage> { int count; @override Widget build(BuildContext context) {

我是弗利特的一个笨蛋,我需要帮助。所以我制作了这个计数器小部件,您可以使用按钮增加和减少计数器值,并在我的根小部件中调用了该小部件两次。现在我想在每次调用计数器小部件时分别获得这些计数器小部件的计数器值。我如何做到这一点

这是我的主.dart文件

class _MyHomePageState extends State<MyHomePage> {
  int count;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            CounterContainer(count, ValueKey(1)),
            Text('first counter : ${CounterContainer(count, ValueKey(1)).count}'),
            CounterContainer(count, ValueKey(2)),
            Text('second counter : ${CounterContainer(count, ValueKey(2)).count}'),
          ],
        ),
      ),
    );
  }
} 
class\u MyHomePageState扩展状态{
整数计数;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
计数器容器(计数,ValueKey(1)),
Text('first counter:${CounterContainer(count,ValueKey(1)).count}'),
计数器容器(计数,ValueKey(2)),
Text('second counter:${CounterContainer(count,ValueKey(2)).count}'),
],
),
),
);
}
} 
这是我的柜台小部件

class CounterContainer extends StatefulWidget {
  int count;

  CounterContainer(this.count, ValueKey<int> valueKey);

  @override
  _CounterContainerState createState() => _CounterContainerState();
}

class _CounterContainerState extends State<CounterContainer> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      widget.count = ++_counter;

      print('------------>${widget.count}');
    });
  }

  void _decrementCounter() {
    setState(() {
      if (_counter > 0) {
        widget.count = --_counter;
        print('------------>${widget.count}');
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        FlatButton(
          onPressed: _incrementCounter,
          child: Icon(Icons.add),
        ),
        Text('$_counter'),

        FlatButton(
          onPressed: _decrementCounter,
          child: Icon(Icons.remove),
        ),
      ],
    );
  }
}
类计数器容器扩展StatefulWidget{
整数计数;
计数器容器(this.count,ValueKey ValueKey);
@凌驾
_CounterContainerState createState();
}
类_CounterContainerState扩展状态{
int _计数器=0;
void _incrementCounter(){
设置状态(){
widget.count=+\u计数器;
打印('---------->${widget.count}');
});
}
void _递减计数器(){
设置状态(){
如果(_计数器>0){
widget.count=--u计数器;
打印('---------->${widget.count}');
}
});
}
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
扁平按钮(
按下时:\ u递增计数器,
子:图标(Icons.add),
),
文本(“$”计数器“),
扁平按钮(
按下时:\ u递减计数器,
子:图标(图标。删除),
),
],
);
}
}

您可以复制粘贴运行下面的完整代码
您可以定义两个计数器
counter1
counter2
并传递
回调
进行刷新

工作演示

代码片段

  void _incrementCounter() {
    setState(() {
      ...
    });
    widget.callback();
  }

  void _decrementCounter() {
    setState(() {
     ...
    });
    widget.callback();
  }
  ...
  CounterContainer counter1;
  CounterContainer counter2;

  void refresh() {
    print("refresh");
    setState(() {});
  }

  @override
  void initState() {
    counter1 = CounterContainer(count, ValueKey(1), refresh);
    counter2 = CounterContainer(count, ValueKey(2), refresh);
    super.initState();
  }
  ...
  children: <Widget>[
            counter1,
            Text('first counter : ${counter1.count}'),
            counter2,
            Text('second counter : ${counter2.count}'),
          ],
void\u递增计数器(){
设置状态(){
...
});
widget.callback();
}
void _递减计数器(){
设置状态(){
...
});
widget.callback();
}
...
柜柜柜柜1;
柜柜柜柜2;
无效刷新(){
打印(“刷新”);
setState((){});
}
@凌驾
void initState(){
计数器1=计数器容器(计数、值键(1)、刷新);
计数器2=计数器容器(计数、值键(2)、刷新);
super.initState();
}
...
儿童:[
计数器1,
Text('第一个计数器:${counter1.count}'),
第二,
Text('second counter:${counter2.count}'),
],
完整代码

import 'package:flutter/material.dart';

class CounterContainer extends StatefulWidget {
  int count;
  VoidCallback callback;

  CounterContainer(this.count, ValueKey<int> valueKey, this.callback);

  @override
  _CounterContainerState createState() => _CounterContainerState();
}

class _CounterContainerState extends State<CounterContainer> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      widget.count = ++_counter;

      print('------------>${widget.count}');
    });
    widget.callback();
  }

  void _decrementCounter() {
    setState(() {
      if (_counter > 0) {
        widget.count = --_counter;
        print('------------>${widget.count}');
      }
    });
    widget.callback();
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        FlatButton(
          onPressed: _incrementCounter,
          child: Icon(Icons.add),
        ),
        Text('$_counter'),
        FlatButton(
          onPressed: _decrementCounter,
          child: Icon(Icons.remove),
        ),
      ],
    );
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int count;
  CounterContainer counter1;
  CounterContainer counter2;

  void refresh() {
    print("refresh");
    setState(() {});
  }

  @override
  void initState() {
    counter1 = CounterContainer(count, ValueKey(1), refresh);
    counter2 = CounterContainer(count, ValueKey(2), refresh);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print('${counter1.count}');
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            counter1,
            Text('first counter : ${counter1.count}'),
            counter2,
            Text('second counter : ${counter2.count}'),
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
类计数器容器扩展StatefulWidget{
整数计数;
无效回调;
计数器容器(this.count、ValueKey、ValueKey、this.callback);
@凌驾
_CounterContainerState createState();
}
类_CounterContainerState扩展状态{
int _计数器=0;
void _incrementCounter(){
设置状态(){
widget.count=+\u计数器;
打印('---------->${widget.count}');
});
widget.callback();
}
void _递减计数器(){
设置状态(){
如果(_计数器>0){
widget.count=--u计数器;
打印('---------->${widget.count}');
}
});
widget.callback();
}
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
扁平按钮(
按下时:\ u递增计数器,
子:图标(Icons.add),
),
文本(“$”计数器“),
扁平按钮(
按下时:\ u递减计数器,
子:图标(图标。删除),
),
],
);
}
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
整数计数;
柜柜柜柜1;
柜柜柜柜2;
无效刷新(){
打印(“刷新”);
setState((){});
}
@凌驾
void initState(){
计数器1=计数器容器(计数、值键(1)、刷新);
计数器2=计数器容器(计数、值键(2)、刷新);
super.initState();
}
@凌驾
小部件构建(构建上下文){
打印('${counter1.count}');
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
计数器1,
Text('第一个计数器:${counter1.count}'),
第二,
Text('second counter:${counter2.count}'),
],
),
),
);
}
}

您可以复制粘贴运行下面的完整代码
您可以定义两个计数器
counter1
counter2
并传递
回调
进行刷新

工作演示

代码片段

  void _incrementCounter() {
    setState(() {
      ...
    });
    widget.callback();
  }

  void _decrementCounter() {
    setState(() {
     ...
    });
    widget.callback();
  }
  ...
  CounterContainer counter1;
  CounterContainer counter2;

  void refresh() {
    print("refresh");
    setState(() {});
  }

  @override
  void initState() {
    counter1 = CounterContainer(count, ValueKey(1), refresh);
    counter2 = CounterContainer(count, ValueKey(2), refresh);
    super.initState();
  }
  ...
  children: <Widget>[
            counter1,
            Text('first counter : ${counter1.count}'),
            counter2,
            Text('second counter : ${counter2.count}'),
          ],
void\u递增计数器(){
设置状态(){
...
});
widget.callback();
}
void _递减计数器(){
设置状态(){
...
});
widget.callback();
}
...
柜柜柜柜1;
柜柜柜柜2;