这是一个异步的Provider
,效果跟FutureBuild
差不多,代码源自于以下:
https://flutterbyexample.com/lesson/future-provider
FutureBuild
的使用可以参考以下链接:
https://blog.csdn.net/Mr_Tony/article/details/111572642
经过简单修改,只保留最核心的逻辑用于展示FutureProvider
的用法。
FutureProvider
是一个状态管理的工具,使用FutureProvider
可以做到数据的解耦,而使用FutureBuild
最起码也要传递一个构造函数。简单代码如下:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class Home {
final String city = "Portland";
Future<String> get fetchAddress {
final address = Future.delayed(Duration(seconds: 2), () {
return '1234 North Commercial Ave.';
});
return address;
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
title: Text('Material App Bar'),
),
body:HomeBody(),
),
);
}
}
class HomeBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: FutureProvider<String>(//外面有一层Center的意思想表达Provider用在那里都行,不一定非要在根布局,当然根布局的范围最广
initialData: '数据正在初始化...',
create: (context)=>Home().fetchAddress,
child:ChildBody(),
),
);
}
}
class ChildBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text('${context.watch<String>()}'),
);
}
}