import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_example/order_provider.dart';
import 'color_model.dart';
import 'counter_model.dart';
import 'goods_model.dart';
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final counter = Provider.of<CounterModel>(
context,
);
final textSize = Provider.of<int>(context);
return Scaffold(
appBar: AppBar(
title: Text('First Page'),
),
body: Center(
child: Text(
'Value: ${counter.value}',
style: TextStyle(
fontSize: textSize.toDouble(),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => Navigator.of(context).push(MaterialPageRoute(builder: (context) => SecondScreen())),
child: Icon(Icons.navigate_next),
),
);
}
}
/// This is a single page provider,
/// it will be destroyed when the page is removed,
/// and the status will be reset.
class SecondScreenProvider extends StatefulWidget {
final Widget child;
SecondScreenProvider({@required this.child});
@override
_SecondScreenProviderState createState() => _SecondScreenProviderState();
}
class _SecondScreenProviderState extends State<SecondScreenProvider> {
ColorModel _colorModel = ColorModel();
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: _colorModel,
child: widget.child,
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SecondScreenProvider(
child: DefaultTabController(
length: 3,
child: Scaffold(
appBar: buildAppBar(),
body: TabBarView(children: [
buildCounterText(),
showIconWithColor(),
showIconWithColor(),
]),
floatingActionButton: buildActionButtons(),
),
),
);
}
Column buildActionButtons() {
return Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Consumer<ColorModel>(
builder: (context, ColorModel colorModel, child) {
return FloatingActionButton(
heroTag: 'no_hero',
child: Icon(Icons.swap_horizontal_circle),
onPressed: () {
colorModel.changeColor();
},
);
},
),
SizedBox(height: 20),
Consumer<CounterModel>(
builder: (context, CounterModel counter, child) => FloatingActionButton(
onPressed: () => counter.increment(),
child: child,
),
child: Icon(Icons.add),
),
],
);
}
Consumer2<CounterModel, int> buildCounterText() {
return Consumer2<CounterModel, int>(
builder: (context, CounterModel counter, int textSize, child) {
return Center(
child: Text(
'Value: ${counter.value}',
style: TextStyle(
fontSize: textSize.toDouble(),
),
),
);
},
);
}
AppBar buildAppBar() {
return AppBar(
title: Text('Second Page'),
bottom: TabBar(tabs: [
Tab(text: 'show counter'),
Tab(text: 'show color'),
Tab(text: 'show color'),
]),
);
}
Container showIconWithColor() {
return Container(
alignment: Alignment.center,
child: Consumer<ColorModel>(
builder: (context, ColorModel colorModel, child) {
return Icon(
Icons.stars,
color: colorModel.color,
size: 100,
);
},
),
);
}
}
class GoodsListScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => GoodsListProvider(),
child: Scaffold(
body: Selector<GoodsListProvider, GoodsListProvider>(
shouldRebuild: (pre, next) => pre.shouldRebuild,
selector: (context, provider) => provider,
builder: (context, provider, child) {
provider.rebuild();
return ListView.builder(
itemCount: provider.total,
itemBuilder: (context, index) {
return Selector<GoodsListProvider, Goods>(
selector: (context, provider) => provider.goodsList[index],
builder: (context, data, child) {
print(('No.${index + 1} rebuild'));
return ListTile(
title: Text(data.goodsName),
trailing: GestureDetector(
onTap: () => provider.collect(index),
child: Icon(data.isCollection ? Icons.star : Icons.star_border),
),
);
},
);
},
);
},
),
floatingActionButton: Consumer<GoodsListProvider>(
builder: (context, GoodsListProvider model, child) {
return FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
model.addAll();
},
);
},
),
),
);
}
}
class OrderListScreen extends StatefulWidget {
@override
_OrderListScreenState createState() => _OrderListScreenState();
}
class _OrderListScreenState extends State<OrderListScreen> {
OrderProvider _provider = OrderProvider();
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: _provider,
child: Scaffold(
body: Selector<OrderProvider, List<Order>>(
selector: (BuildContext _, OrderProvider provider) => provider.orderList,
builder: (BuildContext _, List<Order> orderList, Widget __) {
return ListView.builder(
itemCount: _provider.listSize,
itemBuilder: (context, index) {
return Selector<OrderProvider, Order>(
selector: (BuildContext _, OrderProvider provider) => provider.orderList[index],
builder: (BuildContext _, Order data, Widget __) {
print(('No.${index + 1} rebuild'));
return ListTile(
title: Text(data.goodsName),
trailing: GestureDetector(
onTap: () => _provider.collect(index),
child: Icon(data.isCollection ? Icons.star : Icons.star_border),
),
);
},
);
},
);
},
),
floatingActionButton: Consumer<OrderProvider>(
builder: (BuildContext _, OrderProvider provider, Widget __) {
return FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
provider.addAll();
},
);
},
),
),
);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
FlutterDemo合集.7z
共3495个文件
png:1233个
xml:417个
dart:256个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 24 浏览量
2023-07-13
16:00:52
上传
评论
收藏 48.87MB 7Z 举报
温馨提示
FlutterDemo合集.7z
资源推荐
资源详情
资源评论
收起资源包目录
FlutterDemo合集.7z (3495个子文件)
strings_en.arb 0B
strings_en.arb 0B
strings_en.arb 0B
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
gradlew.bat 2KB
screens.dart 7KB
rotating_bar.dart 6KB
intro_slider_demo.dart 6KB
audio_screen.dart 5KB
form_pop_demo.dart 4KB
main.dart 4KB
main.dart 4KB
im_demo.dart 4KB
spinkit_demo.dart 4KB
another_demo.dart 4KB
delayed_animation_demo.dart 4KB
navigate_button.dart 4KB
parent_animation_demo.dart 3KB
sliver_demo.dart 3KB
hero_demo.dart 3KB
textfields_focus_demo.dart 3KB
intro_view_demo.dart 3KB
basic_animation_demo.dart 3KB
hide_bottom_bar.dart 3KB
navigation_keep_alive.dart 3KB
hidden_widget_animation_demo.dart 3KB
widget_to_image_demo.dart 2KB
react_getter.dart 2KB
photo_hero.dart 2KB
cupertino_action_sheet_action_demo.dart 2KB
expansion_panel_list.dart 2KB
search_bar_demo.dart 2KB
bottom_navigation_widget.dart 2KB
browser_and_webview_demo.dart 2KB
another_parent_animation_demo.dart 2KB
bottom_appBar_demo2.dart 2KB
week15_inherited_model.dart 2KB
gridview_demo.dart 2KB
will_pop_scpoe_demo.dart 2KB
custome_router.dart 2KB
overlay_demo2.dart 2KB
tel_and_sms_demo.dart 2KB
basic_structure_hero.dart 2KB
week10_table.dart 2KB
week31_draggable.dart 2KB
cupertino_sliver_navigation_bar_demo.dart 2KB
load_image_demo.dart 2KB
overlay_demo.dart 2KB
pull_down_refresh_pull_up_load.dart 2KB
email_demo.dart 2KB
bottom_appBar_demo.dart 2KB
custom_navigator.dart 2KB
pull_on_loading.dart 2KB
week4_animated_container.dart 2KB
draggable_widget.dart 2KB
week30_value_listenable_builder.dart 2KB
login_screen.dart 2KB
warp_demo.dart 2KB
pull_to_refresh.dart 2KB
overlay_demo3.dart 2KB
reorderable_list_view_demo.dart 2KB
main.dart 2KB
week12_sliver_list_grid.dart 2KB
共 3495 条
- 1
- 2
- 3
- 4
- 5
- 6
- 35
资源评论
应用市场
- 粉丝: 456
- 资源: 3808
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功