Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
今更Riverpod2.0について調べて発表する
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kuroneko-mayuge
September 23, 2023
Business
330
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
今更Riverpod2.0について調べて発表する
今更Riverpod2.0について調べて発表する
Kuroneko-mayuge
September 23, 2023
More Decks by Kuroneko-mayuge
See All by Kuroneko-mayuge
Try Riverpod2.0
ryo2929
1
140
Other Decks in Business
See All in Business
会社説明資料_株式会社イー・コミュニケーションズ
ecoms_ikeda08
0
250
アジャイル実践者のための堅牢でスケーラブルな働き方を構築する技術/Self-Management for Agile Practitioner
ikuodanaka
1
240
AI × 型|FDE的な働き方を再現可能にする「判断の軸」
aictokamiya
0
160
正解が消えた開発現場で、どう後輩を育てればいいのか?~ AI時代における「若手のストレス」と「メンターの限界」に向き合う ~
mkitahara01985
1
140
01_全社_FLUX採用ピッチ資料_Ver.5.7
flux
12
230k
CMB.TECH Q2 2026 earnings release
cmbtech
PRO
1
2.8k
Steamで売れないゲームに共通する失敗パターン
hirohasuyoutube
0
190
NEXERA inc. | Company Deck
nexera
0
26k
なんとかする力 〜 Android エンジニアからマネージャー、さらにその先へ? 〜
m_coder
2
550
株式会社うるる エンジニア向け採用資料
uluru_hr
3
140k
AIがなくてもつよいPM/PdM/ディレクターになるには?
iflection
0
1k
「仕訳」から「取引」へ(fAD2026)
shunsuke_takeuchi
PRO
0
1.4k
Featured
See All Featured
Between Models and Reality
mayunak
4
480
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Designing for humans not robots
tammielis
254
26k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Claude Code のすすめ
schroneko
67
230k
From π to Pie charts
rasagy
1
380
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Prompt Engineering for Job Search
mfonobong
0
470
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Transcript
Riverpod2 系について調べたことを話 す 株式会社Relic Ryo Kuroki
About Me Ryo Kuroki 株式会社Relic Flutter 歴 業務では約3 ヶ月 個人開発で約1
年 EXPERIENCE
発表の対象者と目的 目的 Riverpod ver2.x についてこんな感じなんだ〜と知ってもらう 対象者 🙆 Riverpod は聞いたことあるが、まだ使ったことがない方(特にver2.x )
🙅♀️ Riverpod を熟知されている方、ver2.x もすぐに順応できる方
なぜプロバイダが必要なのか アプリの様々な場所からステートにアクセス できるようになる シングルトンや依存性注入、 などを分かりやすく代替することができる ステートを別のプロバイダのステートと簡単 に組み合わせる事が可能 複数のオブジェクトを組み合わせて 1 つのステートにまとめなくていい
テスト容易性を高める パフォーマンス最適化 同じ型のオブジェクトを公開するプロバイダ を 複数宣言できる final cityProvider = Provider((ref) => 'London'); final countryProvider = Provider((ref) => 'England');
v2.0 以降のProvider の種類 Provider 概要 NotifierProvider v2.0から登場。メインの機能 AsyncNotifierProvider v2.0から登場。FutureProviderではできない状態の変更が可能 Provider
これまで通り。Repositoryなどの状態を持たないケースで利用 StateProvider NotifierProviderより非常に単純な場合。レガシー? StateNotifierProvider NotifierProviderを推奨と明記されている FutureProvider AsyncNotifierProviderを使うほどでもない、状態の変更を伴わない単純なユースケース StreamProvider FutureProviderのStream版 ChangeNotifier 元々非推奨。ChangeNotifierProviderからの置き換えの手始めに最も簡単。
code generation によってProvider の種類を意識せず最適なものを実装しやすい
初期値の設定を わかりやすく実装しやすい ここで、 ref.watch(otherProvider) などと、 他のprovider を参照できる 状態を変更するメソッドを UI に公開する
code generation によって NotifierProvider が生成される watch で監視しておくと便利 part 'main.g.dart'; @riverpod class Todos extends _$Todos { @override List<Todo> build() { return [ Todo(description: 'Learn Flutter', completed: true), Todo(description: 'Learn Riverpod'), ]; } void addTodo(Todo todo) { state = [...state, todo]; } } flutter pub run build_runner watch コード自動生成のための ファイル名とアノテーション
class TodoListView extends ConsumerWidget { const TodoListView({super.key}); @override Widget build(BuildContext
context, WidgetRef ref) { List<Todo> todos = ref.watch(todosProvider); return ListView( children: [ for (final todo in todos) CheckboxListTile( value: todo.completed, onChanged: (value) => ref.read(todosProvider.notifier).toggle(todo.id), title: Text(todo.description), ), ], ); } } UI 側の利用は特に変更なし UI 側でstate の値をwatch UI 側からstate を変更する
// Riverpod 1系 final fetchUserProvider = FutureProvider.autoDispose.family<User, int>((ref, userId) async
{ final json = await http.get('api/user/$userId'); return User.fromJson(json); }); // Riverpod 2系 @riverpod Future<User> fetchUser(FetchUserRef ref, {required int userId, required int page}) async { final json = await http.get('api/user/$userId/$page'); return User.fromJson(json); } autoDispose がデフォルトでON になった ( 破棄せず保持したい時はkeepAlive:true と明示する) 引数を1 個しか設定できなかったのが、任意で追加できるようになった