미래 수익률 값을 변수처럼 사용하는 방법 플롯
갖고싶다Future
값을 반환하고 변수처럼 사용합니다.나는 이것을 가지고 있다.Future
기능.
Future<User> _fetchUserInfo(String id) async {
User fetchedUser;
await Firestore.instance
.collection('user')
.document(id)
.get()
.then((snapshot) {
final User user = User(snapshot);
fetchedUser = user;
});
return fetchedUser;
}
그리고 나는 그렇게 가치를 얻고 싶습니다.
final user = _fetchUserInfo(id);
하지만 제가 이렇게 사용하려고 했을 때.
new Text(user.userName);
다트는 인식하지 못합니다.User
수업이라고 써있어요.dynamic
.
반품 가치를 얻고 사용하려면 어떻게 해야 합니까?
제가 먼저 잘못하고 있는 건가요?어떤 도움이든 감사합니다!
코드를 단순화할 수 있습니다.
Future<User> _fetchUserInfo(String id) async {
User fetchedUser;
var snapshot = await Firestore.instance
.collection('user')
.document(id)
.get();
return User(snapshot);
}
당신은 또한 필요합니다.async
/await
가치를 보다
void foo() async {
final user = await _fetchUserInfo(id);
}
이런 식으로 쓰시오
var username;
dbHelper.getUsers().then((user) {
username = user.getName;
});
이 함수는 미래 값을 반환합니다.
dbHelper.getUsers()
그것은 이렇게 쓰여 있습니다.
getUsers() async { .... }
Futures in Float/dart를 사용하는 것을 명확히 하는 데 도움이 될 수 있는 다이바쿠의 원래 질문에 대해 조금 더 자세히 설명하자면,user
다음과 같습니다.
final user = _fetchUserInfo(id);
컴파일러가 유형을 유추하지 않으면 다음과 같습니다.
final Future<User> user = _fetchUserInfo(id);
미래 가치 확보 및 사용
다이바쿠는 어떻게 반환 가치를 얻을 수 있는지 물었습니다.user
그것을 사용합니다.
사용하기user
위젯에서 위젯은 변경사항을 감시/관찰하고 변경사항이 있을 때 다시 작성해야 합니다.
많은 상용어구 코드를 사용하여 수동으로 이 작업을 수행할 수 있습니다. 또는 를 사용할 수도 있습니다.FutureBuilder
당신을 위해 이 일을 한 것은:
FutureBuilder(future: user, builder: (context, snapshot)
{
if (snapshot.hasData) return Text(snapshot.data.userName);
return Container(width: 0.0, height: 0.0,);
}
보다 명확하게는 위의 내용을 다음과 같이 쓸 수 있습니다.
FutureBuilder<User>(future: user, builder: (context, AsyncSnapshot<User> userSnapshot)
{
if (userSnapshot.hasData) return Text(userSnapshot.data.userName);
return Container(width: 0.0, height: 0.0,);
}
FutureBuilder
위의 예에서, 동시에(즉, 즉시) 0 너비/높이 컨테이너 위젯을 반환하지만 관찰자를 미래에 연결합니다.user
Future 데이터가 언제 도착하는지 알 수 있습니다.
언제user
결국 "데이터"로 업데이트됩니다.FutureBuilder
의 관찰자에게 알리면 전화가 걸려옵니다.setState()
자신의 재건을 시작하는 거죠.이제는snapshot.hasData
이라true
,Text(snapshot.data.userName)
빈 컨테이너 대신 반환됩니다.
사용하지 않는 경우user
Widget Element 트리 구축의 동기화된 세계 내에서 디버깅을 위한 값을 출력하고 싶을 뿐입니다.then
:
user.then((u) => print(u.userName));
가치를 얻는 두 가지 방법이 있습니다.Future
.
사용.
async-await
:int _value = 0; // Instance variable. void func() async { int value = await _yourFuture(); // Await on your future. setState(() { _value = value; }); }
사용.
then
:int _value = 0; // Instance variable. void func() { _getPref().then((value) { setState(() { _value = value; // Future is completed with a value. }); }); }
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class ThreadExample implements Callable<String>{
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
return "Ashish";
}
}
public class FutureThreadExample {
public static void main(String a[]) throws InterruptedException, ExecutionException {
ExecutorService executorService=Executors.newFixedThreadPool(1);
List <Future<String>>objList=new ArrayList<Future<String>>();
for(int i=0;i<10;i++) {
Future<String> obj=executorService.submit(new ThreadExample());
objList.add(obj);
}
for( Future<String> fut:objList) {
System.out.println(fut.get());
}
executorService.shutdown();
}
}
언급URL : https://stackoverflow.com/questions/52068669/flutter-how-to-use-future-return-value-as-if-variable
'source' 카테고리의 다른 글
막대 순서 ggplot2 막대 그래프 (0) | 2023.06.28 |
---|---|
변환 상태가 업데이트되지 않음 (0) | 2023.06.28 |
로드 밸런서를 생성하지 못했습니다. 이유:기본 VPC를 찾을 수 없음 (0) | 2023.06.23 |
단일 파일을 사용한 Python Logging(함수 이름, 파일 이름, 줄 번호) (0) | 2023.06.23 |
파이어스토어에 많은 문서를 작성하는 가장 빠른 방법은 무엇입니까? (0) | 2023.06.23 |