mirror of
https://github.com/nisrulz/flutter-examples.git
synced 2026-08-25 01:05:36 +00:00
refactor: standardize Dart and Android config across all 54 apps
- Bump all apps to sdk >=3.0.0 <4.0.0 and add flutter_lints + a shared analysis_options.yaml to every app (flutter analyze is now green repo-wide) - Fix real compile errors in firebase_google_authentication and image_editor, plus deprecated APIs (Matrix4, SvgPicture.color, textScaleFactor), missing async 'mounted' guards, and misc lints via dart fix + manual fixes - Align pubspec 'name' with each folder and Android namespace/applicationId with the documented github.nisrulz.* convention - Convert bmi_calculator from a legacy Flutter module to a standard app with a proper android/ scaffold; fix missing android:exported in launcher manifests across 22 apps so all Android builds pass - Untrack generated build files (GeneratedPluginRegistrant, .flutter-plugins-dependencies) and ignore them
This commit is contained in:
23
expense_planner/analysis_options.yaml
Normal file
23
expense_planner/analysis_options.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
# Lint rules for Flutter apps.
|
||||
# See https://dart.dev/guides/language/analysis-options
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
|
||||
linter:
|
||||
rules:
|
||||
# Noise in small sample apps; keep the code readable.
|
||||
avoid_print: false
|
||||
avoid_unnecessary_containers: false
|
||||
file_names: false
|
||||
library_private_types_in_public_api: false
|
||||
non_constant_identifier_names: false
|
||||
strict_top_level_inference: false
|
||||
@@ -12,6 +12,7 @@
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
android:name="io.flutter.embedding.android.FlutterActivity"
|
||||
android:exported="true"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
package io.flutter.plugins;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import io.flutter.Log;
|
||||
|
||||
import io.flutter.embedding.engine.FlutterEngine;
|
||||
|
||||
/**
|
||||
* Generated file. Do not edit.
|
||||
* This file is generated by the Flutter tool based on the
|
||||
* plugins that support the Android platform.
|
||||
*/
|
||||
@Keep
|
||||
public final class GeneratedPluginRegistrant {
|
||||
private static final String TAG = "GeneratedPluginRegistrant";
|
||||
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
//
|
||||
// Generated file. Do not edit.
|
||||
//
|
||||
|
||||
// clang-format off
|
||||
|
||||
#ifndef GeneratedPluginRegistrant_h
|
||||
#define GeneratedPluginRegistrant_h
|
||||
|
||||
#import <Flutter/Flutter.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface GeneratedPluginRegistrant : NSObject
|
||||
+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
#endif /* GeneratedPluginRegistrant_h */
|
||||
@@ -1,14 +0,0 @@
|
||||
//
|
||||
// Generated file. Do not edit.
|
||||
//
|
||||
|
||||
// clang-format off
|
||||
|
||||
#import "GeneratedPluginRegistrant.h"
|
||||
|
||||
@implementation GeneratedPluginRegistrant
|
||||
|
||||
+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -8,6 +8,8 @@ import './models/transaction.dart';
|
||||
void main() => runApp(MyApp());
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
const MyApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
@@ -38,6 +40,8 @@ class MyApp extends StatelessWidget {
|
||||
}
|
||||
|
||||
class MyHomePage extends StatefulWidget {
|
||||
const MyHomePage({super.key});
|
||||
|
||||
@override
|
||||
_MyHomePageState createState() => _MyHomePageState();
|
||||
}
|
||||
@@ -75,8 +79,8 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
builder: (_) {
|
||||
return GestureDetector(
|
||||
onTap: () {},
|
||||
child: NewTransaction(_addNewTransaction),
|
||||
behavior: HitTestBehavior.opaque,
|
||||
child: NewTransaction(_addNewTransaction),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -7,7 +7,7 @@ import '../models/transaction.dart';
|
||||
class Chart extends StatelessWidget {
|
||||
final List<Transaction> recentTransactions;
|
||||
|
||||
Chart(this.recentTransactions);
|
||||
const Chart(this.recentTransactions, {super.key});
|
||||
|
||||
List<Map<String, Object>> get groupedTransactionValues {
|
||||
return List.generate(7, (index) {
|
||||
|
||||
@@ -5,13 +5,13 @@ class ChartBar extends StatelessWidget {
|
||||
final double spendingAmount;
|
||||
final double spendingPctOfTotal;
|
||||
|
||||
ChartBar(this.label, this.spendingAmount, this.spendingPctOfTotal);
|
||||
const ChartBar(this.label, this.spendingAmount, this.spendingPctOfTotal, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
SizedBox(
|
||||
height: 20,
|
||||
child: FittedBox(
|
||||
child: Text('\$${spendingAmount.toStringAsFixed(0)}'),
|
||||
@@ -20,7 +20,7 @@ class ChartBar extends StatelessWidget {
|
||||
SizedBox(
|
||||
height: 4,
|
||||
),
|
||||
Container(
|
||||
SizedBox(
|
||||
height: 60,
|
||||
width: 10,
|
||||
child: Stack(
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:intl/intl.dart';
|
||||
class NewTransaction extends StatefulWidget {
|
||||
final Function addTx;
|
||||
|
||||
NewTransaction(this.addTx);
|
||||
const NewTransaction(this.addTx, {super.key});
|
||||
|
||||
@override
|
||||
_NewTransactionState createState() => _NewTransactionState();
|
||||
@@ -72,7 +72,7 @@ class _NewTransactionState extends State<NewTransaction> {
|
||||
keyboardType: TextInputType.number,
|
||||
onSubmitted: (_) => _submitData(),
|
||||
),
|
||||
Container(
|
||||
SizedBox(
|
||||
height: 70,
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
|
||||
@@ -7,11 +7,11 @@ class TransactionList extends StatelessWidget {
|
||||
final List<Transaction> transactions;
|
||||
final Function deleteTx;
|
||||
|
||||
TransactionList(this.transactions, this.deleteTx);
|
||||
const TransactionList(this.transactions, this.deleteTx, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
return SizedBox(
|
||||
height: 450,
|
||||
child: transactions.isEmpty
|
||||
? Column(
|
||||
@@ -23,7 +23,7 @@ class TransactionList extends StatelessWidget {
|
||||
SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
Container(
|
||||
SizedBox(
|
||||
height: 200,
|
||||
child: Image.asset(
|
||||
'assets/images/waiting.png',
|
||||
|
||||
@@ -5,6 +5,8 @@ import './transaction_list.dart';
|
||||
import '../models/transaction.dart';
|
||||
|
||||
class UserTransactions extends StatefulWidget {
|
||||
const UserTransactions({super.key});
|
||||
|
||||
@override
|
||||
_UserTransactionsState createState() => _UserTransactionsState();
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ dependencies:
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
flutter_lints: ^6.0.0
|
||||
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
|
||||
Reference in New Issue
Block a user