谁能告诉我,您如何在 Flutter 应用程序中使用 rate_my_app https://pub.dev/packages/rate_my_app包来增加用户评论?
一个示例代码会很有用吗?
谁能告诉我,您如何在 Flutter 应用程序中使用 rate_my_app https://pub.dev/packages/rate_my_app包来增加用户评论?
一个示例代码会很有用吗?
rate_my_app 只是一个提醒用户评价你的应用的插件。如果您的应用满足用户的需求,它将增加用户的正面评价。
Skyost的示例代码:
import 'package:flutter/material.dart';
import 'package:rate_my_app/rate_my_app.dart';
/// Main rate my app instance.
RateMyApp _rateMyApp = RateMyApp();
/// First plugin test method.
void main() {
_rateMyApp.init().then((_) {
runApp(_RateMyAppTestApp());
print('Minimum days : ' + _rateMyApp.minDays.toString());
print('Minimum launches : ' + _rateMyApp.minLaunches.toString());
print('Base launch : ' + _dateToString(_rateMyApp.baseLaunchDate));
print('Launches : ' + _rateMyApp.launches.toString());
print('Do not open again ? ' + (_rateMyApp.doNotOpenAgain ? 'Yes' : 'No'));
print('Are conditions met ? ' + (_rateMyApp.shouldOpenDialog ? 'Yes' : 'No'));
});
}
/// Returns a formatted date string.
String _dateToString(DateTime date) => date.day.toString().padLeft(2, '0') + '/' + date.month.toString().padLeft(2, '0') + '/' + date.year.toString();
/// The main rate my app test widget.
class _RateMyAppTestApp extends StatelessWidget {
@override
Widget build(BuildContext context) => MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Rate my app !'),
),
body: _RateMyAppTestAppBody(),
),
);
}
/// The body of the main rate my app test widget.
class _RateMyAppTestAppBody extends StatefulWidget {
@override
State<StatefulWidget> createState() => _RateMyAppTestAppBodyState();
}
/// The body state of the main rate my app test widget.
class _RateMyAppTestAppBodyState extends State<_RateMyAppTestAppBody> {
@override
Widget build(BuildContext context) => Padding(
padding: EdgeInsets.symmetric(
horizontal: 40,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_textCenter('Minimum days : ' + _rateMyApp.minDays.toString()),
_textCenter('Minimum launches : ' + _rateMyApp.minLaunches.toString()),
_textCenter('Base launch : ' + _dateToString(_rateMyApp.baseLaunchDate)),
_textCenter('Launches : ' + _rateMyApp.launches.toString()),
_textCenter('Do not open again ? ' + (_rateMyApp.doNotOpenAgain ? 'Yes' : 'No')),
_textCenter('Are conditions met ? ' + (_rateMyApp.shouldOpenDialog ? 'Yes' : 'No')),
Padding(
padding: EdgeInsets.only(top: 10),
child: RaisedButton(
child: Text('Launch "Rate my app" dialog'),
onPressed: () => _rateMyApp.showRateDialog(context).then((v) => setState(() {})),
),
),
RaisedButton(
child: Text('Launch "Rate my app" star dialog'),
onPressed: () => _rateMyApp.showStarRateDialog(context, onRatingChanged: (count) {
FlatButton cancelButton = FlatButton(
child: Text('CANCEL'),
onPressed: () {
_rateMyApp.doNotOpenAgain = true;
_rateMyApp.save().then((v) => Navigator.pop(context));
setState(() {});
},
);
if (count == null || count == 0) {
return [cancelButton];
}
String message = 'You put ' + count.round().toString() + ' star(s). ';
Color color;
switch (count.round()) {
case 1:
message += 'Did this app hurt you physically ?';
color = Colors.red;
break;
case 2:
message += 'That\'s not really cool man.';
color = Colors.orange;
break;
case 3:
message += 'Well, it\'s average.';
color = Colors.yellow;
break;
case 4:
message += 'This is cool, like this app.';
color = Colors.lime;
break;
case 5:
message += 'Great ! <3';
color = Colors.green;
break;
}
return [
FlatButton(
child: Text('OK'),
onPressed: () {
print(message);
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(message),
backgroundColor: color,
),
);
_rateMyApp.doNotOpenAgain = true;
_rateMyApp.save().then((v) => Navigator.pop(context));
setState(() {});
},
),
cancelButton,
];
}),
),
RaisedButton(
child: Text('Reset'),
onPressed: () => _rateMyApp.reset().then((v) => setState(() {})),
),
],
),
);
/// Returns a centered text.
Text _textCenter(String content) => Text(
content,
textAlign: TextAlign.center,
);
}
请按照下面的代码。
import 'package:flutter/material.dart';
import 'package:rate_my_app/rate_my_app.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Rating Prompt'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
RateMyApp _rateMyApp = RateMyApp(
preferencesPrefix: 'rateMyApp_',
minDays: 3,
minLaunches: 7,
remindDays: 2,
remindLaunches: 5,
// appStoreIdentifier: '',
// googlePlayIdentifier: '',
);
@override
void initState() {
super.initState();
_rateMyApp.init().then((_) {
// TODO: Comment out this if statement to test rating dialog (Remember to uncomment)
// if (_rateMyApp.shouldOpenDialog) {
_rateMyApp.showStarRateDialog(
context,
title: 'Enjoying Flutter Rating Prompt?',
message: 'Please leave a rating!',
onRatingChanged: (stars) {
return [
FlatButton(
child: Text('Ok'),
onPressed: () {
if (stars != null) {
_rateMyApp.doNotOpenAgain = true;
_rateMyApp.save().then((v) => Navigator.pop(context));
if (stars <= 3) {
print('Navigate to Contact Us Screen');
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (_) => ContactUsScreen(),
// ),
// );
} else if (stars <= 5) {
print('Leave a Review Dialog');
// showDialog(...);
}
} else {
Navigator.pop(context);
}
},
),
];
},
dialogStyle: DialogStyle(
titleAlign: TextAlign.center,
messageAlign: TextAlign.center,
messagePadding: EdgeInsets.only(bottom: 20.0),
),
starRatingOptions: StarRatingOptions(),
);
// }
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
);
}
}
这里是从 main 调用的屏幕中使用 rate_my_app 的示例
import 'package:flutter/material.dart';
import 'package:rate_my_app/rate_my_app.dart';
/// Main Rate my app instance.
RateMyApp _rateMyApp = RateMyApp(
preferencesPrefix: 'rateMyApp_',
minDays: 7,
minLaunches: 10,
remindDays: 7,
remindLaunches: 10,
// appStoreIdentifier: '',
// googlePlayIdentifier: '',
);
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
super.initState();
_rateMyApp.init().then((_) {
_rateMyApp.conditions.forEach((condition) {
if (condition is DebuggableCondition) {
print(condition.valuesAsString());
// We iterate through our list of conditions and we print all debuggable ones.
}
});
print('Are all conditions met ? ' +
(_rateMyApp.shouldOpenDialog ? 'Yes' : 'No'));
if (_rateMyApp.shouldOpenDialog) _buildShowStarRateDialog(context);
});
}
_buildShowStarRateDialog(BuildContext context) {
_rateMyApp.showStarRateDialog(context, actionsBuilder: (_, count) {
final Widget cancelButton = RateMyAppNoButton(
// We create a custom "Cancel" button using the RateMyAppNoButton class.
_rateMyApp,
text: 'CANCEL',
callback: () => setState(() {}),
);
if (count == null || count == 0) {
// If there is no rating (or a 0 star rating), we only have to return our cancel button.
return [cancelButton];
}
// Otherwise we can do some little more things...
String message = 'You\'ve put ' + count.round().toString() + ' star(s). ';
Color color;
switch (count.round()) {
case 1:
message += 'Did this app hurt you physically ?';
color = Colors.red;
break;
case 2:
message += 'That\'s not really cool man.';
color = Colors.orange;
break;
case 3:
message += 'Well, it\'s average.';
color = Colors.yellow;
break;
case 4:
message += 'This is cool, like this app.';
color = Colors.lime;
break;
case 5:
message += 'Great ! <3';
color = Colors.green;
break;
}
return [
FlatButton(
child: const Text('OK'),
onPressed: () async {
print(message);
Toast.show(message, context,
duration: Toast.LENGTH_LONG, gravity: Toast.TOP);
// This allow to mimic a click on the default "Rate" button and thus update the conditions based on it ("Do not open again" condition for example) :
await _rateMyApp.callEvent(RateMyAppEventType.rateButtonPressed);
Navigator.pop<RateMyAppDialogButton>(
context, RateMyAppDialogButton.rate);
setState(() {});
},
),
cancelButton,
];
});
}