0
点赞
收藏
分享

微信扫一扫

Flutter StatefulWidget传递数据,多级控件传递数据

一世独秀 2023-03-10 阅读 77


父类传递给子类可以通过构造方法。

那么子类给父类呢?

答案也是构造方法 直接传递VoidCallback进来

这个VoidCallback是通过查看onPress类型得到的

import 'package:flutter/material.dart';

class StateManagementDemo2 extends StatefulWidget {
@override
_StateManagement2State createState() => _StateManagement2State();
}

class _StateManagement2State extends State<StateManagementDemo2> {
int _count = 0;

void _increaseCount() {
setState(() {
_count += 1;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("StatueManagementDemo"),
elevation: 0.0,
),
body: Counter(_count, _increaseCount),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
setState(() {
_count += 1;
});
print(_count);
},
),
);
}
}

class Counter extends StatelessWidget {
final int count;
final VoidCallback increaseCount;

Counter(this.count, this.increaseCount);

@override
Widget build(BuildContext context) {
return Center(
child: ActionChip(
label: Text('$count'),
onPressed: increaseCount,
),
);
}
}

多级别当然就是多个构造

import 'package:flutter/material.dart';

class StateManagementDemo3 extends StatefulWidget {
@override
_StateManagement3State createState() => _StateManagement3State();
}

class _StateManagement3State extends State<StateManagementDemo3> {
int _count = 0;

void _increaseCount() {
setState(() {
_count += 1;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("StatueManagementDemo"),
elevation: 0.0,
),
body: ConunterWrapper(_count, _increaseCount),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
setState(() {
_count += 1;
});
print(_count);
},
),
);
}
}

class ConunterWrapper extends StatelessWidget {
final int count;
final VoidCallback increaseCount;

ConunterWrapper(this.count, this.increaseCount);

@override
Widget build(BuildContext context) {
return Center(
child: Counter(count, increaseCount),
);
}
}

class Counter extends StatelessWidget {
final int count;
final VoidCallback increaseCount;

Counter(this.count, this.increaseCount);

@override
Widget build(BuildContext context) {
return Center(
child: ActionChip(
label: Text('$count'),
onPressed: increaseCount,
),
);
}
}

下篇博客将对这个多种数据传递进行优化

举报

相关推荐

0 条评论