flutter · July 25, 2021

Live Template Roadmap Flutter BLoC

Live template di Android Studio sangat berguna karena mereka menghemat waktu pengembangan dengan memungkinkan Anda menyisipkan potongan kode yang sering digunakan dengan cepat. Ini juga membantu memastikan konsistensi kode di seluruh proyek.

Cara Menambahkan Live Template ke Android Studio di macOS

  1. Buka Android Studio.
  2. Di menu bar, pilih Android Studio > Preferences.
  3. Di jendela Preferences, pilih Editor > Live Templates.
  4. Klik tombol + di bagian kanan untuk membuat grup template baru, berikan nama, misalnya Flutter Templates.
  5. Pilih grup yang baru dibuat, lalu klik tombol + lagi dan pilih Live Template.
  6. Isi detail template:
    • Abbreviation: Singkatan yang akan digunakan untuk memicu template, misalnya json_model.
    • Description: Deskripsi singkat tentang template, misalnya Template for JSON model class.
    • Template text: Masukkan kode template yang ingin Anda tambahkan.
  7. Klik Define dan pilih konteks di mana template akan tersedia, misalnya Dart.
  8. Klik Apply dan OK.

Cara Menambahkan Live Template ke Android Studio di Windows

  1. Buka Android Studio.
  2. Di menu bar, pilih File > Settings.
  3. Di jendela Settings, pilih Editor > Live Templates.
  4. Klik tombol + di bagian kanan untuk membuat grup template baru, berikan nama, misalnya Flutter Templates.
  5. Pilih grup yang baru dibuat, lalu klik tombol + lagi dan pilih Live Template.
  6. Isi detail template:
    • Abbreviation: Singkatan yang akan digunakan untuk memicu template, misalnya json_model.
    • Description: Deskripsi singkat tentang template, misalnya Template for JSON model class.
    • Template text: Masukkan kode template yang ingin Anda tambahkan.
  7. Klik Define dan pilih konteks di mana template akan tersedia, misalnya Dart.
  8. Klik Apply dan OK.

Daftar Live Template

json_bloc_road_map

import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';

part '$FileName$.g.dart';

@JsonSerializable()
class $NameClass$ extends Equatable{

  @JsonKey(name: '$Id$')
  final $TypeField$ $Id$;

  $NameClass$(this.$Id$);

  @override
  List<Object?> get props => [
    $Id$
  ];

  factory $NameClass$.fromJson(Map<String, dynamic> json) =>
      _$$$NameClass$FromJson(json);

  Map<String, dynamic> toJson() => _$$$NameClass$ToJson(this);

}

json_field_bloc_road_map

@JsonKey(name: '$Key$')
  final $TypeKey$ $Key$;

retrofit_bloc_road_map

import 'package:dio/dio.dart';
import 'package:retrofit/retrofit.dart';

part '$file_name$.g.dart';

@RestApi(baseUrl : "$BaseURL$")
abstract class $Class$Service {
  factory $Class$Service(Dio dio, {String baseUrl}) = _$Class$Service;

  @GET("$GET$")
  Future<$CLASSRESPONSE$> $funtionResponse$();

}
  • Retrofit live template

retrofit_client_bloc_road_map

import 'package:dio/dio.dart';

class $Class$Client {
  late Dio _dio;
  late $ClassService$ _service;

  $Class$Client() {
    _dio = Dio();
    _dio.interceptors.add(LogInterceptor(requestBody: true, responseBody: true));
    _service = $ClassService$(_dio);
  }

  $ClassService$ getService() {
    return _service;
  }

}
  • Repository Live template

repository_bloc_road_map

abstract class $Class$Repository {

  Future<$Response$>? $functionResponse$($Query$);

}

repository_impl_bloc_road_map

class $Class$Impl extends $ClassExtends$ {

  late $ClassService$ _service;

  $Class$Impl() {
    _service = $ClassService$Client().getService();
  }

}

state_bloc_default_road_map

import 'package:equatable/equatable.dart';

abstract class $Class$State extends Equatable {
  const $Class$State();

  @override
  List<Object> get props => [];
}

class Initial$Class$State extends $Class$State {}

class Loading$Class$State extends $Class$State {}


class Error$Class$State extends $Class$State {
  final String errorMessage;

  const Error$Class$State({this.errorMessage = "Unknown Error"});
  @override
  String toString() =>
      'Error : $errorMessage';
}

class Success$Class$State extends $Class$State {

  const Success$Class$State();
}

event_bloc_default_road_map

import 'package:equatable/equatable.dart';

abstract class $Class$Event extends Equatable {

  @override
  List<Object> get props => [];

}

class $ClassEvent$Event extends $Class$Event {
 
  $ClassEvent$Event();

}

bloc_default_road_map

import 'package:flutter_bloc/flutter_bloc.dart';

class $Class$Bloc
    extends Bloc<$ClassEVENT$, $ClassState$> {
    
  final $ClassRepository$ repository;

  $Class$Bloc({required this.repository})
      : super(Initial$Class$State());

  @override
  Stream<$ClassState$> mapEventToState($ClassEVENT$ event) async* {
    if (event is $EventClass$) {
      try {
      
        yield Loading$Class$State();
        
        $ClassResponse$ response = await repository.$method$;

        yield Success$Class$State();
        
      } catch (e) {
        yield Error$Class$State(errorMessage: e.toString());
      }
    }
  }
}

app_bloc_default_road_map

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class $Class$ extends StatelessWidget {

    const $Class$({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider(
          create: (context) => $ClassBloc$,
        ),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Example',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: const Container(),
      ),
    );
  }
}

routes

class Routes {
  Routes._();

  static const String home = '/';

}