Flutter 공급자 사용

Ria_teams

ListView에서 즐겨 찾기 선택을 만드는 자습서의 코드를 보았습니다. 그러나 공급자를 사용하지 않는 것을 보았습니다. 사용하는 것이 더 나은지 궁금합니다. 각 항목의 버튼을 클릭하여 즐겨 찾기 선택을 만들고 다른 ListView에서 선택 항목을 검색하고 싶습니다. 다음은 튜토리얼의 코드입니다.

main.dart

import 'package:badges/badges.dart';
import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';
import 'package:words/favorite_words_route.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Likely Words',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Likely Words'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> words = nouns.take(40).toList();
  List<String> savedWords = List<String>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: <Widget>[
          Badge(
            badgeContent: Text('${savedWords.length}'),
            toAnimate: false,
            position: BadgePosition.topRight(top: 0, right: 0),
            child: IconButton(
              icon: Icon(Icons.bookmark),
              onPressed: () => pushToFavoriteWordsRoute(context),
            ),
          ),
        ],
      ),
      body: ListView.separated(
        itemCount: words.length,
        separatorBuilder: (BuildContext context, int index) => Divider(),
        itemBuilder: (BuildContext context, int index) {
          String word = words[index];
          bool isSaved = savedWords.contains(word);

          return ListTile(
            title: Text(word),
            trailing: Icon(
              isSaved ? Icons.favorite : Icons.favorite_border,
              color: isSaved ? Colors.red : null,
            ),
            onTap: () {
              setState(() {
                if (isSaved) {
                  savedWords.remove(word);
                } else {
                  savedWords.add(word);
                }
              });
            },
          );
        },
      ),
    );
  }

  Future pushToFavoriteWordsRoute(BuildContext context) {
    return Navigator.of(context).push(
      MaterialPageRoute(
        builder: (BuildContext context) => FavoriteWordsRoute(
          favoriteItems: savedWords,
        ),
      ),
    );
  }
}

favorite_words_route.dart

import 'package:flutter/material.dart';

class FavoriteWordsRoute extends StatelessWidget {
  final List<String> favoriteItems;

  const FavoriteWordsRoute({Key key, @required this.favoriteItems}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Favorites words'),
      ),
      body: ListView.separated(
        itemCount: favoriteItems.length,
        separatorBuilder: (BuildContext context, int index) => Divider(),
        itemBuilder: (BuildContext context, int index) => ListTile(
          title: Text(favoriteItems[index]),
        ),
      ),
    );
  }
}

공급자가 더 나은 경우 성능에 대해 알려주십시오.

마이클 리

공급자는 성능을 향상시키지 않습니다.

호출 setState하면 위젯이 다시 빌드됩니다. 위젯이 다시 빌드되면 최악의 경우 모든 하위가 빌드됩니다. 따라서 목록을 작성하면 모든 목록 항목이 다시 작성 될 수 있습니다.

이 경우 수행 할 수있는 최적화 위젯 대신 setState내부에서 호출 하는 ListItem것입니다 MyHomePage. 이는 Flutter ListItem보다 자식이 적기 때문에 할 일 이 가장 적습니다 ListView.

공급자는 Flutter가 위젯을 빌드하는 방식에 영향을주지 않습니다. Provider를 사용할 때 너무 자주 위젯을 너무 자주 다시 빌드하는 것과 동일한 실수를 할 수 있습니다.

그러나 공급자 더 작은 위젯을 다시 빌드 할 수있는 몇 가지 도구를 제공합니다. 한 가지 예는 Selector 입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AnimatedSwitcher Flutter를 사용하는 공급자

분류에서Dev

공급자와 함께 Flutter에서 연결 패키지 사용

분류에서Dev

Flutter : 앱이 백그라운드에있을 때 경로 공급자 사용

분류에서Dev

공급자 대 ValueNotifier Flutter

분류에서Dev

flutter-공급자를 사용하여 글꼴 크기를 전역 적으로 변경

분류에서Dev

공급자를 사용하여 flutter에서 모든 위젯 트리를 다시 빌드하지 않기

분류에서Dev

공급자를 공장처럼 사용

분류에서Dev

Terraform 사용자 지정 공급자

분류에서Dev

Vagrant 용 Raspberry Pi 공급자?

분류에서Dev

SunGard Investran OLE DB 공급자 사용

분류에서Dev

Flutter Firebase 인증-인증 공급자의 연결을 해제해도 원래 (익명) 사용자가 생성되지 않습니다.

분류에서Dev

Flutter의 다른 공급자로부터 공급자에 액세스

분류에서Dev

Flutter 다중 이미지 공급자 호출은 메모리 사용량을 늘리고 충돌로 이어집니다.

분류에서Dev

사용자 정의 Okta 공급자를 사용한 nextauth

분류에서Dev

IIS 및 사용자 지정 멤버 자격 공급자 + 사용자 지정 역할 공급자의 문제

분류에서Dev

Flutter 사용자 기록

분류에서Dev

Flutter 사용자 기록

분류에서Dev

Exasol Ado.Net 공급자 용 사용자 지정 연결 풀

분류에서Dev

laravel에서 다중 공급자 관계 사용자 테이블

분류에서Dev

자바 8 공급자를 사용하여 캐싱

분류에서Dev

ServiceStack의 사용자 지정 인증 공급자가있는 ArgumentNullException

분류에서Dev

문자열 값이있는 공급자에서 SpyOn 사용

분류에서Dev

사용자 지정 인증 공급자의 Symfony2 ContextErrorException

분류에서Dev

자체 Oauth2 공급자를 사용한 Angular 로그인

분류에서Dev

WinNT ADSI 공급자-도메인 간 사용자 조회

분류에서Dev

.net mvc : 사용자 지정 authorizeattribute 및 customoutputcache 공급자

분류에서Dev

Symfony 사용자 정의 인증 공급자 실패 메시지

분류에서Dev

사용자 지정 인증 공급자가있는 MobileIron SSO

분류에서Dev

Ember Simple Auth Torri 사용자 지정 공급자

Related 관련 기사

  1. 1

    AnimatedSwitcher Flutter를 사용하는 공급자

  2. 2

    공급자와 함께 Flutter에서 연결 패키지 사용

  3. 3

    Flutter : 앱이 백그라운드에있을 때 경로 공급자 사용

  4. 4

    공급자 대 ValueNotifier Flutter

  5. 5

    flutter-공급자를 사용하여 글꼴 크기를 전역 적으로 변경

  6. 6

    공급자를 사용하여 flutter에서 모든 위젯 트리를 다시 빌드하지 않기

  7. 7

    공급자를 공장처럼 사용

  8. 8

    Terraform 사용자 지정 공급자

  9. 9

    Vagrant 용 Raspberry Pi 공급자?

  10. 10

    SunGard Investran OLE DB 공급자 사용

  11. 11

    Flutter Firebase 인증-인증 공급자의 연결을 해제해도 원래 (익명) 사용자가 생성되지 않습니다.

  12. 12

    Flutter의 다른 공급자로부터 공급자에 액세스

  13. 13

    Flutter 다중 이미지 공급자 호출은 메모리 사용량을 늘리고 충돌로 이어집니다.

  14. 14

    사용자 정의 Okta 공급자를 사용한 nextauth

  15. 15

    IIS 및 사용자 지정 멤버 자격 공급자 + 사용자 지정 역할 공급자의 문제

  16. 16

    Flutter 사용자 기록

  17. 17

    Flutter 사용자 기록

  18. 18

    Exasol Ado.Net 공급자 용 사용자 지정 연결 풀

  19. 19

    laravel에서 다중 공급자 관계 사용자 테이블

  20. 20

    자바 8 공급자를 사용하여 캐싱

  21. 21

    ServiceStack의 사용자 지정 인증 공급자가있는 ArgumentNullException

  22. 22

    문자열 값이있는 공급자에서 SpyOn 사용

  23. 23

    사용자 지정 인증 공급자의 Symfony2 ContextErrorException

  24. 24

    자체 Oauth2 공급자를 사용한 Angular 로그인

  25. 25

    WinNT ADSI 공급자-도메인 간 사용자 조회

  26. 26

    .net mvc : 사용자 지정 authorizeattribute 및 customoutputcache 공급자

  27. 27

    Symfony 사용자 정의 인증 공급자 실패 메시지

  28. 28

    사용자 지정 인증 공급자가있는 MobileIron SSO

  29. 29

    Ember Simple Auth Torri 사용자 지정 공급자

뜨겁다태그

보관