Skip to content

ingod9true/pagesindecator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pagesindecator

rxdart(use extend opts)+ StreamProvider (provider v5) (data sample is model)

补充FutureProvider的用法

class UserProvider {
  final String _dataPath = "assets/data/users.json";
  List<User> users;

  Future<List<User>> loadUserData( ) async {
    var dataString = await loadAsset();
    Map<String, dynamic> jsonUserData = jsonDecode(dataString);
    users = UserList.fromJson(jsonUserData['users']).users;
    print('done loading user!' + jsonEncode(users));
    return users;
  }

  Future<String> loadAsset() async {
    return await Future.delayed(Duration(seconds: 10), () async {
      return await rootBundle.loadString('assets/data/users.json');
    });
  }
}
//////
 MultiProvider(
        providers: [
          FutureProvider(builder: (_) => UserProvider().loadUserData()),
        ],
        child: MyApp()
    )

...

其他一致,就是要提供个future即可

另外备注future的几个初始化方法

Flutter Future 

单个future创建方法
丢个void函数
var future = Future(() {
  print("哈哈哈");
});

丢个值或者对象
Future.value(“dss”). 

延迟执行的创建函数
Future.delayed()



 m 创建 方法

Future.forEach批量创建
Future.forEach({1,2,3}, (num){
  return Future.delayed(Duration(seconds: num),(){print(num);});
});

 Future.wait用来等待多个future完成,并收集它们的结果。
var future1 = new Future.delayed(new Duration(seconds: 1), () => 1); var future2 = new Future.delayed(new Duration(seconds: 2), () => 2); var future3 = new Future.delayed(new Duration(seconds: 3), () => 3); Future.wait({future1,future2,future3}).then(print).catchError(print); //运行结果: [1, 2, 3]


Future .any返回的是第一个执行完成的future的结果,不会管这个结果是正确的还是error的。
Future .any([1, 2, 5].map( (delay) => new Future.delayed(new Duration(seconds: delay), () => delay))) .then(print) .catchError(print);

DoWhile
void futureDoWhile(){ 
var random = new Random(); 
var totalDelay = 0; 

Future .doWhile(() {
 if (totalDelay > 10) { 
print('total delay: $totalDelay seconds'); 
return false; 
} 

var delay = random.nextInt(5) + 1; 
totalDelay += delay; 

return new 
Future.delayed(
new Duration(seconds: delay), (){ 
print('waited $delay seconds'); return true; 
}); })
 .then(print) 
.catchError(print); }

Future.microtask 创建一个在microtask队列运行的future。(优先执行)
Future.microtask((){
 print("microtask event");
});


===================================================================
处理Future结果

Future<R> then<R>(FutureOr<R> onValue(T value), {Function onError});
 Future<T> catchError(Function onError, {bool test(Object error)});
 Future<T> whenComplete(FutureOr action());

About

rxdart(use extend opts)+ StreamProvider (provider v5) (data sample is model)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors