Flutter字符串查找插件string_literal_finder的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter字符串查找插件string_literal_finder的使用

string_literal_finder 是一个简单的命令行应用程序和分析插件,用于在 Dart 代码中查找未翻译的字符串字面量。它确保在本地化应用时所有字符串都被外部化。

它尝试智能地忽略特定的字符串。

安装与使用

首先,通过以下命令安装插件:

$ pub global activate string_literal_finder

然后,运行插件并指定路径来查找字符串字面量:

$ pub global run string_literal_finder --path=example
2020-08-08 15:11:31.273227 INFO string_literal_finder - Found 1 literals:
2020-08-08 15:11:31.274592 INFO string_literal_finder - lib/example.dart:17:30 'not translated'
Found 1 literals in 1 files.

集成到IDE分析器

你可以通过配置 string_literal_finder 作为分析器插件来直接在IDE中获取警告。

步骤1:添加开发依赖

在你的 pubspec.yaml 文件中添加开发依赖:

flutter pub add --dev string_literal_finder

# 添加后的 pubspec.yaml 文件片段
dev_dependencies:
  string_literal_finder: ^1.0.0 # 确保使用最新版本。

步骤2:配置 analysis_options.yaml

analysis_options.yaml 中添加插件配置:

analyzer:
  plugins:
    - string_literal_finder

# 可选地添加排除模式
string_literal_finder:
  exclude_globs:
    - '**/*.g.dart'
    - '**/*.freezed.dart'

步骤3:重启分析器

重启你的分析器以使更改生效。

示例

以下是一个 Dart 文件的例子:

import 'package:string_literal_finder_annotations/string_literal_finder_annotations.dart';
import 'package:logging/logging.dart';

final _logger = Logger('example');

class Example {
  // ignore: avoid_unused_constructor_parameters
  const Example(@NonNls String test);
}

void exampleFunc(@NonNls String ignored, String warning) {}

// 参数注解中的参数被忽略。
@SomeAnnotation('test')
void main() {
  const Example('Lorem ipsum');
  exampleFunc('Hello world', 'not translated');
  exampleFunc('lorem'.split('').join(''), 'not translated2'.split('').join(''));
  _logger.finer('Lorem ipsum');

  nonNls({
    'nonNlsKey1': 'nonNlsValue1',
  });

  @NonNls
  final testMap = nonNls({
    'key': 'value',
  });
  // 因为 `testMap` 被 `@NonNls` 注解,所以用字符串字面量访问键将被忽略。
  print(testMap['key']);
}

class SomeAnnotation {
  const SomeAnnotation(String test);
}

运行上述文件后,你可能会看到类似以下的警告:

$ dart bin/string_literal_finder.dart --path=example
2020-08-08 14:38:47.800339 INFO string_literal_finder - Found 1 literals:
2020-08-08 14:38:47.801934 INFO string_literal_finder - lib/example.dart:17:30 'not translated'
Found 1 literals in 1 files.
$

更多关于Flutter字符串查找插件string_literal_finder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter字符串查找插件string_literal_finder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,string_literal_finder 插件并不是一个广泛认知的标准插件,但假设它是一个用于查找字符串字面量的自定义或第三方插件,我们可以构想其使用方式可能类似于文本处理库。由于无法直接获取该插件的具体实现细节,我将提供一个假设性的代码案例来展示如何在Flutter项目中集成和使用一个类似的字符串查找功能。

通常情况下,字符串查找功能可以通过正则表达式或简单的字符串匹配算法来实现。为了模拟string_literal_finder插件的使用,我将创建一个简单的Flutter应用,它包含一个自定义的字符串查找功能。

1. 创建Flutter项目

首先,创建一个新的Flutter项目(如果还没有的话):

flutter create string_literal_finder_example
cd string_literal_finder_example

2. 添加字符串查找功能

lib目录下创建一个新的Dart文件,比如string_literal_finder.dart,并添加以下代码来模拟字符串查找功能:

// lib/string_literal_finder.dart

class StringLiteralFinder {
  /// Finds all occurrences of [searchString] in [text].
  List<int> findAllOccurrences(String text, String searchString) {
    final List<int> indices = [];
    int startIndex = 0;
    while (true) {
      int index = text.indexOf(searchString, startIndex);
      if (index == -1) break;
      indices.add(index);
      startIndex = index + searchString.length;
    }
    return indices;
  }
}

3. 使用字符串查找功能

接下来,在main.dart文件中使用这个自定义的字符串查找功能:

import 'package:flutter/material.dart';
import 'string_literal_finder.dart'; // 导入自定义的字符串查找类

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'String Literal Finder Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: StringLiteralFinderScreen(),
    );
  }
}

class StringLiteralFinderScreen extends StatefulWidget {
  @override
  _StringLiteralFinderScreenState createState() => _StringLiteralFinderScreenState();
}

class _StringLiteralFinderScreenState extends State<StringLiteralFinderScreen> {
  final StringLiteralFinder _finder = StringLiteralFinder();
  final String _text = "Hello, this is a test string. This string contains test multiple times.";
  String _searchString = "test";
  List<int> _occurrences = [];

  void _findOccurrences() {
    setState(() {
      _occurrences = _finder.findAllOccurrences(_text, _searchString);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('String Literal Finder'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(labelText: 'Search String'),
              onChanged: (value) {
                _searchString = value;
                _findOccurrences();
              },
            ),
            SizedBox(height: 16),
            Text('Occurrences:'),
            Wrap(
              spacing: 8,
              runSpacing: 8,
              children: List.generate(_occurrences.length, (index) {
                return Chip(
                  label: Text('${_occurrences[index]}'),
                );
              }),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _findOccurrences,
        tooltip: 'Find Occurrences',
        child: Icon(Icons.search),
      ),
    );
  }
}

4. 运行应用

现在,你可以运行Flutter应用来查看字符串查找功能的效果:

flutter run

在应用中,你可以输入搜索字符串,应用将显示该字符串在文本中出现的所有位置的索引。

注意

  • 上面的代码仅作为模拟示例,用于展示如何在Flutter应用中实现基本的字符串查找功能。
  • 如果string_literal_finder是一个真实存在的插件,你应该查阅其官方文档以获取正确的使用方法和API。
  • 插件通常可以通过pubspec.yaml文件添加依赖来使用,例如:
dependencies:
  string_literal_finder: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来安装插件。

回到顶部