在下面的 Home 和 Invoices 代码中,我实现了 ProgressHUD show() 和 dismiss() 来显示加载器。现在我必须在返回中心的末尾实现这个 ProgressHUD show() 和 dismiss() 加载器,带有圆形进度指示器小部件。我怎样才能实现它。我试过这样实现它:
return ProgressHUD(
child: Builder(builder: (context) {
final progress = ProgressHUD.of(context);
progress!.show();
}),
);
但是没有用。有没有另一种方法来实现它。
import 'package:flutter/material.dart';
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:xuriti/logic/view_models/company_details_manager.dart';
import 'package:xuriti/models/core/credit_limit_model.dart';
import 'package:xuriti/models/core/invoice_model.dart';
import 'package:xuriti/ui/screens/bhome_screens/bhome_screen.dart';
import 'package:xuriti/ui/screens/invoices_screens/invoices_screen.dart';
import 'package:xuriti/ui/theme/constants.dart';
import 'package:fluttertoast/fluttertoast.dart';
import '../../../logic/view_models/transaction_manager.dart';
import '../../../models/helper/service_locator.dart';
import '../../widgets/drawer_widget.dart';
class LandingScreen extends StatefulWidget {
const LandingScreen({Key? key}) : super(key: key);
@override
State<LandingScreen> createState() => _LandingScreenState();
}
class _LandingScreenState extends State<LandingScreen> {
@override
void initState() {
getIt<CompanyDetailsManager>().resetSellerInfo();
super.initState();
}
void refreshFutureToGetInvoicesList() {
setState(() {});
}
@override
// void didChangeDependencies() {
// print("dependency called");
//
// // getIt<TransactionManager>().getOutStandingAmt();
// super.didChangeDependencies();
// }
GlobalKey<ScaffoldState> sk = GlobalKey();
int currentIndex = 0;
DateTime? currentBackPressTime;
@override
Widget build(BuildContext context) {
DateTime _lastExitTime = DateTime.now();
onWillPop() async {
if (DateTime.now().difference(_lastExitTime) >= Duration(seconds: 2)) {
//showing message to user
final snack = SnackBar(
content: Text("Press the back button again to exist the app"),
duration: Duration(seconds: 2),
);
ScaffoldMessenger.of(context).showSnackBar(snack);
_lastExitTime = DateTime.now();
return false; // disable back press
} else {
return true; // exit the app
}
}
String? id = getIt<SharedPreferences>().getString('companyId');
List<Widget> screens = [
const BhomeScreen(),
InvoicesScreen(refreshingFunction: refreshFutureToGetInvoicesList),
];
return ProgressHUD(
child: LayoutBuilder(builder: (context, constraints) {
final progress = ProgressHUD.of(context);
double maxHeight = constraints.maxHeight;
double maxWidth = constraints.maxWidth;
double h1p = maxHeight * 0.01;
double h10p = maxHeight * 0.1;
double w10p = maxWidth * 0.1;
return WillPopScope(
onWillPop: onWillPop,
child: SafeArea(
child: FutureBuilder(
future: getIt<TransactionManager>().getInvoices(id),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text(
'${snapshot.error} occurred',
style: TextStyle(fontSize: 18),
),
);
} else if (snapshot.hasData) {
Invoices data = snapshot.data as Invoices;
return Scaffold(
key: sk,
endDrawer: DrawerWidget(
maxHeight: maxHeight,
maxWidth: maxWidth,
),
backgroundColor: Colours.black,
appBar: AppBar(
backgroundColor: Colours.black,
leading: Padding(
padding: const EdgeInsets.only(left: 15),
child: Image.asset("assets/images/xuriti1.png"),
),
actions: [
InkWell(
onTap: () {
sk.currentState!.openEndDrawer();
},
child: Padding(
padding: const EdgeInsets.all(18),
child: SvgPicture.asset(
"assets/images/menubutton.svg")),
),
],
),
body: screens[currentIndex],
bottomNavigationBar: Container(
color: Colors.black,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
GestureDetector(
onTap: () async {
progress!.show();
await Future.delayed(
const Duration(seconds: 1));
setState(() {
currentIndex = 0;
});
progress.dismiss();
},
child: Container(
height: h10p * 0.5,
width: w10p * 4.5,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(15),
color: currentIndex == 0
? Colours.tangerine
: Colours.black),
child: const Center(
child: Text(
"Home",
style: TextStyles.textStyle,
),
),
),
),
GestureDetector(
onTap: () async {
progress!.show();
await Future.delayed(
const Duration(seconds: 1));
setState(() {
currentIndex = 1;
});
progress.dismiss();
},
child: Container(
height: h10p * 0.5,
width: w10p * 4.5,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(15),
color: currentIndex == 1
? Colours.tangerine
: Colours.black),
child: const Center(
child: Text(
"Invoices",
style: TextStyles.textStyle,
),
),
),
)
],
),
),
),
);
} else {
return Center(
child: Text(""),
);
}
} else {
return Center(child: CircularProgressIndicator());
}
})),
);
}),
);
}
}