どのようにビューフラッターからモデルを更新するには?


我々の前の記事では、Model Viewerの概念とフラッターアプリケーション開発におけるその重要性をカバーしました.あなたはビューフラッターからモデルを更新するのベストプラクティスを探求したいですか?Yesならば、完全な詳細をつかむために、このブログと一緒にいてください.一般的に、フラッタは、次のレベルにモバイルとWebアプリケーションを作成するGoogleのプラットフォームの独立した技術です.ハイエンドのモバイルとWebアプリケーションを取得するには、Flutter Agencyからプロのアプリケーション開発者に連絡することができます.

なぜフラッタはモデルビュービューモデルを必要とするのか?
フラッタが通常開発のためにどんな種類のアーキテクチャもサポートしないということは、すでに知られています.その間、開発者はプロセスを実装する責任があります.
ビューフラッターから更新モデルのベストプラクティスに従うために、アーキテクチャは、ビジネスロジックとユーザーインターフェイス間の通信に必要です.したがって、モデルビューViewModel(MVVM)は、ユーザーインターフェイスとViewModelクラスの周りにビジネスロジックを個別に保持する簡単な方法です.
  • クラスBのリストを持つクラスクラス.クラスBには、いくつかの文字列プロパティが含まれます.
  • クラスBのリストに基づいてPageView Builderを使用したクラスインスタンスを持つStateFileWidgetビュー.
  • PageView内のすべてのページは、テキストフィールドのクラスBの文字列プロパティを示します.

  • ビューフラッターからの更新モデルの例
    Widget createTextField(Class classB) {
    returnEditableText(
    onSubmitted: (value) {
    setState(() {
    classB.myStringValue = value;
    });
    }
    );
    }
    
    PageView.builder(
    itemBuilder: (BuildContext context, int index) {
    varclassB = widget.classA.myList[index];
    returncreateTextField(classB);
    },
    }
    )
    
    プロパティの値を変更するコードをラップする必要があります
    setState((){
    // Put your codes here.
    });
    

    ビューフラッタからの更新モデルの利点
  • ここでビューはViewModelクラスから完全に独立しています.
  • ビジネスロジックは、ユーザーインターフェイスとは似ていません.
  • プロジェクトを処理するためのテストケースを書くことはとても簡単です.
  • コードは定期的に更新され、非常にユーザーインターフェイスとロジックに基づいて維持する簡単です.

  • モデルビュービューモデルのインパクト
  • モデル
    モデル層は主にローカルのDBまたはサーバからデータを取得し、それをViewModelに転送する責任があります.フラッタエージェンシーは、ネットワーク、リポジトリ、およびローカルのDBを定義するには、この層では、DB、APIとの通信をはるかに.
  • ビューモデル
  • ViewModelは、次のレベルにビューとモデル間のデータを転送する際に効果的に有用です.これは、主にデータ応答のためにモデル化するすべての要求とユーザイベントを受け入れます.
    モデルがデータを持っているとき、それはViewModelに戻ります.その後、ViewModelはそのようなデータを非常に効果的に表示するよう通知します.ViewModelは複数のビューで使用できます.これは単一のViewModelが複数のビューからデータを提供できることを意味します.
  • ビュー
  • ユーザーがウィジェットと相互作用しているとき、ビューは効果的に役に立つことができます.ユーザーイベントは、通常、ViewModelから一定量のデータを要求します.その後、ViewModelの残りの部分は、モデルへの要求に基づいてイベントを処理することができます.ViewModelが要求されたモデルからデータを取得すると、ユーザービューで主に反映されます.

    モデルビュー更新( MVU )の処理:
    Model View Update(MVU)は最も簡単でシンプルなアーキテクチャです.それは、最も最終的な方法でフラッターに合う可能性を持ちます.ここでは、モデルがあります.そのモデルをビューに送信し、レンダリングを可能にします.ビューの呼び出しは、主にこのモデルを更新モデルに更新できるメソッドを更新します.

    シンプルな天気アプリ:
    ためには、このアプローチを(ビューモデルから更新モデル)、シンプルな天気アプリは完璧な例です.

    メイン.ダート
    一般的にメイン.ダートファイルは、このアプリの標準的なセットアップで構成され、ここでは、通常のページを参照することができます.これはexpastpageとして知られています.
    import 'package:flutter/material.dart';
    import 'ui/forecast.dart';
    
    void main() => runApp(const MyApp());
    
    class MyApp extends StatelessWidget {
    const MyApp({Key? key}) : super(key: key);
    
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    title: 'Weather App',
    theme: ThemeData(
    primarySwatch: Colors.blue,
    ),
    home: const ForecastPage(title: 'Weather App'),
    );
    }
    }
    

    予報.ダート
    差し押さえページは単純な使用法のために別のファイルで分離されます.これはStatefulWidgetと呼ばれている.
    import 'package:flutter/material.dart';
    import '../io/darksky.dart' as darksky;
    
    class ForecastPage extends StatefulWidget {
    const ForecastPage({Key? key, required this.title}) : super(key: key);
    
    final String title;
    
    @override
    _ForecastPageState createState() => _ForecastPageState();
    }
    
    このページの状態は完全に箱の外です.ここでの大きな違いは、ユーザーインターフェイスの構築が別の関数に分離できることです.それは主に国家と論理を保持している.
    class _ForecastPageState extends State {
    ForecastModel model = const ForecastModel(0, false);
    
    void updateModel(Function update) => setState(() {
    model = update();
    });
    
    void _updateTemperature(Future getForecast(), Function update) async {
    update(() => const ForecastModel(0, true));
    
    var forecast = await getForecast();
    
    update(() => ForecastModel(forecast, false));
    }
    
    @override
    Widget build(BuildContext context) {
    return ForecastPageUI.buildUI(
    context,
    widget.title,
    () => _updateTemperature(
    darksky.getForecast, (func) => updateModel(func)),
    model);
    }
    }
    
    builduiウィジェットを作成することができますいくつかの主要な情報が必要なさまざまなパラメータを通過します.これは、次のレベルにウィジェットを構築するための最良の機能的な方法です.
    ここでは、ロジックとユーザーインターフェイスを分離する最良の方法を見つける.これはXAMLまたはHTMLベースのフレームワークに属する人にとって有益です.
    class ForecastPageUI {
    static buildUI(BuildContext context, String title, Function update,
    ForecastModel model) {
    return Scaffold(
    appBar: AppBar(
    title: Text(title),
    ),
    body: Center(
    child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: model.loading
    ? ([const CircularProgressIndicator()])
    : ([
    const Text(
    'The current temperature is:',
    ),
    Text(
    '${model.temperature} °F',
    //style: Theme.of(context).textTheme.display1,
    ),
    ]),
    ),
    ),
    floatingActionButton: FloatingActionButton(
    onPressed: () => update,
    tooltip: 'Update',
    child: const Icon(Icons.update),
    ),
    );
    }
    }
    

    Darksky天気API :
    HTTPパッケージをPubspecに追加します.YAML、あなたはDarksky天気APIにAPIを呼び出すことができます.
    dependencies:
    http: "^0.12.0"
    flutter:
    sdk: flutter
    darksky.dart
    
    ここでは、単純なファイルは、現在の予測についての詳細を非常に効果的に得るための関数から成ります.
    import 'package:http/http.dart' as http;
    import 'dart:convert';
    
    typedef Future GetHttp(dynamic url, {Map<String, String> headers});
    GetHttp get getHttp => http.get;
    
    typedef dynamic JsonDecode(String source);
    JsonDecode get jsonDecode => json.decode;
    
    const String url = "https://api.darksky.net/forecast//37.8267,-122.4233";
    
    Future _getForecast(GetHttp getHttp, JsonDecode jsonDecode,
    String url) async {
    
    var response = await getHttp(url);
    
    var decode = jsonDecode(response.body);
    
    return decode["currently"]["temperature"];
    }
    
    Future getForecast() => _getForecast(getHttp, jsonDecode, url);
    

    出力:


    まとめ
    ホープこのブログは、ビューフラッターからモデルを更新するには、ベストプラクティスを知って有用です.フラッター機関は、ビューフラッターからモデルを更新するのベストプラクティスを提供し、すべてを簡単に保つ.さらに、彼らは、アプリケーションを適切に動作させるために、彼らの専門知識と機能的プログラミングを組み合わせる.