source

미래 수익률 값을 변수처럼 사용하는 방법 플롯

factcode 2023. 6. 23. 22:29
반응형

미래 수익률 값을 변수처럼 사용하는 방법 플롯

갖고싶다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 너비/높이 컨테이너 위젯을 반환하지만 관찰자를 미래에 연결합니다.userFuture 데이터가 언제 도착하는지 알 수 있습니다.

언제user결국 "데이터"로 업데이트됩니다.FutureBuilder의 관찰자에게 알리면 전화가 걸려옵니다.setState()자신의 재건을 시작하는 거죠.이제는snapshot.hasData이라true,Text(snapshot.data.userName)빈 컨테이너 대신 반환됩니다.


사용하지 않는 경우userWidget Element 트리 구축의 동기화된 세계 내에서 디버깅을 위한 값을 출력하고 싶을 뿐입니다.then:

user.then((u) => print(u.userName));

가치를 얻는 두 가지 방법이 있습니다.Future.

  1. 사용.async-await:

    int _value = 0; // Instance variable.
    
    void func() async {
      int value = await _yourFuture(); // Await on your future.
      setState(() {
        _value = value;
      });
    }
    
  2. 사용.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

반응형